summaryrefslogtreecommitdiff
path: root/gemfeed
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 18:17:20 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 18:17:20 +0200
commit8a78337ea4dcb0b154bd1c754218ca01c8f9015d (patch)
tree2501c4ab66bffff5bc443553e769bedd9f035b33 /gemfeed
parenta37a644c48e824796989d532cefa564e7a3c89c1 (diff)
Update content for html
Diffstat (limited to 'gemfeed')
-rw-r--r--gemfeed/2008-06-26-perl-poetry.html166
-rw-r--r--gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html18
-rw-r--r--gemfeed/2009-02-13-sgi-onyx-3200.html18
-rw-r--r--gemfeed/2010-04-09-standard-ml-and-haskell.html184
-rw-r--r--gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.html18
-rw-r--r--gemfeed/2010-05-09-the-fype-programming-language.html96
-rw-r--r--gemfeed/2011-05-07-perl-daemon-service-framework.html138
-rw-r--r--gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html206
-rw-r--r--gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html202
-rw-r--r--gemfeed/2016-04-03-offsite-backup-with-zfs.html18
-rw-r--r--gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html18
-rw-r--r--gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html18
-rw-r--r--gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html18
-rw-r--r--gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html84
-rw-r--r--gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html18
-rw-r--r--gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html18
-rw-r--r--gemfeed/2021-04-24-welcome-to-the-geminispace.html18
-rw-r--r--gemfeed/2021-05-16-personal-bash-coding-style-guide.html294
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html54
-rw-r--r--gemfeed/2021-07-04-the-well-grounded-rubyist.html18
-rw-r--r--gemfeed/2021-08-01-on-being-pedantic-about-open-source.html18
-rw-r--r--gemfeed/2021-09-12-keep-it-simple-and-stupid.html18
-rw-r--r--gemfeed/2021-10-22-defensive-devops.html18
-rw-r--r--gemfeed/2021-11-29-bash-golf-part-1.html18
-rw-r--r--gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html18
-rw-r--r--gemfeed/2022-01-01-bash-golf-part-2.html18
-rw-r--r--gemfeed/2022-01-23-welcome-to-the-foo.zone.html18
-rw-r--r--gemfeed/2022-02-04-computer-operating-systems-i-use.html18
-rw-r--r--gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html18
-rw-r--r--gemfeed/2022-04-10-creative-universe.html18
-rw-r--r--gemfeed/2022-05-27-perl-is-still-a-great-choice.html18
-rw-r--r--gemfeed/2022-06-15-sweating-the-small-stuff.html18
-rw-r--r--gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html18
-rw-r--r--gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.html52
-rw-r--r--gemfeed/2022-09-30-after-a-bad-nights-sleep.html18
-rw-r--r--gemfeed/2022-10-30-installing-dtail-on-openbsd.html18
-rw-r--r--gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.html26
-rw-r--r--gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html18
-rw-r--r--gemfeed/2023-01-23-why-grapheneos-rox.html18
-rw-r--r--gemfeed/2023-02-26-how-to-shut-down-after-work.html18
-rw-r--r--gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.html18
-rw-r--r--gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html36
-rw-r--r--gemfeed/2023-04-01-never-split-the-difference-book-notes.html18
-rw-r--r--gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html20
-rw-r--r--gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.html18
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html120
-rw-r--r--gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.html18
-rw-r--r--gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html28
-rw-r--r--gemfeed/2023-08-18-site-reliability-engineering-part-1.html18
-rw-r--r--gemfeed/2023-09-25-dtail-usage-examples.html124
-rw-r--r--gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html136
-rw-r--r--gemfeed/2023-11-11-mind-management-book-notes.html18
-rw-r--r--gemfeed/2023-11-19-site-reliability-engineering-part-2.html18
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.html256
-rw-r--r--gemfeed/2024-01-09-site-reliability-engineering-part-3.html18
-rw-r--r--gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html28
-rw-r--r--gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.html18
-rw-r--r--gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html18
-rw-r--r--gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html218
-rw-r--r--gemfeed/2024-05-01-slow-productivity-book-notes.html18
-rw-r--r--gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.html30
-rw-r--r--gemfeed/2024-06-23-terminal-multiplexing-with-tmux.html182
-rw-r--r--gemfeed/2024-07-05-random-weird-things.html230
-rw-r--r--gemfeed/2024-07-07-the-stoic-challenge-book-notes.html18
-rw-r--r--gemfeed/2024-08-05-typing-127.1-words-per-minute.html18
-rw-r--r--gemfeed/2024-09-07-projects-i-support.html18
-rw-r--r--gemfeed/2024-09-07-site-reliability-engineering-part-4.html18
-rw-r--r--gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html20
-rw-r--r--gemfeed/2024-10-24-staff-engineer-book-notes.html18
-rw-r--r--gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html18
-rw-r--r--gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html294
-rw-r--r--gemfeed/2024-12-15-random-helix-themes.html128
-rw-r--r--gemfeed/2025-01-01-posts-from-october-to-december-2024.html18
-rw-r--r--gemfeed/2025-01-15-working-with-an-sre-interview.html18
-rw-r--r--gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.html284
-rw-r--r--gemfeed/2025-02-08-random-weird-things-ii.html146
-rw-r--r--gemfeed/2025-03-05-sharing-on-social-media-with-gos.html56
-rw-r--r--gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.html394
-rw-r--r--gemfeed/2025-04-19-when-book-notes.html18
-rw-r--r--gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.html34
-rw-r--r--gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.html1164
-rw-r--r--gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.html18
-rw-r--r--gemfeed/2025-06-22-task-samurai.html18
-rw-r--r--gemfeed/2025-07-01-posts-from-january-to-june-2025.html18
-rw-r--r--gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.html1840
-rw-r--r--gemfeed/2025-08-05-local-coding-llm-with-ollama.html202
-rw-r--r--gemfeed/2025-08-15-random-weird-things-iii.html18
-rw-r--r--gemfeed/2025-09-14-bash-golf-part-4.html304
-rw-r--r--gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html1064
-rw-r--r--gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html182
-rw-r--r--gemfeed/2025-11-02-perl-new-features-and-foostats.html174
-rw-r--r--gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.html18
-rw-r--r--gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.html290
-rw-r--r--gemfeed/2025-12-24-x-rag-observability-hackathon.html60
-rw-r--r--gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.html18
-rw-r--r--gemfeed/2026-01-01-posts-from-july-to-december-2025.html18
-rw-r--r--gemfeed/2026-01-01-using-supernote-nomad-offline.html62
-rw-r--r--gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.html476
-rw-r--r--gemfeed/2026-02-22-my-desk-rack.html18
-rw-r--r--gemfeed/2026-03-01-loadbars-0.13.0-released.html18
-rw-r--r--gemfeed/2026-03-01-site-reliability-engineering-part-5.html18
-rw-r--r--gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.html226
-rw-r--r--gemfeed/DRAFT-distributed-systems-simulator.html18
-rw-r--r--gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html132
-rw-r--r--gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.html344
-rw-r--r--gemfeed/DRAFT-ipv6test-deployment.html146
-rw-r--r--gemfeed/index.html18
107 files changed, 6336 insertions, 5694 deletions
diff --git a/gemfeed/2008-06-26-perl-poetry.html b/gemfeed/2008-06-26-perl-poetry.html
index d54b7210..ce173057 100644
--- a/gemfeed/2008-06-26-perl-poetry.html
+++ b/gemfeed/2008-06-26-perl-poetry.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Perl Poetry</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2008-06-26-perl-poetry.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2008-06-26-perl-poetry.gmi">Gemini</a>
</p>
@@ -59,44 +64,44 @@ _~~|~/_|_|__/|~~~~~~~ | / ~~~~~ | | ~~~~~~~~
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/perl</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/perl</font></i>
-<i><font color="silver"># (C) 2006 by Paul C. Buetow</font></i>
+<i><font color="#ababab"># (C) 2006 by Paul C. Buetow</font></i>
-<b><u><font color="#000000">goto</font></u></b> library <b><u><font color="#000000">for</font></u></b> study $math;
-BEGIN { <b><u><font color="#000000">s</font></u></b><font color="#808080">/earching/ books/</font>
-<b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">read</font></u></b> $them, $at, $the } library:
+<b><font color="#ffffff">goto</font></b><font color="#ff0000"> library </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> study </font><font color="#ff0000">$math</font><font color="#F3E651">;</font>
+<font color="#ff0000">BEGIN </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">s</font></b><font color="#bb00ff">/earching/ books/</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> </font><font color="#ff0000">$them</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$at</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$the</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> library</font><font color="#F3E651">:</font>
-<b><u><font color="#000000">our</font></u></b> $topics, <b><u><font color="#000000">cos</font></u></b> <b><u><font color="#000000">and</font></u></b> tan,
-<b><u><font color="#000000">require</font></u></b> strict; <b><u><font color="#000000">import</font></u></b> { of, <b><u><font color="#000000">tied</font></u></b> $patience };
+<b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">$topics</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">cos</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> tan</font><font color="#F3E651">,</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">require</font></b><font color="#ff0000"> strict</font><font color="#F3E651">;</font><font color="#ff0000"> </font><font color="#ababab">import</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> of</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">tied</font></b><font color="#ff0000"> </font><font color="#ff0000">$patience</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">int</font></u></b><font color="#808080">'egrate'</font>; <b><u><font color="#000000">sub</font></u></b> trade; };
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">exp</font></u></b><font color="#808080">'onentize'</font> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">abs</font></u></b><font color="#808080">'olutize'</font> };
-study <b><u><font color="#000000">and</font></u></b> study <b><u><font color="#000000">and</font></u></b> study <b><u><font color="#000000">and</font></u></b> study;
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">int</font></b><font color="#bb00ff">'egrate'</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> trade</font><font color="#F3E651">;</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">exp</font></b><font color="#bb00ff">'onentize'</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">abs</font></b><font color="#bb00ff">'olutize'</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<font color="#ff0000">study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">foreach</font></u></b> $topic ({of, math}) {
-you, <b><u><font color="#000000">m</font></u></b>/ay /go, to, limits }
+<b><font color="#ffffff">foreach</font></b><font color="#ff0000"> </font><font color="#ff0000">$topic</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#F3E651">{</font><font color="#ff0000">of</font><font color="#F3E651">,</font><font color="#ff0000"> math</font><font color="#F3E651">}</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000">you</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">m</font></b><font color="#ff0000">/ay /</font><font color="#ff0000">go</font><font color="#F3E651">,</font><font color="#ff0000"> to</font><font color="#F3E651">,</font><font color="#ff0000"> limits </font><font color="#F3E651">}</font>
-<b><u><font color="#000000">do</font></u></b> { not <b><u><font color="#000000">qw</font></u></b><font color="#808080">/erk /</font> <b><u><font color="#000000">unless</font></u></b> $success
-<b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">m</font></u></b>/ove /o;$n <b><u><font color="#000000">and</font></u></b> study };
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> not </font><b><font color="#ffffff">qw</font></b><font color="#bb00ff">/erk /</font><font color="#ff0000"> </font><b><font color="#ffffff">unless</font></b><font color="#ff0000"> </font><font color="#ff0000">$success</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">m</font></b><font color="#ff0000">/ove /</font><font color="#ff0000">o</font><font color="#F3E651">;</font><font color="#ff0000">$n</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">int</font></u></b><font color="#808080">'egrate'</font>; <b><u><font color="#000000">sub</font></u></b> trade; };
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">exp</font></u></b><font color="#808080">'onentize'</font> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">abs</font></u></b><font color="#808080">'olutize'</font> };
-study <b><u><font color="#000000">and</font></u></b> study <b><u><font color="#000000">and</font></u></b> study <b><u><font color="#000000">and</font></u></b> study;
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">int</font></b><font color="#bb00ff">'egrate'</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> trade</font><font color="#F3E651">;</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">exp</font></b><font color="#bb00ff">'onentize'</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">abs</font></b><font color="#bb00ff">'olutize'</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<font color="#ff0000">study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">grep</font></u></b> <font color="#808080">/all/</font>, <b><u><font color="#000000">exp</font></u></b><font color="#808080">'onents'</font> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">cos</font></u></b><font color="#808080">'inuses'</font>;
-<font color="#808080">/seek results/</font> <b><u><font color="#000000">for</font></u></b> @all, <b><u><font color="#000000">log</font></u></b><font color="#808080">'4rithms'</font>;
+<b><font color="#ffffff">grep</font></b><font color="#ff0000"> </font><font color="#bb00ff">/all/</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">exp</font></b><font color="#bb00ff">'onents'</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">cos</font></b><font color="#bb00ff">'inuses'</font><font color="#F3E651">;</font>
+<font color="#bb00ff">/seek results/</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#ff0000">@all</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">log</font></b><font color="#bb00ff">'4rithms'</font><font color="#F3E651">;</font>
-<font color="#808080">'you'</font> =~ <b><u><font color="#000000">m</font></u></b>/ay /go, not home
-<b><u><font color="#000000">unless</font></u></b> <b><u><font color="#000000">each</font></u></b> %book ne<i><font color="silver">#ars</font></i>
-$completion;
+<font color="#bb00ff">'you'</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><b><font color="#ffffff">m</font></b><font color="#ff0000">/ay /</font><font color="#ff0000">go</font><font color="#F3E651">,</font><font color="#ff0000"> not home </font>
+<b><font color="#ffffff">unless</font></b><font color="#ff0000"> </font><b><font color="#ffffff">each</font></b><font color="#ff0000"> </font><font color="#ff0000">%book</font><font color="#ff0000"> ne</font><i><font color="#ababab">#ars</font></i>
+<font color="#ff0000">$completion</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">int</font></u></b><font color="#808080">'egrate'</font>; <b><u><font color="#000000">sub</font></u></b> trade; };
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">exp</font></u></b><font color="#808080">'onentize'</font> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">abs</font></u></b><font color="#808080">'olutize'</font> };
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">int</font></b><font color="#bb00ff">'egrate'</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> trade</font><font color="#F3E651">;</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">exp</font></b><font color="#bb00ff">'onentize'</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">abs</font></b><font color="#bb00ff">'olutize'</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-<i><font color="silver">#at</font></i>
-home: <font color="#808080">//ig,'nore', time and sleep $very =~ s/tr/on/</font><b><u><font color="#000000">g</font></u></b>;
-__END__
+<i><font color="#ababab">#at</font></i>
+<font color="#ff0000">home</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">//ig,'nore', time and sleep $very =~ s/tr/on/</font><b><font color="#ffffff">g</font></b><font color="#F3E651">;</font>
+<font color="#ff0000">__END__</font>
</pre>
<br />
@@ -106,47 +111,47 @@ __END__
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/perl</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/perl</font></i>
-<i><font color="silver"># (C) 2006 by Paul C. Buetow</font></i>
+<i><font color="#ababab"># (C) 2006 by Paul C. Buetow</font></i>
-Christmas:{time;<i><font color="silver">#!!!</font></i>
+<font color="#ff0000">Christmas</font><font color="#F3E651">:</font><font color="#F3E651">{</font><font color="#ff0000">time</font><font color="#F3E651">;</font><i><font color="#ababab">#!!!</font></i>
-Children: <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">tell</font></u></b> $wishes;
+<font color="#ff0000">Children</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">tell</font></b><font color="#ff0000"> </font><font color="#ff0000">$wishes</font><font color="#F3E651">;</font>
-Santa: <b><u><font color="#000000">for</font></u></b> $each (@children) {
-BEGIN { <b><u><font color="#000000">read</font></u></b> $each, $their, wishes <b><u><font color="#000000">and</font></u></b> study them; <b><u><font color="#000000">use</font></u></b> Memoize<i><font color="silver">#ing</font></i>
+<font color="#ff0000">Santa</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@children</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font>
+<font color="#ff0000">BEGIN </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$their</font><font color="#F3E651">,</font><font color="#ff0000"> wishes </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study them</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">use</font></b><font color="#ff0000"> Memoize</font><i><font color="#ababab">#ing</font></i>
-} <b><u><font color="#000000">use</font></u></b> constant gift, <font color="#808080">'wrapping'</font>;
-<b><u><font color="#000000">package</font></u></b> Gifts; <b><u><font color="#000000">pack</font></u></b> $each, gift <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">bless</font></u></b> $each <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">goto</font></u></b> deliver
-or <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">import</font></u></b> <b><u><font color="#000000">if</font></u></b> not <b><u><font color="#000000">local</font></u></b> $available,!!! HO, HO, HO;
+<font color="#F3E651">}</font><font color="#ff0000"> </font><b><font color="#ffffff">use</font></b><font color="#ff0000"> constant gift</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'wrapping'</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">package</font></b><font color="#ff0000"> Gifts</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">pack</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#F3E651">,</font><font color="#ff0000"> gift </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">bless</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">goto</font></b><font color="#ff0000"> deliver</font>
+<font color="#ff0000">or </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#ababab">import</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">$available</font><font color="#F3E651">,!!!</font><font color="#ff0000"> HO</font><font color="#F3E651">,</font><font color="#ff0000"> HO</font><font color="#F3E651">,</font><font color="#ff0000"> HO</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">redo</font></u></b> Santa, <b><u><font color="#000000">pipe</font></u></b> $gifts, to_childs;
-<b><u><font color="#000000">redo</font></u></b> Santa <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">return</font></u></b> <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">last</font></u></b> one, is, delivered;
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">pipe</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">,</font><font color="#ff0000"> to_childs</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">last</font></b><font color="#ff0000"> one</font><font color="#F3E651">,</font><font color="#ff0000"> is</font><font color="#F3E651">,</font><font color="#ff0000"> delivered</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
-deliver: gift <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">require</font></u></b> diagnostics <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">our</font></u></b> $gifts ,not break;
-<b><u><font color="#000000">do</font></u></b>{ <b><u><font color="#000000">use</font></u></b> NEXT; time; <b><u><font color="#000000">tied</font></u></b> $gifts} <b><u><font color="#000000">if</font></u></b> broken <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">dump</font></u></b> the, broken, ones;
-The_children: <b><u><font color="#000000">sleep</font></u></b> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">wait</font></u></b> <b><u><font color="#000000">for</font></u></b> (<b><u><font color="#000000">each</font></u></b> %gift) <b><u><font color="#000000">and</font></u></b> try { to =&gt; <b><u><font color="#000000">untie</font></u></b> $gifts };
+<font color="#ff0000">deliver</font><font color="#F3E651">:</font><font color="#ff0000"> gift </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">require</font></b><font color="#ff0000"> diagnostics </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#ff0000"> </font><font color="#F3E651">,</font><font color="#ff0000">not break</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">do</font></b><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">use</font></b><font color="#ff0000"> NEXT</font><font color="#F3E651">;</font><font color="#ff0000"> time</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">tied</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">}</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> broken </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">dump</font></b><font color="#ff0000"> the</font><font color="#F3E651">,</font><font color="#ff0000"> broken</font><font color="#F3E651">,</font><font color="#ff0000"> ones</font><font color="#F3E651">;</font>
+<font color="#ff0000">The_children</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">sleep</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">wait</font></b><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#ffffff">each</font></b><font color="#ff0000"> </font><font color="#ff0000">%gift</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> try </font><font color="#F3E651">{</font><font color="#ff0000"> to </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><b><font color="#ffffff">untie</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">redo</font></u></b> Santa, <b><u><font color="#000000">pipe</font></u></b> $gifts, to_childs;
-<b><u><font color="#000000">redo</font></u></b> Santa <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">return</font></u></b> <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">last</font></u></b> one, is, delivered;
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">pipe</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">,</font><font color="#ff0000"> to_childs</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">last</font></b><font color="#ff0000"> one</font><font color="#F3E651">,</font><font color="#ff0000"> is</font><font color="#F3E651">,</font><font color="#ff0000"> delivered</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
-The_christmas_tree: formline <b><u><font color="#000000">s</font></u></b><font color="#808080">/ /childrens/</font>, $gifts;
-<b><u><font color="#000000">alarm</font></u></b> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">warn</font></u></b> <b><u><font color="#000000">if</font></u></b> not <b><u><font color="#000000">exists</font></u></b> $Christmas{ tree}, @t, $ENV{HOME};
-<b><u><font color="#000000">write</font></u></b> &lt;&lt;EMail
- to the parents to buy a new christmas tree!!!!<font color="#000000">111</font>
- <b><u><font color="#000000">and</font></u></b> send the
-EMail
-;<b><u><font color="#000000">wait</font></u></b> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">redo</font></u></b> deliver until <b><u><font color="#000000">defined</font></u></b> <b><u><font color="#000000">local</font></u></b> $tree;
+<font color="#ff0000">The_christmas_tree</font><font color="#F3E651">:</font><font color="#ff0000"> formline </font><b><font color="#ffffff">s</font></b><font color="#bb00ff">/ /childrens/</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">alarm</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">warn</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">exists</font></b><font color="#ff0000"> </font><font color="#ff0000">$Christmas</font><font color="#F3E651">{</font><font color="#ff0000"> tree</font><font color="#F3E651">}</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">@t</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$ENV</font><font color="#F3E651">{</font><font color="#ff0000">HOME</font><font color="#F3E651">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">write</font></b><font color="#ff0000"> </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">EMail</font>
+<font color="#ff0000"> to the parents to buy a new christmas tree</font><font color="#F3E651">!!!!</font><font color="#bb00ff">111</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> send the</font>
+<font color="#ff0000">EMail</font>
+<font color="#F3E651">;</font><b><font color="#ffffff">wait</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">redo</font></b><font color="#ff0000"> deliver until </font><b><font color="#ffffff">defined</font></b><font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">$tree</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">redo</font></u></b> Santa, <b><u><font color="#000000">pipe</font></u></b> $gifts, to_childs;
-<b><u><font color="#000000">redo</font></u></b> Santa <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">return</font></u></b> <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">last</font></u></b> one, is, delivered ;}
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">pipe</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">,</font><font color="#ff0000"> to_childs</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">last</font></b><font color="#ff0000"> one</font><font color="#F3E651">,</font><font color="#ff0000"> is</font><font color="#F3E651">,</font><font color="#ff0000"> delivered </font><font color="#F3E651">;</font><font color="#F3E651">}</font>
-END {} <b><u><font color="#000000">our</font></u></b> $mission <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">sleep</font></u></b> until <b><u><font color="#000000">next</font></u></b> Christmas ;}
+<font color="#ff0000">END </font><font color="#F3E651">{}</font><font color="#ff0000"> </font><b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">$mission</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">sleep</font></b><font color="#ff0000"> until </font><b><font color="#ffffff">next</font></b><font color="#ff0000"> Christmas </font><font color="#F3E651">;</font><font color="#F3E651">}</font>
-__END__
+<font color="#ff0000">__END__</font>
-This is perl, v5.<font color="#000000">8.8</font> built <b><u><font color="#000000">for</font></u></b> i386-freebsd-64int
+<font color="#ff0000">This is perl</font><font color="#F3E651">,</font><font color="#ff0000"> v5</font><font color="#F3E651">.</font><font color="#bb00ff">8.8</font><font color="#ff0000"> built </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i386</font><font color="#F3E651">-</font><font color="#ff0000">freebsd</font><font color="#F3E651">-</font><font color="#ff0000">64int</font>
</pre>
<br />
<h2 style='display: inline' id='shoppingpl'>shopping.pl</h2><br />
@@ -155,35 +160,35 @@ This is perl, v5.<font color="#000000">8.8</font> built <b><u><font color="#0000
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/perl</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/perl</font></i>
-<i><font color="silver"># (C) 2007 by Paul C. Buetow</font></i>
+<i><font color="#ababab"># (C) 2007 by Paul C. Buetow</font></i>
-BEGIN{} <b><u><font color="#000000">goto</font></u></b> mall <b><u><font color="#000000">for</font></u></b> $shopping;
+<font color="#ff0000">BEGIN</font><font color="#F3E651">{}</font><font color="#ff0000"> </font><b><font color="#ffffff">goto</font></b><font color="#ff0000"> mall </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#ff0000">$shopping</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
-<b><u><font color="#000000">m</font></u></b>/y/; mall: <b><u><font color="#000000">seek</font></u></b>$s, cool products(), { to =&gt; $sell };
-<b><u><font color="#000000">for</font></u></b> $their (@business) { to:; earn:; a:; lot:; of:; money: }
+<b><font color="#ffffff">m</font></b><font color="#ff0000">/y/</font><font color="#F3E651">;</font><font color="#ff0000"> mall</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">seek</font></b><font color="#ff0000">$s</font><font color="#F3E651">,</font><font color="#ff0000"> cool </font><font color="#7bc710">products</font><font color="#F3E651">(),</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> to </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$sell</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#ff0000">$their</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@business</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> to</font><font color="#F3E651">:;</font><font color="#ff0000"> earn</font><font color="#F3E651">:;</font><font color="#ff0000"> a</font><font color="#F3E651">:;</font><font color="#ff0000"> lot</font><font color="#F3E651">:;</font><font color="#ff0000"> of</font><font color="#F3E651">:;</font><font color="#ff0000"> money</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
-<b><u><font color="#000000">do</font></u></b> not <b><u><font color="#000000">goto</font></u></b> home <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">exit</font></u></b> mall <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">exists</font></u></b> $new{product};
-<b><u><font color="#000000">foreach</font></u></b> $of (<b><u><font color="#000000">q</font></u></b><font color="#808080">(uality rich products)</font>){} <b><u><font color="#000000">package</font></u></b> products;
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">goto</font></b><font color="#ff0000"> home </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> mall </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">exists</font></b><font color="#ff0000"> </font><font color="#ff0000">$new</font><font color="#F3E651">{</font><font color="#ff0000">product</font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">foreach</font></b><font color="#ff0000"> </font><font color="#ff0000">$of</font><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#ffffff">q</font></b><font color="#bb00ff">(uality rich products)</font><font color="#F3E651">)</font><font color="#F3E651">{}</font><font color="#ff0000"> </font><b><font color="#ffffff">package</font></b><font color="#ff0000"> products</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
-<b><u><font color="#000000">our</font></u></b> $news; <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">tell</font></u></b> cool products() <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b>{ <b><u><font color="#000000">sub</font></u></b><i><font color="silver">#tract</font></i>
-cool{ $products <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">shift</font></u></b> @the, @bad, @ones;
+<b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">$news</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">tell</font></b><font color="#ff0000"> cool </font><font color="#7bc710">products</font><font color="#F3E651">()</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><i><font color="#ababab">#tract</font></i>
+<font color="#ff0000">cool</font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#ff0000">$products</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b><font color="#ff0000"> </font><font color="#ff0000">@the</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">@bad</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">@ones</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">bless</font></u></b> [<b><u><font color="#000000">q</font></u></b><font color="#808080">(uality)</font>], $products
-<b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">return</font></u></b> not <b><u><font color="#000000">undef</font></u></b> $stuff <b><u><font color="#000000">if</font></u></b> not (<b><u><font color="#000000">local</font></u></b> $available) }};
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">bless</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><b><font color="#ffffff">q</font></b><font color="#bb00ff">(uality)</font><font color="#F3E651">],</font><font color="#ff0000"> </font><font color="#ff0000">$products</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">undef</font></b><font color="#ff0000"> </font><font color="#ff0000">$stuff</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#7bc710">not</font><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">$available</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">}}</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">do</font></u></b> { study <b><u><font color="#000000">and</font></u></b> study <b><u><font color="#000000">and</font></u></b> study <b><u><font color="#000000">for</font></u></b> cool products() }
-<b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">seek</font></u></b> $all, cool products(), { to =&gt; $buy } };
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> cool </font><font color="#7bc710">products</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">seek</font></b><font color="#ff0000"> </font><font color="#ff0000">$all</font><font color="#F3E651">,</font><font color="#ff0000"> cool </font><font color="#7bc710">products</font><font color="#F3E651">(),</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> to </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$buy</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">do</font></u></b> { <b><u><font color="#000000">write</font></u></b> $them, $down } <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> { order: <b><u><font color="#000000">foreach</font></u></b> (@case) { <b><u><font color="#000000">package</font></u></b> <b><u><font color="#000000">s</font></u></b> } };
-<b><u><font color="#000000">goto</font></u></b> home <b><u><font color="#000000">if</font></u></b> not <b><u><font color="#000000">exists</font></u></b> $more{money} or <b><u><font color="#000000">die</font></u></b> <b><u><font color="#000000">q</font></u></b><font color="#808080">(uerying)</font> ;<b><u><font color="#000000">for</font></u></b>( @money){};
+<b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">write</font></b><font color="#ff0000"> </font><font color="#ff0000">$them</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$down</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> order</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">foreach</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@case</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">package</font></b><font color="#ff0000"> </font><b><font color="#ffffff">s</font></b><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">goto</font></b><font color="#ff0000"> home </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">exists</font></b><font color="#ff0000"> </font><font color="#ff0000">$more</font><font color="#F3E651">{</font><font color="#ff0000">money</font><font color="#F3E651">}</font><font color="#ff0000"> or </font><b><font color="#ffffff">die</font></b><font color="#ff0000"> </font><b><font color="#ffffff">q</font></b><font color="#bb00ff">(uerying)</font><font color="#ff0000"> </font><font color="#F3E651">;</font><b><font color="#ffffff">for</font></b><font color="#F3E651">(</font><font color="#ff0000"> </font><font color="#ff0000">@money</font><font color="#F3E651">)</font><font color="#F3E651">{}</font><font color="#F3E651">;</font>
-at:;home: <b><u><font color="#000000">do</font></u></b> { END{} <b><u><font color="#000000">and</font></u></b>:; rest:; a:; bit: <b><u><font color="#000000">exit</font></u></b> $shopping }
-<b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">sleep</font></u></b> until <b><u><font color="#000000">unpack</font></u></b>$ing, cool products();
+<font color="#ff0000">at</font><font color="#F3E651">:;</font><font color="#ff0000">home</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> END</font><font color="#F3E651">{}</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#F3E651">:;</font><font color="#ff0000"> rest</font><font color="#F3E651">:;</font><font color="#ff0000"> a</font><font color="#F3E651">:;</font><font color="#ff0000"> bit</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#ff0000">$shopping</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">sleep</font></b><font color="#ff0000"> until </font><b><font color="#ffffff">unpack</font></b><font color="#ff0000">$ing</font><font color="#F3E651">,</font><font color="#ff0000"> cool </font><font color="#7bc710">products</font><font color="#F3E651">();</font>
-__END__
-This is perl, v5.<font color="#000000">8.8</font> built <b><u><font color="#000000">for</font></u></b> i386-freebsd-64int
+<font color="#ff0000">__END__</font>
+<font color="#ff0000">This is perl</font><font color="#F3E651">,</font><font color="#ff0000"> v5</font><font color="#F3E651">.</font><font color="#bb00ff">8.8</font><font color="#ff0000"> built </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i386</font><font color="#F3E651">-</font><font color="#ff0000">freebsd</font><font color="#F3E651">-</font><font color="#ff0000">64int</font>
</pre>
<br />
<h2 style='display: inline' id='more'>More...</h2><br />
@@ -203,11 +208,12 @@ This is perl, v5.<font color="#000000">8.8</font> built <b><u><font color="#0000
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html
index 0519118b..d7567509 100644
--- a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html
+++ b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Using my Nokia N95 for fixing my MTA</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi">Gemini</a>
</p>
@@ -53,11 +58,12 @@ _jgs_\|//_\\|///_\V/_\|//__
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2009-02-13-sgi-onyx-3200.html b/gemfeed/2009-02-13-sgi-onyx-3200.html
index 30be2200..a62d1e46 100644
--- a/gemfeed/2009-02-13-sgi-onyx-3200.html
+++ b/gemfeed/2009-02-13-sgi-onyx-3200.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SGI Onyx 3200</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2009-02-13-sgi-onyx-3200.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2009-02-13-sgi-onyx-3200.gmi">Gemini</a>
</p>
@@ -81,11 +86,12 @@ USB Human Interface Device: device id 0 type mouse
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2010-04-09-standard-ml-and-haskell.html b/gemfeed/2010-04-09-standard-ml-and-haskell.html
index 7fc14e02..52440e1a 100644
--- a/gemfeed/2010-04-09-standard-ml-and-haskell.html
+++ b/gemfeed/2010-04-09-standard-ml-and-haskell.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Standard ML and Haskell</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2010-04-09-standard-ml-and-haskell.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell.gmi">Gemini</a>
</p>
@@ -40,10 +45,10 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">datatype</font></u></b> ’a multi
- = EMPTY
- | ELEM <b><u><font color="#000000">of</font></u></b> ’a
- | UNION <b><u><font color="#000000">of</font></u></b> ’a multi * ’a multi
+<pre><b><font color="#ffffff">datatype</font></b><font color="#ff0000"> ’a multi</font>
+<font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> EMPTY</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> ELEM </font><b><font color="#ffffff">of</font></b><font color="#ff0000"> ’a</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> UNION </font><b><font color="#ffffff">of</font></b><font color="#ff0000"> ’a multi </font><font color="#F3E651">*</font><font color="#ff0000"> ’a multi</font>
</pre>
<br />
<span>Haskell:</span><br />
@@ -52,11 +57,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">data</font></u></b> (<b><font color="#000000">Eq</font></b> a) =&gt; <b><font color="#000000">Multi</font></b> a
- = <b><font color="#000000">Empty</font></b>
- | <b><font color="#000000">Elem</font></b> a
- | <b><font color="#000000">Union</font></b> (<b><font color="#000000">Multi</font></b> a) (<b><font color="#000000">Multi</font></b> a)
- <b><u><font color="#000000">deriving</font></u></b> <b><font color="#000000">Show</font></b>
+<pre><b><font color="#ffffff">data</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Eq</font></b><font color="#ff0000"> a</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><b><font color="#F35E1E">Multi</font></b><font color="#ff0000"> a</font>
+<font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">Empty</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> a</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Multi</font></b><font color="#ff0000"> a</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Multi</font></b><font color="#ff0000"> a</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">deriving</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">Show</font></b>
</pre>
<br />
<h2 style='display: inline' id='processing-a-multi'>Processing a multi</h2><br />
@@ -67,12 +72,12 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">fun</font></u></b> number (EMPTY) _ = <font color="#000000">0</font>
- | number (ELEM x) w = <b><u><font color="#000000">if</font></u></b> x = w <b><u><font color="#000000">then</font></u></b> <font color="#000000">1</font> <b><u><font color="#000000">else</font></u></b> <font color="#000000">0</font>
- | number (UNION (x,y)) w = (number x w) + (number y w)
-<b><u><font color="#000000">fun</font></u></b> test_number w = number (UNION (EMPTY, \
- UNION (ELEM <font color="#000000">4</font>, UNION (ELEM <font color="#000000">6</font>, \
- UNION (UNION (ELEM <font color="#000000">4</font>, ELEM <font color="#000000">4</font>), EMPTY))))) w
+<pre><b><font color="#ffffff">fun</font></b><font color="#ff0000"> number </font><font color="#F3E651">(</font><font color="#ff0000">EMPTY</font><font color="#F3E651">)</font><font color="#ff0000"> _ </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> number </font><font color="#F3E651">(</font><font color="#ff0000">ELEM x</font><font color="#F3E651">)</font><font color="#ff0000"> w </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> x </font><font color="#F3E651">=</font><font color="#ff0000"> w </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> number </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000">y</font><font color="#F3E651">))</font><font color="#ff0000"> w </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">number x w</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">number y w</font><font color="#F3E651">)</font>
+<b><font color="#ffffff">fun</font></b><font color="#ff0000"> test_number w </font><font color="#F3E651">=</font><font color="#ff0000"> number </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">EMPTY</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> UNION </font><font color="#F3E651">(</font><font color="#ff0000">ELEM </font><font color="#bb00ff">4</font><font color="#F3E651">,</font><font color="#ff0000"> UNION </font><font color="#F3E651">(</font><font color="#ff0000">ELEM </font><font color="#bb00ff">6</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> UNION </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">ELEM </font><font color="#bb00ff">4</font><font color="#F3E651">,</font><font color="#ff0000"> ELEM </font><font color="#bb00ff">4</font><font color="#F3E651">),</font><font color="#ff0000"> EMPTY</font><font color="#F3E651">)))))</font><font color="#ff0000"> w </font>
</pre>
<br />
<span>Haskell:</span><br />
@@ -81,11 +86,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>number <b><font color="#000000">Empty</font></b> <b><u><font color="#000000">_</font></u></b> = <font color="#000000">0</font>
-number (<b><font color="#000000">Elem</font></b> x) w = <b><u><font color="#000000">if</font></u></b> x == w <b><u><font color="#000000">then</font></u></b> <font color="#000000">1</font> <b><u><font color="#000000">else</font></u></b> <font color="#000000">0</font>
-test_number w = number (<b><font color="#000000">Union</font></b> <b><font color="#000000">Empty</font></b> \
- (<b><font color="#000000">Union</font></b> (<b><font color="#000000">Elem</font></b> <font color="#000000">4</font>) (<b><font color="#000000">Union</font></b> (<b><font color="#000000">Elem</font></b> <font color="#000000">6</font>) \
- (<b><font color="#000000">Union</font></b> (<b><font color="#000000">Union</font></b> (<b><font color="#000000">Elem</font></b> <font color="#000000">4</font>) (<b><font color="#000000">Elem</font></b> <font color="#000000">4</font>)) <b><font color="#000000">Empty</font></b>)))) w
+<pre><font color="#ff0000">number </font><b><font color="#F35E1E">Empty</font></b><font color="#ff0000"> </font><b><font color="#ffffff">_</font></b><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">number </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> x</font><font color="#F3E651">)</font><font color="#ff0000"> w </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> x </font><font color="#F3E651">==</font><font color="#ff0000"> w </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">test_number w </font><font color="#F3E651">=</font><font color="#ff0000"> number </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">Empty</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> </font><font color="#bb00ff">6</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">))</font><font color="#ff0000"> </font><b><font color="#F35E1E">Empty</font></b><font color="#F3E651">))))</font><font color="#ff0000"> w</font>
</pre>
<br />
<h2 style='display: inline' id='simplify-function'>Simplify function</h2><br />
@@ -96,19 +101,19 @@ test_number w = number (<b><font color="#000000">Union</font></b> <b><font color
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">fun</font></u></b> simplify (UNION (x,y)) =
- <b><u><font color="#000000">let</font></u></b> <b><u><font color="#000000">fun</font></u></b> is_empty (EMPTY) = true | is_empty _ = false
- <b><u><font color="#000000">val</font></u></b> x’ = simplify x
- <b><u><font color="#000000">val</font></u></b> y’ = simplify y
- <b><u><font color="#000000">in</font></u></b> <b><u><font color="#000000">if</font></u></b> (is_empty x’) <b><u><font color="#000000">andalso</font></u></b> (is_empty y’)
- <b><u><font color="#000000">then</font></u></b> EMPTY
- <b><u><font color="#000000">else</font></u></b> <b><u><font color="#000000">if</font></u></b> (is_empty x’)
- <b><u><font color="#000000">then</font></u></b> y’
- <b><u><font color="#000000">else</font></u></b> <b><u><font color="#000000">if</font></u></b> (is_empty y’)
- <b><u><font color="#000000">then</font></u></b> x’
- <b><u><font color="#000000">else</font></u></b> UNION (x’, y’)
- <b><u><font color="#000000">end</font></u></b>
- | simplify x = x
+<pre><b><font color="#ffffff">fun</font></b><font color="#ff0000"> simplify </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000">y</font><font color="#F3E651">))</font><font color="#ff0000"> </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><b><font color="#ffffff">fun</font></b><font color="#ff0000"> is_empty </font><font color="#F3E651">(</font><font color="#ff0000">EMPTY</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> true </font><font color="#F3E651">|</font><font color="#ff0000"> is_empty _ </font><font color="#F3E651">=</font><font color="#ff0000"> false</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">val</font></b><font color="#ff0000"> x’ </font><font color="#F3E651">=</font><font color="#ff0000"> simplify x</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">val</font></b><font color="#ff0000"> y’ </font><font color="#F3E651">=</font><font color="#ff0000"> simplify y</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">is_empty x’</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">andalso</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">is_empty y’</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> EMPTY</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">is_empty x’</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> y’</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">is_empty y’</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> x’</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> UNION </font><font color="#F3E651">(</font><font color="#ff0000">x’</font><font color="#F3E651">,</font><font color="#ff0000"> y’</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> simplify x </font><font color="#F3E651">=</font><font color="#ff0000"> x</font>
</pre>
<br />
<span>Haskell:</span><br />
@@ -117,17 +122,17 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>simplify (<b><font color="#000000">Union</font></b> x y)
- | (isEmpty x’) &amp;&amp; (isEmpty y’) = <b><font color="#000000">Empty</font></b>
- | isEmpty x’ = y’
- | isEmpty y’ = x’
- | otherwise = <b><font color="#000000">Union</font></b> x’ y’
- <b><u><font color="#000000">where</font></u></b>
- isEmpty <b><font color="#000000">Empty</font></b> = <b><font color="#000000">True</font></b>
- isEmpty <b><u><font color="#000000">_</font></u></b> = <b><font color="#000000">False</font></b>
- x’ = simplify x
- y’ = simplify y
-simplify x = x
+<pre><font color="#ff0000">simplify </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> x y</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">isEmpty x’</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">isEmpty y’</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">Empty</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> isEmpty x’ </font><font color="#F3E651">=</font><font color="#ff0000"> y’</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> isEmpty y’ </font><font color="#F3E651">=</font><font color="#ff0000"> x’</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> otherwise </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> x’ y’</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">where</font></b>
+<font color="#ff0000"> isEmpty </font><b><font color="#F35E1E">Empty</font></b><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">True</font></b>
+<font color="#ff0000"> isEmpty </font><b><font color="#ffffff">_</font></b><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">False</font></b>
+<font color="#ff0000"> x’ </font><font color="#F3E651">=</font><font color="#ff0000"> simplify x</font>
+<font color="#ff0000"> y’ </font><font color="#F3E651">=</font><font color="#ff0000"> simplify y</font>
+<font color="#ff0000">simplify x </font><font color="#F3E651">=</font><font color="#ff0000"> x</font>
</pre>
<br />
<h2 style='display: inline' id='delete-all'>Delete all</h2><br />
@@ -138,12 +143,12 @@ simplify x = x
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">fun</font></u></b> delete_all m w =
- <b><u><font color="#000000">let</font></u></b> <b><u><font color="#000000">fun</font></u></b> delete_all’ (ELEM x) = <b><u><font color="#000000">if</font></u></b> x = w <b><u><font color="#000000">then</font></u></b> EMPTY <b><u><font color="#000000">else</font></u></b> ELEM x
- | delete_all’ (UNION (x,y)) = UNION (delete_all’ x, delete_all’ y)
- | delete_all’ x = x
- <b><u><font color="#000000">in</font></u></b> simplify (delete_all’ m)
- <b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">fun</font></b><font color="#ff0000"> delete_all m w </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><b><font color="#ffffff">fun</font></b><font color="#ff0000"> delete_all’ </font><font color="#F3E651">(</font><font color="#ff0000">ELEM x</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> x </font><font color="#F3E651">=</font><font color="#ff0000"> w </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> EMPTY </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> ELEM x</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> delete_all’ </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000">y</font><font color="#F3E651">))</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> UNION </font><font color="#F3E651">(</font><font color="#ff0000">delete_all’ x</font><font color="#F3E651">,</font><font color="#ff0000"> delete_all’ y</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> delete_all’ x </font><font color="#F3E651">=</font><font color="#ff0000"> x</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> simplify </font><font color="#F3E651">(</font><font color="#ff0000">delete_all’ m</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>Haskell:</span><br />
@@ -152,11 +157,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>delete_all m w = simplify (delete_all’ m)
- <b><u><font color="#000000">where</font></u></b>
- delete_all’ (<b><font color="#000000">Elem</font></b> x) = <b><u><font color="#000000">if</font></u></b> x == w <b><u><font color="#000000">then</font></u></b> <b><font color="#000000">Empty</font></b> <b><u><font color="#000000">else</font></u></b> <b><font color="#000000">Elem</font></b> x
- delete_all’ (<b><font color="#000000">Union</font></b> x y) = <b><font color="#000000">Union</font></b> (delete_all’ x) (delete_all’ y)
- delete_all’ x = x
+<pre><font color="#ff0000">delete_all m w </font><font color="#F3E651">=</font><font color="#ff0000"> simplify </font><font color="#F3E651">(</font><font color="#ff0000">delete_all’ m</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">where</font></b>
+<font color="#ff0000"> delete_all’ </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> x</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> x </font><font color="#F3E651">==</font><font color="#ff0000"> w </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">Empty</font></b><font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> x</font>
+<font color="#ff0000"> delete_all’ </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> x y</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">delete_all’ x</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">delete_all’ y</font><font color="#F3E651">)</font>
+<font color="#ff0000"> delete_all’ x </font><font color="#F3E651">=</font><font color="#ff0000"> x</font>
</pre>
<br />
<h2 style='display: inline' id='delete-one'>Delete one</h2><br />
@@ -167,21 +172,21 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">fun</font></u></b> delete_one m w =
- <b><u><font color="#000000">let</font></u></b> <b><u><font color="#000000">fun</font></u></b> delete_one’ (UNION (x,y)) =
- <b><u><font color="#000000">let</font></u></b> <b><u><font color="#000000">val</font></u></b> (x’, deleted) = delete_one’ x
- <b><u><font color="#000000">in</font></u></b> <b><u><font color="#000000">if</font></u></b> deleted
- <b><u><font color="#000000">then</font></u></b> (UNION (x’, y), deleted)
- <b><u><font color="#000000">else</font></u></b> <b><u><font color="#000000">let</font></u></b> <b><u><font color="#000000">val</font></u></b> (y’, deleted) = delete_one’ y
- <b><u><font color="#000000">in</font></u></b> (UNION (x, y’), deleted)
- <b><u><font color="#000000">end</font></u></b>
- <b><u><font color="#000000">end</font></u></b>
- | delete_one’ (ELEM x) =
- <b><u><font color="#000000">if</font></u></b> x = w <b><u><font color="#000000">then</font></u></b> (EMPTY, true) <b><u><font color="#000000">else</font></u></b> (ELEM x, false)
- | delete_one’ x = (x, false)
- <b><u><font color="#000000">val</font></u></b> (m’, _) = delete_one’ m
- <b><u><font color="#000000">in</font></u></b> simplify m’
- <b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">fun</font></b><font color="#ff0000"> delete_one m w </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><b><font color="#ffffff">fun</font></b><font color="#ff0000"> delete_one’ </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000">y</font><font color="#F3E651">))</font><font color="#ff0000"> </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><b><font color="#ffffff">val</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">x’</font><font color="#F3E651">,</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> delete_one’ x</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> deleted</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">x’</font><font color="#F3E651">,</font><font color="#ff0000"> y</font><font color="#F3E651">),</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><b><font color="#ffffff">val</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">y’</font><font color="#F3E651">,</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> delete_one’ y</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">UNION </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000"> y’</font><font color="#F3E651">),</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> delete_one’ </font><font color="#F3E651">(</font><font color="#ff0000">ELEM x</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> x </font><font color="#F3E651">=</font><font color="#ff0000"> w </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">EMPTY</font><font color="#F3E651">,</font><font color="#ff0000"> true</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ELEM x</font><font color="#F3E651">,</font><font color="#ff0000"> false</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> delete_one’ x </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000"> false</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">val</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">m’</font><font color="#F3E651">,</font><font color="#ff0000"> _</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> delete_one’ m</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> simplify m’</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>Haskell:</span><br />
@@ -190,19 +195,19 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>delete_one m w = <b><u><font color="#000000">do</font></u></b>
- <b><u><font color="#000000">let</font></u></b> (m’, <b><u><font color="#000000">_</font></u></b>) = delete_one’ m
- simplify m’
- <b><u><font color="#000000">where</font></u></b>
- delete_one’ (<b><font color="#000000">Union</font></b> x y) =
- <b><u><font color="#000000">let</font></u></b> (x’, deleted) = delete_one’ x
- <b><u><font color="#000000">in</font></u></b> <b><u><font color="#000000">if</font></u></b> deleted
- <b><u><font color="#000000">then</font></u></b> (<b><font color="#000000">Union</font></b> x’ y, deleted)
- <b><u><font color="#000000">else</font></u></b> <b><u><font color="#000000">let</font></u></b> (y’, deleted) = delete_one’ y
- <b><u><font color="#000000">in</font></u></b> (<b><font color="#000000">Union</font></b> x y’, deleted)
- delete_one’ (<b><font color="#000000">Elem</font></b> x) =
- <b><u><font color="#000000">if</font></u></b> x == w <b><u><font color="#000000">then</font></u></b> (<b><font color="#000000">Empty</font></b>, <b><font color="#000000">True</font></b>) <b><u><font color="#000000">else</font></u></b> (<b><font color="#000000">Elem</font></b> x, <b><font color="#000000">False</font></b>)
- delete_one’ x = (x, <b><font color="#000000">False</font></b>)
+<pre><font color="#ff0000">delete_one m w </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">m’</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">_</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> delete_one’ m</font>
+<font color="#ff0000"> simplify m’</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">where</font></b>
+<font color="#ff0000"> delete_one’ </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> x y</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">x’</font><font color="#F3E651">,</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> delete_one’ x</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> deleted</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> x’ y</font><font color="#F3E651">,</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><b><font color="#ffffff">let</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">y’</font><font color="#F3E651">,</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> delete_one’ y</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Union</font></b><font color="#ff0000"> x y’</font><font color="#F3E651">,</font><font color="#ff0000"> deleted</font><font color="#F3E651">)</font>
+<font color="#ff0000"> delete_one’ </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> x</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> x </font><font color="#F3E651">==</font><font color="#ff0000"> w </font><b><font color="#ffffff">then</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Empty</font></b><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#F35E1E">True</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">Elem</font></b><font color="#ff0000"> x</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#F35E1E">False</font></b><font color="#F3E651">)</font>
+<font color="#ff0000"> delete_one’ x </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">x</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#F35E1E">False</font></b><font color="#F3E651">)</font>
</pre>
<br />
<h2 style='display: inline' id='higher-order-functions'>Higher-order functions</h2><br />
@@ -227,11 +232,12 @@ my_filter f l = foldr (make_filter_fn f) [] l
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.html b/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.html
index 641d8c0c..0565803b 100644
--- a/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.html
+++ b/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Lazy Evaluation with Standard ML</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2010-05-07-lazy-evaluation-with-standard-ml.gmi">Gemini</a>
</p>
@@ -113,11 +118,12 @@ first 10 nat_pairs_not_null
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2010-05-09-the-fype-programming-language.html b/gemfeed/2010-05-09-the-fype-programming-language.html
index 372c9d53..746e9322 100644
--- a/gemfeed/2010-05-09-the-fype-programming-language.html
+++ b/gemfeed/2010-05-09-the-fype-programming-language.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>The Fype Programming Language</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2010-05-09-the-fype-programming-language.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2010-05-09-the-fype-programming-language.gmi">Gemini</a>
</p>
@@ -69,12 +74,12 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">typedef</font></u></b> <b><u><font color="#000000">struct</font></u></b> {
- Tupel *p_tupel_argv; <i><font color="silver">// Contains command line options</font></i>
- List *p_list_token; <i><font color="silver">// Initial list of token</font></i>
- Hash *p_hash_syms; <i><font color="silver">// Symbol table</font></i>
- <b><font color="#000000">char</font></b> *c_basename;
-} Fype;
+<pre><b><font color="#ffffff">typedef</font></b><font color="#ff0000"> </font><b><font color="#ffffff">struct</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">Tupel</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">p_tupel_argv</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab">// Contains command line options</font></i>
+<font color="#ff0000"> </font><font color="#ff0000">List</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">p_list_token</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab">// Initial list of token</font></i>
+<font color="#ff0000"> </font><font color="#ff0000">Hash</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">p_hash_syms</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab">// Symbol table</font></i>
+<font color="#ff0000"> </font><b><font color="#F35E1E">char</font></b><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">c_basename</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font><font color="#ff0000"> Fype</font><font color="#F3E651">;</font>
</pre>
<br />
<span>And here is a snippet from the primary Fype "class implementation":</span><br />
@@ -83,53 +88,53 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>Fype*
-fype_new() {
- Fype *p_fype = malloc(<b><u><font color="#000000">sizeof</font></u></b>(Fype));
+<pre><font color="#ff0000">Fype</font><font color="#F3E651">*</font>
+<font color="#7bc710">fype_new</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">Fype</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">p_fype </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">malloc</font><font color="#F3E651">(</font><b><font color="#ffffff">sizeof</font></b><font color="#F3E651">(</font><font color="#ff0000">Fype</font><font color="#F3E651">));</font>
- p_fype-&gt;p_hash_syms = hash_new(<font color="#000000">512</font>);
- p_fype-&gt;p_list_token = list_new();
- p_fype-&gt;p_tupel_argv = tupel_new();
- p_fype-&gt;c_basename = NULL;
+<font color="#ff0000"> p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_hash_syms </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">hash_new</font><font color="#F3E651">(</font><font color="#bb00ff">512</font><font color="#F3E651">);</font>
+<font color="#ff0000"> p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_list_token </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">list_new</font><font color="#F3E651">();</font>
+<font color="#ff0000"> p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_tupel_argv </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">tupel_new</font><font color="#F3E651">();</font>
+<font color="#ff0000"> p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">c_basename </font><font color="#F3E651">=</font><font color="#ff0000"> NULL</font><font color="#F3E651">;</font>
- garbage_init();
+<font color="#ff0000"> </font><font color="#7bc710">garbage_init</font><font color="#F3E651">();</font>
- <b><u><font color="#000000">return</font></u></b> (p_fype);
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">);</font>
+<font color="#F3E651">}</font>
-<b><font color="#000000">void</font></b>
-fype_delete(Fype *p_fype) {
- argv_tupel_delete(p_fype-&gt;p_tupel_argv);
+<b><font color="#F35E1E">void</font></b>
+<font color="#7bc710">fype_delete</font><font color="#F3E651">(</font><font color="#ff0000">Fype</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">p_fype</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#7bc710">argv_tupel_delete</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_tupel_argv</font><font color="#F3E651">);</font>
- hash_iterate(p_fype-&gt;p_hash_syms, symbol_cleanup_hash_syms_cb);
- hash_delete(p_fype-&gt;p_hash_syms);
+<font color="#ff0000"> </font><font color="#7bc710">hash_iterate</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_hash_syms</font><font color="#F3E651">,</font><font color="#ff0000"> symbol_cleanup_hash_syms_cb</font><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><font color="#7bc710">hash_delete</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_hash_syms</font><font color="#F3E651">);</font>
- list_iterate(p_fype-&gt;p_list_token, token_ref_down_cb);
- list_delete(p_fype-&gt;p_list_token);
+<font color="#ff0000"> </font><font color="#7bc710">list_iterate</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_list_token</font><font color="#F3E651">,</font><font color="#ff0000"> token_ref_down_cb</font><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><font color="#7bc710">list_delete</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">p_list_token</font><font color="#F3E651">);</font>
- <b><u><font color="#000000">if</font></u></b> (p_fype-&gt;c_basename)
- free(p_fype-&gt;c_basename);
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">c_basename</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#7bc710">free</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">-&gt;</font><font color="#ff0000">c_basename</font><font color="#F3E651">);</font>
- garbage_destroy();
-}
+<font color="#ff0000"> </font><font color="#7bc710">garbage_destroy</font><font color="#F3E651">();</font>
+<font color="#F3E651">}</font>
-<b><font color="#000000">int</font></b>
-fype_run(<b><font color="#000000">int</font></b> i_argc, <b><font color="#000000">char</font></b> **pc_argv) {
- Fype *p_fype = fype_new();
+<b><font color="#F35E1E">int</font></b>
+<font color="#7bc710">fype_run</font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i_argc</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#F35E1E">char</font></b><font color="#ff0000"> </font><font color="#F3E651">**</font><font color="#ff0000">pc_argv</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">Fype</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">p_fype </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">fype_new</font><font color="#F3E651">();</font>
- <i><font color="silver">// argv: Maintains command line options</font></i>
- argv_run(p_fype, i_argc, pc_argv);
+<font color="#ff0000"> </font><i><font color="#ababab">// argv: Maintains command line options</font></i>
+<font color="#ff0000"> </font><font color="#7bc710">argv_run</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">,</font><font color="#ff0000"> i_argc</font><font color="#F3E651">,</font><font color="#ff0000"> pc_argv</font><font color="#F3E651">);</font>
- <i><font color="silver">// scanner: Creates a list of token</font></i>
- scanner_run(p_fype);
+<font color="#ff0000"> </font><i><font color="#ababab">// scanner: Creates a list of token</font></i>
+<font color="#ff0000"> </font><font color="#7bc710">scanner_run</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">);</font>
- <i><font color="silver">// interpret: Interpret the list of token</font></i>
- interpret_run(p_fype);
+<font color="#ff0000"> </font><i><font color="#ababab">// interpret: Interpret the list of token</font></i>
+<font color="#ff0000"> </font><font color="#7bc710">interpret_run</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">);</font>
- fype_delete(p_fype);
+<font color="#ff0000"> </font><font color="#7bc710">fype_delete</font><font color="#F3E651">(</font><font color="#ff0000">p_fype</font><font color="#F3E651">);</font>
- <b><u><font color="#000000">return</font></u></b> (<font color="#000000">0</font>);
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">);</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<h2 style='display: inline' id='data-types'>Data types</h2><br />
@@ -558,11 +563,12 @@ BB
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.html b/gemfeed/2011-05-07-perl-daemon-service-framework.html
index d68f12ca..071bf51b 100644
--- a/gemfeed/2011-05-07-perl-daemon-service-framework.html
+++ b/gemfeed/2011-05-07-perl-daemon-service-framework.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Perl Daemon (Service Framework)</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2011-05-07-perl-daemon-service-framework.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework.gmi">Gemini</a>
</p>
@@ -58,14 +63,14 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Starting</font></i>
- ./bin/perldaemon start (or shortcut ./control start)
+<pre><i><font color="#ababab"># Starting</font></i>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/bin/perldaemon start </font><font color="#F3E651">(</font><font color="#ff0000">or shortcut </font><font color="#F3E651">.</font><font color="#ff0000">/control start</font><font color="#F3E651">)</font>
-<i><font color="silver"># Stopping</font></i>
- ./bin/perldaemon stop (or shortcut ./control stop)
+<i><font color="#ababab"># Stopping</font></i>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/bin/perldaemon stop </font><font color="#F3E651">(</font><font color="#ff0000">or shortcut </font><font color="#F3E651">.</font><font color="#ff0000">/control stop</font><font color="#F3E651">)</font>
-<i><font color="silver"># Alternatively: Starting in foreground </font></i>
-./bin/perldaemon start daemon.daemonize=no (or shortcut ./control foreground)
+<i><font color="#ababab"># Alternatively: Starting in foreground </font></i>
+<font color="#F3E651">.</font><font color="#ff0000">/bin/perldaemon start daemon</font><font color="#F3E651">.</font><font color="#ff0000">daemonize</font><font color="#F3E651">=</font><font color="#ff0000">no </font><font color="#F3E651">(</font><font color="#ff0000">or shortcut </font><font color="#F3E651">.</font><font color="#ff0000">/control foreground</font><font color="#F3E651">)</font>
</pre>
<br />
<span>To stop a daemon from running in foreground mode, "Ctrl+C" must be hit. To see more available startup options run "./control" without any argument.</span><br />
@@ -78,30 +83,30 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>pb@titania:~/svn/utils/perldaemon/trunk$ ./control keys
-<i><font color="silver"># Path to the logfile</font></i>
-daemon.logfile=./log/perldaemon.log
+<pre><font color="#ff0000">pb@titania</font><font color="#F3E651">:~</font><font color="#ff0000">/svn/utils/perldaemon/trunk$ </font><font color="#F3E651">.</font><font color="#ff0000">/control keys</font>
+<i><font color="#ababab"># Path to the logfile</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">logfile</font><font color="#F3E651">=.</font><font color="#ff0000">/log/perldaemon</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
-<i><font color="silver"># The amount of seconds until the next event look takes place</font></i>
-daemon.loopinterval=<font color="#000000">1</font>
+<i><font color="#ababab"># The amount of seconds until the next event look takes place</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font><font color="#F3E651">=</font><font color="#bb00ff">1</font>
-<i><font color="silver"># Path to the modules dir</font></i>
-daemon.modules.dir=./lib/PerlDaemonModules
+<i><font color="#ababab"># Path to the modules dir</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">modules</font><font color="#F3E651">.</font><font color="#ff0000">dir</font><font color="#F3E651">=.</font><font color="#ff0000">/lib/PerlDaemonModules</font>
-<i><font color="silver"># Specifies either the daemon should run in daemon or foreground mode</font></i>
-daemon.daemonize=yes
+<i><font color="#ababab"># Specifies either the daemon should run in daemon or foreground mode</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">daemonize</font><font color="#F3E651">=</font><font color="#ff0000">yes</font>
-<i><font color="silver"># Path to the pidfile</font></i>
-daemon.pidfile=./run/perldaemon.pid
+<i><font color="#ababab"># Path to the pidfile</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">pidfile</font><font color="#F3E651">=.</font><font color="#ff0000">/run/perldaemon</font><font color="#F3E651">.</font><font color="#ff0000">pid</font>
-<i><font color="silver"># Each module should run every run interval seconds</font></i>
-daemon.modules.runinterval=<font color="#000000">3</font>
+<i><font color="#ababab"># Each module should run every run interval seconds</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">modules</font><font color="#F3E651">.</font><font color="#ff0000">runinterval</font><font color="#F3E651">=</font><font color="#bb00ff">3</font>
-<i><font color="silver"># Path to the alive file (is touched every loop interval seconds, usable for monitoring)</font></i>
-daemon.alivefile=./run/perldaemon.alive
+<i><font color="#ababab"># Path to the alive file (is touched every loop interval seconds, usable for monitoring)</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">alivefile</font><font color="#F3E651">=.</font><font color="#ff0000">/run/perldaemon</font><font color="#F3E651">.</font><font color="#ff0000">alive</font>
-<i><font color="silver"># Specifies the working directory</font></i>
-daemon.wd=./
+<i><font color="#ababab"># Specifies the working directory</font></i>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">wd</font><font color="#F3E651">=./</font>
</pre>
<br />
<h2 style='display: inline' id='example-'>Example </h2><br />
@@ -112,17 +117,17 @@ daemon.wd=./
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ ./control keys | grep daemon.loopinterval
-daemon.loopinterval=<font color="#000000">1</font>
-$ ./control keys daemon.loopinterval=<font color="#000000">10</font> | grep daemon.loopinterval
-daemon.loopinterval=<font color="#000000">10</font>
-$ ./control start daemon.loopinterval=<font color="#000000">10</font>; sleep <font color="#000000">10</font>; tail -n <font color="#000000">2</font> log/perldaemon.log
-Starting daemon now...
-Mon Jun <font color="#000000">13</font> <font color="#000000">11</font>:<font color="#000000">29</font>:<font color="#000000">27</font> <font color="#000000">2011</font> (PID <font color="#000000">2838</font>): Triggering PerlDaemonModules::ExampleModule
-(last triggered before <font color="#000000">10</font>.002106s; carry: <font color="#000000">7</font>.002106s; wanted interval: 3s)
-Mon Jun <font color="#000000">13</font> <font color="#000000">11</font>:<font color="#000000">29</font>:<font color="#000000">27</font> <font color="#000000">2011</font> (PID <font color="#000000">2838</font>): ExampleModule Test <font color="#000000">2</font>
-$ ./control stop
-Stopping daemon now...
+<pre><font color="#ff0000">$ </font><font color="#F3E651">.</font><font color="#ff0000">/control keys </font><font color="#F3E651">|</font><font color="#ff0000"> grep daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font><font color="#F3E651">=</font><font color="#bb00ff">1</font>
+<font color="#ff0000">$ </font><font color="#F3E651">.</font><font color="#ff0000">/control keys daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font><font color="#F3E651">=</font><font color="#bb00ff">10</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font>
+<font color="#ff0000">daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font><font color="#F3E651">=</font><font color="#bb00ff">10</font>
+<font color="#ff0000">$ </font><font color="#F3E651">.</font><font color="#ff0000">/control start daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font><font color="#F3E651">=</font><font color="#bb00ff">10</font><font color="#F3E651">;</font><font color="#ff0000"> sleep </font><font color="#bb00ff">10</font><font color="#F3E651">;</font><font color="#ff0000"> tail -n </font><font color="#bb00ff">2</font><font color="#ff0000"> log/perldaemon</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
+<font color="#ff0000">Starting daemon now</font><font color="#F3E651">...</font>
+<font color="#ff0000">Mon Jun </font><font color="#bb00ff">13</font><font color="#ff0000"> </font><font color="#bb00ff">11</font><font color="#F3E651">:</font><font color="#bb00ff">29</font><font color="#F3E651">:</font><font color="#bb00ff">27</font><font color="#ff0000"> </font><font color="#bb00ff">2011</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">PID </font><font color="#bb00ff">2838</font><font color="#F3E651">):</font><font color="#ff0000"> Triggering PerlDaemonModules</font><font color="#F3E651">::</font><font color="#ff0000">ExampleModule </font>
+<font color="#F3E651">(</font><font color="#ff0000">last triggered before </font><font color="#bb00ff">10</font><font color="#F3E651">.</font><font color="#ff0000">002106s</font><font color="#F3E651">;</font><font color="#ff0000"> carry</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">7</font><font color="#F3E651">.</font><font color="#ff0000">002106s</font><font color="#F3E651">;</font><font color="#ff0000"> wanted interval</font><font color="#F3E651">:</font><font color="#ff0000"> 3s</font><font color="#F3E651">)</font>
+<font color="#ff0000">Mon Jun </font><font color="#bb00ff">13</font><font color="#ff0000"> </font><font color="#bb00ff">11</font><font color="#F3E651">:</font><font color="#bb00ff">29</font><font color="#F3E651">:</font><font color="#bb00ff">27</font><font color="#ff0000"> </font><font color="#bb00ff">2011</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">PID </font><font color="#bb00ff">2838</font><font color="#F3E651">):</font><font color="#ff0000"> ExampleModule Test </font><font color="#bb00ff">2</font>
+<font color="#ff0000">$ </font><font color="#F3E651">.</font><font color="#ff0000">/control stop</font>
+<font color="#ff0000">Stopping daemon now</font><font color="#F3E651">...</font>
</pre>
<br />
<span>If you want to change that property forever, either edit perldaemon.conf or do this:</span><br />
@@ -131,7 +136,7 @@ Stopping daemon now...
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ ./control keys daemon.loopinterval=<font color="#000000">10</font> &gt; new.conf; mv new.conf conf/perldaemon.conf
+<pre><font color="#ff0000">$ </font><font color="#F3E651">.</font><font color="#ff0000">/control keys daemon</font><font color="#F3E651">.</font><font color="#ff0000">loopinterval</font><font color="#F3E651">=</font><font color="#bb00ff">10</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> new</font><font color="#F3E651">.</font><font color="#ff0000">conf</font><font color="#F3E651">;</font><font color="#ff0000"> mv new</font><font color="#F3E651">.</font><font color="#ff0000">conf conf/perldaemon</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
</pre>
<br />
<h2 style='display: inline' id='hires-event-loop'>HiRes event loop</h2><br />
@@ -148,35 +153,35 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> PerlDaemonModules::ExampleModule;
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> PerlDaemonModules</font><font color="#F3E651">::</font><font color="#ff0000">ExampleModule</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">use</font></u></b> strict;
-<b><u><font color="#000000">use</font></u></b> warnings;
+<b><font color="#ffffff">use</font></b><font color="#ff0000"> strict</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">use</font></b><font color="#ff0000"> warnings</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">sub</font></u></b> new ($$$) {
- <b><u><font color="#000000">my</font></u></b> ($class, $conf) = @_;
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">new</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$$$</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$class</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$conf</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">@_</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">my</font></u></b> $self = <b><u><font color="#000000">bless</font></u></b> { conf =&gt; $conf }, $class;
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$self</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">bless</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> conf </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$conf</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$class</font><font color="#F3E651">;</font>
- <i><font color="silver"># Store some private module stuff</font></i>
- $self-&gt;{counter} = <font color="#000000">0</font>;
+<font color="#ff0000"> </font><i><font color="#ababab"># Store some private module stuff</font></i>
+<font color="#ff0000"> </font><font color="#ff0000">$self</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">counter</font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">return</font></u></b> $self;
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#ff0000">$self</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-<i><font color="silver"># Runs periodically in a loop (set interval in perldaemon.conf)</font></i>
-<b><u><font color="#000000">sub</font></u></b> <b><u><font color="#000000">do</font></u></b> ($) {
- <b><u><font color="#000000">my</font></u></b> $self = <b><u><font color="#000000">shift</font></u></b>;
- <b><u><font color="#000000">my</font></u></b> $conf = $self-&gt;{conf};
- <b><u><font color="#000000">my</font></u></b> $logger = $conf-&gt;{logger};
+<i><font color="#ababab"># Runs periodically in a loop (set interval in perldaemon.conf)</font></i>
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$self</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$conf</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$self</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">conf</font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$logger</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$conf</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">logger</font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- <i><font color="silver"># Calculate some private module stuff</font></i>
- <b><u><font color="#000000">my</font></u></b> $count = ++$self-&gt;{counter};
+<font color="#ff0000"> </font><i><font color="#ababab"># Calculate some private module stuff</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$count</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">++</font><font color="#ff0000">$self</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">counter</font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- $logger-&gt;logmsg(<font color="#808080">"ExampleModule Test $count"</font>);
-}
+<font color="#ff0000"> </font><font color="#ff0000">$logger</font><font color="#F3E651">-&gt;</font><font color="#7bc710">logmsg</font><font color="#F3E651">(</font><font color="#bb00ff">"ExampleModule Test $count"</font><font color="#F3E651">);</font>
+<font color="#F3E651">}</font>
-<font color="#000000">1</font>;
+<font color="#bb00ff">1</font><font color="#F3E651">;</font>
</pre>
<br />
<h3 style='display: inline' id='your-own-module'>Your own module</h3><br />
@@ -187,11 +192,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre> cd ./lib/PerlDaemonModules/
- cp ExampleModule.pm YourModule.pm
- vi YourModule.pm
- cd -
- ./bin/perldaemon restart (or shortcurt ./control restart)
+<pre><font color="#ff0000"> cd </font><font color="#F3E651">.</font><font color="#ff0000">/lib/PerlDaemonModules</font><font color="#F3E651">/</font>
+<font color="#ff0000"> cp ExampleModule</font><font color="#F3E651">.</font><font color="#ff0000">pm YourModule</font><font color="#F3E651">.</font><font color="#ff0000">pm</font>
+<font color="#ff0000"> vi YourModule</font><font color="#F3E651">.</font><font color="#ff0000">pm</font>
+<font color="#ff0000"> cd -</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/bin/perldaemon restart </font><font color="#F3E651">(</font><font color="#ff0000">or shortcurt </font><font color="#F3E651">.</font><font color="#ff0000">/control restart</font><font color="#F3E651">)</font>
</pre>
<br />
<span>Now watch <span class='inlinecode'>./log/perldaemon.log</span> closely. It is a good practice to test your modules in &#39;foreground mode&#39; (see above how to do that).</span><br />
@@ -215,11 +220,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html b/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html
index 2e6e75fd..5bbedc7a 100644
--- a/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html
+++ b/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>The fibonacci.pl.raku.c Polyglot</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.gmi">Gemini</a>
</p>
@@ -27,47 +32,47 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#include &lt;stdio.h&gt;</font></i>
+<pre><i><font color="#ababab">#include &lt;stdio.h&gt;</font></i>
-<i><font color="silver">#define $arg function_argument</font></i>
-<i><font color="silver">#define my int</font></i>
-<i><font color="silver">#define sub int</font></i>
-<i><font color="silver">#define BEGIN int main(void)</font></i>
+<i><font color="#ababab">#define $arg function_argument</font></i>
+<i><font color="#ababab">#define my int</font></i>
+<i><font color="#ababab">#define sub int</font></i>
+<i><font color="#ababab">#define BEGIN int main(void)</font></i>
-<b><u><font color="#000000">my</font></u></b> $arg;
+<b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$arg</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">sub</font></u></b> hello() {
- <b><u><font color="#000000">printf</font></u></b>(<font color="#808080">"Hello, welcome to the Fibonacci Numbers!\n"</font>);
- <b><u><font color="#000000">printf</font></u></b>(<font color="#808080">"This program is all, valid C and C++ and Perl and Raku code!\n"</font>);
- <b><u><font color="#000000">printf</font></u></b>(<font color="#808080">"It calculates all fibonacci numbers from 0 to 9!\n\n"</font>);
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">0</font>;
-}
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">hello</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#F3E651">(</font><font color="#bb00ff">"Hello, welcome to the Fibonacci Numbers!\n"</font><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#F3E651">(</font><font color="#bb00ff">"This program is all, valid C and C++ and Perl and Raku code!\n"</font><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#F3E651">(</font><font color="#bb00ff">"It calculates all fibonacci numbers from 0 to 9!\n\n"</font><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">sub</font></u></b> fibonacci() {
- <b><u><font color="#000000">my</font></u></b> $n = $arg;
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">fibonacci</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$n</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$arg</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">if</font></u></b> ($n &lt; <font color="#000000">2</font>) {
- <b><u><font color="#000000">return</font></u></b> $n;
- }
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$n</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#ff0000">$n</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
- $arg = $n - <font color="#000000">1</font>;
- <b><u><font color="#000000">my</font></u></b> $fib1 = fibonacci();
- $arg = $n - <font color="#000000">2</font>;
- <b><u><font color="#000000">my</font></u></b> $fib2 = fibonacci();
+<font color="#ff0000"> </font><font color="#ff0000">$arg</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$n</font><font color="#ff0000"> </font><font color="#F3E651">-</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$fib1</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">fibonacci</font><font color="#F3E651">();</font>
+<font color="#ff0000"> </font><font color="#ff0000">$arg</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$n</font><font color="#ff0000"> </font><font color="#F3E651">-</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$fib2</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">fibonacci</font><font color="#F3E651">();</font>
- <b><u><font color="#000000">return</font></u></b> $fib1 + $fib2;
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#ff0000">$fib1</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#ff0000">$fib2</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-BEGIN {
- hello();
- <b><u><font color="#000000">my</font></u></b> $i = <font color="#000000">0</font>;
+<font color="#ff0000">BEGIN </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#7bc710">hello</font><font color="#F3E651">();</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$i</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">while</font></u></b> ($i &lt;= <font color="#000000">10</font>) {
- $arg = $i;
- <b><u><font color="#000000">printf</font></u></b>(<font color="#808080">"fib(%d) = %d\n"</font>, $i, fibonacci());
- $i++;
- }
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$i</font><font color="#ff0000"> </font><font color="#F3E651">&lt;=</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">$arg</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$i</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#F3E651">(</font><font color="#bb00ff">"fib(%d) = %d\n"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$i</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#7bc710">fibonacci</font><font color="#F3E651">());</font>
+<font color="#ff0000"> </font><font color="#ff0000">$i</font><font color="#F3E651">++;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>You can find the full source code at GitHub:</span><br />
@@ -80,41 +85,41 @@ BEGIN {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% gcc fibonacci.pl.raku.c -o fibonacci
-% ./fibonacci
-Hello, welcome to the Fibonacci Numbers!
-This program is all, valid C and C++ and Perl and Raku code!
-It calculates all fibonacci numbers from <font color="#000000">0</font> to <font color="#000000">9</font>!
+<pre><font color="#F3E651">%</font><font color="#ff0000"> gcc fibonacci</font><font color="#F3E651">.</font><font color="#ff0000">pl</font><font color="#F3E651">.</font><font color="#ff0000">raku</font><font color="#F3E651">.</font><font color="#ff0000">c -o fibonacci</font>
+<font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/fibonacci</font>
+<font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> welcome to the Fibonacci Numbers</font><font color="#F3E651">!</font>
+<font color="#ff0000">This program is all</font><font color="#F3E651">,</font><font color="#ff0000"> valid C and C</font><font color="#F3E651">++</font><font color="#ff0000"> and Perl and Raku code</font><font color="#F3E651">!</font>
+<font color="#ff0000">It calculates all fibonacci numbers from </font><font color="#bb00ff">0</font><font color="#ff0000"> to </font><font color="#bb00ff">9</font><font color="#F3E651">!</font>
-fib(<font color="#000000">0</font>) = <font color="#000000">0</font>
-fib(<font color="#000000">1</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">2</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">3</font>) = <font color="#000000">2</font>
-fib(<font color="#000000">4</font>) = <font color="#000000">3</font>
-fib(<font color="#000000">5</font>) = <font color="#000000">5</font>
-fib(<font color="#000000">6</font>) = <font color="#000000">8</font>
-fib(<font color="#000000">7</font>) = <font color="#000000">13</font>
-fib(<font color="#000000">8</font>) = <font color="#000000">21</font>
-fib(<font color="#000000">9</font>) = <font color="#000000">34</font>
-fib(<font color="#000000">10</font>) = <font color="#000000">55</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">3</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">4</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">3</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">6</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">8</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">7</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">13</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">8</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">21</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">9</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">34</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">10</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">55</font>
-% g++ fibonacci.pl.raku.c -o fibonacci
-% ./fibonacci
-Hello, welcome to the Fibonacci Numbers!
-This program is all, valid C and C++ and Perl and Raku code!
-It calculates all fibonacci numbers from <font color="#000000">0</font> to <font color="#000000">9</font>!
+<font color="#F3E651">%</font><font color="#ff0000"> g</font><font color="#F3E651">++</font><font color="#ff0000"> fibonacci</font><font color="#F3E651">.</font><font color="#ff0000">pl</font><font color="#F3E651">.</font><font color="#ff0000">raku</font><font color="#F3E651">.</font><font color="#ff0000">c -o fibonacci</font>
+<font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/fibonacci</font>
+<font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> welcome to the Fibonacci Numbers</font><font color="#F3E651">!</font>
+<font color="#ff0000">This program is all</font><font color="#F3E651">,</font><font color="#ff0000"> valid C and C</font><font color="#F3E651">++</font><font color="#ff0000"> and Perl and Raku code</font><font color="#F3E651">!</font>
+<font color="#ff0000">It calculates all fibonacci numbers from </font><font color="#bb00ff">0</font><font color="#ff0000"> to </font><font color="#bb00ff">9</font><font color="#F3E651">!</font>
-fib(<font color="#000000">0</font>) = <font color="#000000">0</font>
-fib(<font color="#000000">1</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">2</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">3</font>) = <font color="#000000">2</font>
-fib(<font color="#000000">4</font>) = <font color="#000000">3</font>
-fib(<font color="#000000">5</font>) = <font color="#000000">5</font>
-fib(<font color="#000000">6</font>) = <font color="#000000">8</font>
-fib(<font color="#000000">7</font>) = <font color="#000000">13</font>
-fib(<font color="#000000">8</font>) = <font color="#000000">21</font>
-fib(<font color="#000000">9</font>) = <font color="#000000">34</font>
-fib(<font color="#000000">10</font>) = <font color="#000000">55</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">3</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">4</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">3</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">6</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">8</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">7</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">13</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">8</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">21</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">9</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">34</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">10</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">55</font>
</pre>
<br />
<h3 style='display: inline' id='let-s-run-it-with-perl-and-raku'>Let&#39;s run it with Perl and Raku</h3><br />
@@ -123,39 +128,39 @@ fib(<font color="#000000">10</font>) = <font color="#000000">55</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% perl fibonacci.pl.raku.c
-Hello, welcome to the Fibonacci Numbers!
-This program is all, valid C and C++ and Perl and Raku code!
-It calculates all fibonacci numbers from <font color="#000000">0</font> to <font color="#000000">9</font>!
+<pre><font color="#F3E651">%</font><font color="#ff0000"> perl fibonacci</font><font color="#F3E651">.</font><font color="#ff0000">pl</font><font color="#F3E651">.</font><font color="#ff0000">raku</font><font color="#F3E651">.</font><font color="#ff0000">c</font>
+<font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> welcome to the Fibonacci Numbers</font><font color="#F3E651">!</font>
+<font color="#ff0000">This program is all</font><font color="#F3E651">,</font><font color="#ff0000"> valid C and C</font><font color="#F3E651">++</font><font color="#ff0000"> and Perl and Raku code</font><font color="#F3E651">!</font>
+<font color="#ff0000">It calculates all fibonacci numbers from </font><font color="#bb00ff">0</font><font color="#ff0000"> to </font><font color="#bb00ff">9</font><font color="#F3E651">!</font>
-fib(<font color="#000000">0</font>) = <font color="#000000">0</font>
-fib(<font color="#000000">1</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">2</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">3</font>) = <font color="#000000">2</font>
-fib(<font color="#000000">4</font>) = <font color="#000000">3</font>
-fib(<font color="#000000">5</font>) = <font color="#000000">5</font>
-fib(<font color="#000000">6</font>) = <font color="#000000">8</font>
-fib(<font color="#000000">7</font>) = <font color="#000000">13</font>
-fib(<font color="#000000">8</font>) = <font color="#000000">21</font>
-fib(<font color="#000000">9</font>) = <font color="#000000">34</font>
-fib(<font color="#000000">10</font>) = <font color="#000000">55</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">3</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">4</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">3</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">6</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">8</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">7</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">13</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">8</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">21</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">9</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">34</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">10</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">55</font>
-% raku fibonacci.pl.raku.c
-Hello, welcome to the Fibonacci Numbers!
-This program is all, valid C and C++ and Perl and Raku code!
-It calculates all fibonacci numbers from <font color="#000000">0</font> to <font color="#000000">9</font>!
+<font color="#F3E651">%</font><font color="#ff0000"> raku fibonacci</font><font color="#F3E651">.</font><font color="#ff0000">pl</font><font color="#F3E651">.</font><font color="#ff0000">raku</font><font color="#F3E651">.</font><font color="#ff0000">c</font>
+<font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> welcome to the Fibonacci Numbers</font><font color="#F3E651">!</font>
+<font color="#ff0000">This program is all</font><font color="#F3E651">,</font><font color="#ff0000"> valid C and C</font><font color="#F3E651">++</font><font color="#ff0000"> and Perl and Raku code</font><font color="#F3E651">!</font>
+<font color="#ff0000">It calculates all fibonacci numbers from </font><font color="#bb00ff">0</font><font color="#ff0000"> to </font><font color="#bb00ff">9</font><font color="#F3E651">!</font>
-fib(<font color="#000000">0</font>) = <font color="#000000">0</font>
-fib(<font color="#000000">1</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">2</font>) = <font color="#000000">1</font>
-fib(<font color="#000000">3</font>) = <font color="#000000">2</font>
-fib(<font color="#000000">4</font>) = <font color="#000000">3</font>
-fib(<font color="#000000">5</font>) = <font color="#000000">5</font>
-fib(<font color="#000000">6</font>) = <font color="#000000">8</font>
-fib(<font color="#000000">7</font>) = <font color="#000000">13</font>
-fib(<font color="#000000">8</font>) = <font color="#000000">21</font>
-fib(<font color="#000000">9</font>) = <font color="#000000">34</font>
-fib(<font color="#000000">10</font>) = <font color="#000000">55</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">3</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">4</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">3</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">6</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">8</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">7</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">13</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">8</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">21</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">9</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">34</font>
+<font color="#ff0000">fib</font><font color="#F3E651">(</font><font color="#bb00ff">10</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">55</font>
</pre>
<br />
<span>It&#39;s entertaining to play with :-).</span><br />
@@ -164,11 +169,12 @@ fib(<font color="#000000">10</font>) = <font color="#000000">55</font>
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html
index 9d537d43..75b4cb59 100644
--- a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html
+++ b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Run Debian on your phone with Debroid</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.gmi">Gemini</a>
</p>
@@ -56,24 +61,24 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>sudo dnf install debootstrap
-<i><font color="silver"># 5g</font></i>
-dd <b><u><font color="#000000">if</font></u></b>=/dev/zero of=jessie.img bs=$[ <font color="#000000">1024</font> * <font color="#000000">1024</font> ] \
- count=$[ <font color="#000000">1024</font> * <font color="#000000">5</font> ]
+<pre><font color="#ff0000">sudo dnf install debootstrap</font>
+<i><font color="#ababab"># 5g</font></i>
+<font color="#ff0000">dd </font><b><font color="#ffffff">if</font></b><font color="#F3E651">=</font><font color="#ff0000">/dev/zero </font><font color="#ff0000">of</font><font color="#F3E651">=</font><font color="#ff0000">jessie</font><font color="#F3E651">.</font><font color="#ff0000">img </font><font color="#ff0000">bs</font><font color="#F3E651">=</font><font color="#ff0000">$[</font><font color="#ff0000"> </font><font color="#bb00ff">1024</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#bb00ff">1024</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">count</font><font color="#F3E651">=</font><font color="#ff0000">$[</font><font color="#ff0000"> </font><font color="#bb00ff">1024</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#F3E651">]</font>
-<i><font color="silver"># Show used loop devices</font></i>
-sudo losetup -f
-<i><font color="silver"># Store the next free one to $loop</font></i>
-loop=loopN
-sudo losetup /dev/$loop jessie.img
+<i><font color="#ababab"># Show used loop devices</font></i>
+<font color="#ff0000">sudo losetup -f</font>
+<i><font color="#ababab"># Store the next free one to $loop</font></i>
+<font color="#ff0000">loop</font><font color="#F3E651">=</font><font color="#ff0000">loopN</font>
+<font color="#ff0000">sudo losetup /dev</font><font color="#F3E651">/</font><font color="#ff0000">$loop</font><font color="#ff0000"> jessie</font><font color="#F3E651">.</font><font color="#ff0000">img</font>
-mkdir jessie
-sudo mkfs.ext4 /dev/$loop
-sudo mount /dev/$loop jessie
-sudo debootstrap --foreign --variant=minbase \
- --arch armel jessie jessie/ \
- http://http.debian.net/debian
-sudo umount jessie
+<font color="#ff0000">mkdir jessie</font>
+<font color="#ff0000">sudo mkfs</font><font color="#F3E651">.</font><font color="#ff0000">ext4 /dev</font><font color="#F3E651">/</font><font color="#ff0000">$loop</font>
+<font color="#ff0000">sudo mount /dev</font><font color="#F3E651">/</font><font color="#ff0000">$loop</font><font color="#ff0000"> jessie</font>
+<font color="#ff0000">sudo debootstrap --foreign --variant</font><font color="#F3E651">=</font><font color="#ff0000">minbase </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --arch armel jessie jessie</font><font color="#F3E651">/</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font><font color="#ff0000">//http</font><font color="#F3E651">.</font><font color="#ff0000">debian</font><font color="#F3E651">.</font><font color="#ff0000">net/debian</font>
+<font color="#ff0000">sudo umount jessie</font>
</pre>
<br />
<h3 style='display: inline' id='copy-debian-image-to-the-phone'>Copy Debian image to the phone</h3><br />
@@ -84,42 +89,42 @@ sudo umount jessie
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>adb root &amp;&amp; adb wait-for-device &amp;&amp; adb shell
-mkdir -p /storage/sdcard<font color="#000000">1</font>/Linux/jessie
-<b><u><font color="#000000">exit</font></u></b>
+<pre><font color="#ff0000">adb root </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> adb wait-for-device </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> adb shell</font>
+<font color="#ff0000">mkdir -p /storage/sdcard</font><font color="#bb00ff">1</font><font color="#ff0000">/Linux/jessie</font>
+<b><font color="#ffffff">exit</font></b>
-<i><font color="silver"># Sparse image problem, may be too big for copying otherwise</font></i>
-gzip jessie.img
-<i><font color="silver"># Copy over</font></i>
-adb push jessie.img.gz /storage/sdcard<font color="#000000">1</font>/Linux/jessie.img.gz
-adb shell
-cd /storage/sdcard<font color="#000000">1</font>/Linux
-gunzip jessie.img.gz
+<i><font color="#ababab"># Sparse image problem, may be too big for copying otherwise</font></i>
+<font color="#ff0000">gzip jessie</font><font color="#F3E651">.</font><font color="#ff0000">img</font>
+<i><font color="#ababab"># Copy over</font></i>
+<font color="#ff0000">adb push jessie</font><font color="#F3E651">.</font><font color="#ff0000">img</font><font color="#F3E651">.</font><font color="#ff0000">gz /storage/sdcard</font><font color="#bb00ff">1</font><font color="#ff0000">/Linux/jessie</font><font color="#F3E651">.</font><font color="#ff0000">img</font><font color="#F3E651">.</font><font color="#ff0000">gz</font>
+<font color="#ff0000">adb shell</font>
+<font color="#ff0000">cd /storage/sdcard</font><font color="#bb00ff">1</font><font color="#ff0000">/Linux</font>
+<font color="#ff0000">gunzip jessie</font><font color="#F3E651">.</font><font color="#ff0000">img</font><font color="#F3E651">.</font><font color="#ff0000">gz</font>
-<i><font color="silver"># Show used loop devices</font></i>
-losetup -f
-<i><font color="silver"># Store the next free one to $loop</font></i>
-loop=loopN
+<i><font color="#ababab"># Show used loop devices</font></i>
+<font color="#ff0000">losetup -f</font>
+<i><font color="#ababab"># Store the next free one to $loop</font></i>
+<font color="#ff0000">loop</font><font color="#F3E651">=</font><font color="#ff0000">loopN</font>
-<i><font color="silver"># Use the next free one (replace the loop number)</font></i>
-losetup /dev/block/$loop $(pwd)/jessie.img
-mount -t ext4 /dev/block/$loop $(pwd)/jessie
+<i><font color="#ababab"># Use the next free one (replace the loop number)</font></i>
+<font color="#ff0000">losetup /dev/block</font><font color="#F3E651">/</font><font color="#ff0000">$loop</font><font color="#ff0000"> </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie</font><font color="#F3E651">.</font><font color="#ff0000">img</font>
+<font color="#ff0000">mount -t ext4 /dev/block</font><font color="#F3E651">/</font><font color="#ff0000">$loop</font><font color="#ff0000"> </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie</font>
-<i><font color="silver"># Bind-Mound proc, dev, sys`</font></i>
-busybox mount --bind /proc $(pwd)/jessie/proc
-busybox mount --bind /dev $(pwd)/jessie/dev
-busybox mount --bind /dev/pts $(pwd)/jessie/dev/pts
-busybox mount --bind /sys $(pwd)/jessie/sys
+<i><font color="#ababab"># Bind-Mound proc, dev, sys`</font></i>
+<font color="#ff0000">busybox mount --bind /proc </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/proc</font>
+<font color="#ff0000">busybox mount --bind /dev </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/dev</font>
+<font color="#ff0000">busybox mount --bind /dev/pts </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/dev/pts</font>
+<font color="#ff0000">busybox mount --bind /sys </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/sys</font>
-<i><font color="silver"># Bind-Mound the rest of Android</font></i>
-mkdir -p $(pwd)/jessie/storage/sdcard{<font color="#000000">0</font>,<font color="#000000">1</font>}
-busybox mount --bind /storage/emulated \
- $(pwd)/jessie/storage/sdcard<font color="#000000">0</font>
-busybox mount --bind /storage/sdcard<font color="#000000">1</font> \
- $(pwd)/jessie/storage/sdcard<font color="#000000">1</font>
+<i><font color="#ababab"># Bind-Mound the rest of Android</font></i>
+<font color="#ff0000">mkdir -p </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/storage/sdcard{</font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#bb00ff">1</font><font color="#ff0000">}</font>
+<font color="#ff0000">busybox mount --bind /storage/emulated </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/storage/sdcard</font><font color="#bb00ff">0</font>
+<font color="#ff0000">busybox mount --bind /storage/sdcard</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie/storage/sdcard</font><font color="#bb00ff">1</font>
-<i><font color="silver"># Check mounts</font></i>
-mount | grep jessie
+<i><font color="#ababab"># Check mounts</font></i>
+<font color="#ff0000">mount </font><font color="#F3E651">|</font><font color="#ff0000"> grep jessie</font>
</pre>
<br />
<h3 style='display: inline' id='second-debootstrap-stage'>Second debootstrap stage</h3><br />
@@ -130,11 +135,11 @@ mount | grep jessie
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>chroot $(pwd)/jessie /bin/bash -l
-<b><u><font color="#000000">export</font></u></b> PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
-/debootstrap/debootstrap --second-stage
-<b><u><font color="#000000">exit</font></u></b> <i><font color="silver"># Leave chroot</font></i>
-<b><u><font color="#000000">exit</font></u></b> <i><font color="silver"># Leave adb shell</font></i>
+<pre><font color="#ff0000">chroot </font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/jessie /bin/bash -l</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">PATH</font><font color="#F3E651">=</font><font color="#ff0000">/bin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/bin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/bin</font><font color="#F3E651">:</font><font color="#ff0000">/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/sbin</font>
+<font color="#ff0000">/debootstrap/debootstrap --second-stage</font>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><i><font color="#ababab"># Leave chroot</font></i>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><i><font color="#ababab"># Leave adb shell</font></i>
</pre>
<br />
<h3 style='display: inline' id='setup-of-various-scripts'>Setup of various scripts</h3><br />
@@ -145,36 +150,36 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Install script jessie.sh</font></i>
-adb push storage/sdcard<font color="#000000">1</font>/Linux/jessie.sh /storage/sdcard/Linux/jessie.sh
-adb shell
-cd /storage/sdcard<font color="#000000">1</font>/Linux
-sh jessie.sh enter
+<pre><i><font color="#ababab"># Install script jessie.sh</font></i>
+<font color="#ff0000">adb push storage/sdcard</font><font color="#bb00ff">1</font><font color="#ff0000">/Linux/jessie</font><font color="#F3E651">.</font><font color="#ff0000">sh /storage/sdcard/Linux/jessie</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">adb shell</font>
+<font color="#ff0000">cd /storage/sdcard</font><font color="#bb00ff">1</font><font color="#ff0000">/Linux</font>
+<font color="#ff0000">sh jessie</font><font color="#F3E651">.</font><font color="#ff0000">sh enter</font>
-<i><font color="silver"># Bashrc</font></i>
-cat &lt;&lt;END &gt;~/.bashrc
-<b><u><font color="#000000">export</font></u></b> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
-<b><u><font color="#000000">export</font></u></b> EDITOR=vim
-hostname $(cat /etc/hostname)
-END
+<i><font color="#ababab"># Bashrc</font></i>
+<font color="#ff0000">cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;~/.</font><font color="#ff0000">bashrc</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">PATH</font><font color="#F3E651">=</font><font color="#ff0000">/usr/local/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/bin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/bin</font><font color="#F3E651">:</font><font color="#ff0000">/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/bin</font><font color="#F3E651">:</font><font color="#ff0000">$PATH</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">EDITOR</font><font color="#F3E651">=</font><font color="#ff0000">vim</font>
+<font color="#ff0000">hostname </font><font color="#ff0000">$(</font><font color="#ff0000">cat /etc/hostname</font><font color="#F3E651">)</font>
+<font color="#ff0000">END</font>
-<i><font color="silver"># Fixing an error message while loading the profile</font></i>
-sed -i s<i><font color="silver">#id#/usr/bin/id# /etc/profile</font></i>
+<i><font color="#ababab"># Fixing an error message while loading the profile</font></i>
+<font color="#ff0000">sed -i s</font><i><font color="#ababab">#id#/usr/bin/id# /etc/profile</font></i>
-<i><font color="silver"># Setting the hostname</font></i>
-echo phobos &gt; /etc/hostname
-echo <font color="#000000">127.0</font>.<font color="#000000">0.1</font> phobos &gt; /etc/hosts
-hostname phobos
+<i><font color="#ababab"># Setting the hostname</font></i>
+<font color="#ff0000">echo phobos </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /etc/hostname</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#ff0000"> phobos </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /etc/hosts</font>
+<font color="#ff0000">hostname phobos</font>
-<i><font color="silver"># Apt-sources</font></i>
-cat &lt;&lt;END &gt; sources.list
-deb http://ftp.uk.debian.org/debian/ jessie main contrib non-free
-deb-src http://ftp.uk.debian.org/debian/ jessie main contrib non-free
-END
-apt-get update
-apt-get upgrade
-apt-get dist-upgrade
-<b><u><font color="#000000">exit</font></u></b> <i><font color="silver"># Exit chroot</font></i>
+<i><font color="#ababab"># Apt-sources</font></i>
+<font color="#ff0000">cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> sources</font><font color="#F3E651">.</font><font color="#ff0000">list</font>
+<font color="#ff0000">deb http</font><font color="#F3E651">:</font><font color="#ff0000">//ftp</font><font color="#F3E651">.</font><font color="#ff0000">uk</font><font color="#F3E651">.</font><font color="#ff0000">debian</font><font color="#F3E651">.</font><font color="#ff0000">org/debian</font><font color="#F3E651">/</font><font color="#ff0000"> jessie main contrib non-free</font>
+<font color="#ff0000">deb-src http</font><font color="#F3E651">:</font><font color="#ff0000">//ftp</font><font color="#F3E651">.</font><font color="#ff0000">uk</font><font color="#F3E651">.</font><font color="#ff0000">debian</font><font color="#F3E651">.</font><font color="#ff0000">org/debian</font><font color="#F3E651">/</font><font color="#ff0000"> jessie main contrib non-free</font>
+<font color="#ff0000">END</font>
+<font color="#ff0000">apt-get update</font>
+<font color="#ff0000">apt-get upgrade</font>
+<font color="#ff0000">apt-get dist-upgrade</font>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><i><font color="#ababab"># Exit chroot</font></i>
</pre>
<br />
<h3 style='display: inline' id='entering-debroid-and-enable-a-service'>Entering Debroid and enable a service</h3><br />
@@ -185,19 +190,19 @@ apt-get dist-upgrade
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>sh jessie.sh enter
+<pre><font color="#ff0000">sh jessie</font><font color="#F3E651">.</font><font color="#ff0000">sh enter</font>
-<i><font color="silver"># Setup example serice uptimed</font></i>
-apt-get install uptimed
-cat &lt;&lt;END &gt; /etc/rc.debroid
-<b><u><font color="#000000">export</font></u></b> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
-service uptimed status &amp;&gt;/dev/null || service uptimed start
-<b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
-END
+<i><font color="#ababab"># Setup example serice uptimed</font></i>
+<font color="#ff0000">apt-get install uptimed</font>
+<font color="#ff0000">cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /etc/rc</font><font color="#F3E651">.</font><font color="#ff0000">debroid</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">PATH</font><font color="#F3E651">=</font><font color="#ff0000">/usr/local/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/bin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/usr/bin</font><font color="#F3E651">:</font><font color="#ff0000">/sbin</font><font color="#F3E651">:</font><font color="#ff0000">/bin</font><font color="#F3E651">:</font><font color="#ff0000">$PATH</font>
+<font color="#ff0000">service uptimed status </font><font color="#F3E651">&amp;&gt;</font><font color="#ff0000">/dev/null </font><font color="#F3E651">||</font><font color="#ff0000"> service uptimed start</font>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">END</font>
-chmod <font color="#000000">0755</font> /etc/rc.debroid
-<b><u><font color="#000000">exit</font></u></b> <i><font color="silver"># Exit chroot</font></i>
-<b><u><font color="#000000">exit</font></u></b> <i><font color="silver"># Exit adb shell</font></i>
+<font color="#ff0000">chmod </font><font color="#bb00ff">0755</font><font color="#ff0000"> /etc/rc</font><font color="#F3E651">.</font><font color="#ff0000">debroid</font>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><i><font color="#ababab"># Exit chroot</font></i>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><i><font color="#ababab"># Exit adb shell</font></i>
</pre>
<br />
<h3 style='display: inline' id='include-to-android-startup'>Include to Android startup:</h3><br />
@@ -208,10 +213,10 @@ chmod <font color="#000000">0755</font> /etc/rc.debroid
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>adb push data/local/userinit.sh /data/local/userinit.sh
-adb shell
-chmod +x /data/local/userinit.sh
-<b><u><font color="#000000">exit</font></u></b>
+<pre><font color="#ff0000">adb push data/local/userinit</font><font color="#F3E651">.</font><font color="#ff0000">sh /data/local/userinit</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">adb shell</font>
+<font color="#ff0000">chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /data/local/userinit</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<b><font color="#ffffff">exit</font></b>
</pre>
<br />
<span>Reboot &amp; test! Enjoy!</span><br />
@@ -220,11 +225,12 @@ chmod +x /data/local/userinit.sh
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2016-04-03-offsite-backup-with-zfs.html b/gemfeed/2016-04-03-offsite-backup-with-zfs.html
index 39f6caf9..ef42d4a1 100644
--- a/gemfeed/2016-04-03-offsite-backup-with-zfs.html
+++ b/gemfeed/2016-04-03-offsite-backup-with-zfs.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Offsite backup with ZFS</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2016-04-03-offsite-backup-with-zfs.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs.gmi">Gemini</a>
</p>
@@ -57,11 +62,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
index e26c354d..3a16acdd 100644
--- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
+++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Jails and ZFS with Puppet on FreeBSD</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi">Gemini</a>
</p>
@@ -429,11 +434,12 @@ Notice: Finished catalog run in 206.09 seconds
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html b/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html
index 3aa08168..edd35e4e 100644
--- a/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html
+++ b/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Offsite backup with ZFS (Part 2)</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.gmi">Gemini</a>
</p>
@@ -43,11 +48,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html
index 3b428a68..c20fe9d6 100644
--- a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html
+++ b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Spinning up my own authoritative DNS servers</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.gmi">Gemini</a>
</p>
@@ -261,11 +266,12 @@ apply Service "dig6" {
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html b/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html
index bedf6692..6071ea51 100644
--- a/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html
+++ b/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Object oriented programming with ANSI C</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c.gmi">Gemini</a>
</p>
@@ -34,37 +39,37 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">#include</font></u></b> <font color="#808080">&lt;stdio.h&gt;</font>
+<pre><font color="#ababab">#include</font><font color="#ff0000"> </font><font color="#bb00ff">&lt;stdio.h&gt;</font>
-<b><u><font color="#000000">typedef</font></u></b> <b><u><font color="#000000">struct</font></u></b> {
- <b><font color="#000000">double</font></b> (*calculate)(<b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b>, <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b>);
- <b><font color="#000000">char</font></b> *name;
-} something_s;
+<b><font color="#ffffff">typedef</font></b><font color="#ff0000"> </font><b><font color="#ffffff">struct</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> </font><font color="#F3E651">(*</font><font color="#ff0000">calculate</font><font color="#F3E651">)(</font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">char</font></b><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">name</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font><font color="#ff0000"> something_s</font><font color="#F3E651">;</font>
-<b><font color="#000000">double</font></b> multiplication(<b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> a, <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> b) {
- <b><u><font color="#000000">return</font></u></b> a * b;
-}
+<b><font color="#F35E1E">double</font></b><font color="#ff0000"> </font><font color="#7bc710">multiplication</font><font color="#F3E651">(</font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> b</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> a </font><font color="#F3E651">*</font><font color="#ff0000"> b</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-<b><font color="#000000">double</font></b> division(<b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> a, <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> b) {
- <b><u><font color="#000000">return</font></u></b> a / b;
-}
+<b><font color="#F35E1E">double</font></b><font color="#ff0000"> </font><font color="#7bc710">division</font><font color="#F3E651">(</font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> b</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> a </font><font color="#F3E651">/</font><font color="#ff0000"> b</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-<b><font color="#000000">int</font></b> main(<b><font color="#000000">void</font></b>) {
- something_s mult = (something_s) {
- .calculate = multiplication,
- .name = <font color="#808080">"Multiplication"</font>
- };
+<b><font color="#F35E1E">int</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">(</font><b><font color="#F35E1E">void</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">something_s</font><font color="#ff0000"> mult </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">something_s</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">calculate </font><font color="#F3E651">=</font><font color="#ff0000"> multiplication</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">name </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"Multiplication"</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- something_s div = (something_s) {
- .calculate = division,
- .name = <font color="#808080">"Division"</font>
- };
+<font color="#ff0000"> </font><font color="#ff0000">something_s</font><font color="#ff0000"> div </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">something_s</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">calculate </font><font color="#F3E651">=</font><font color="#ff0000"> division</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">name </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"Division"</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">const</font></u></b> <b><font color="#000000">double</font></b> a = <font color="#000000">3</font>, b = <font color="#000000">2</font>;
+<font color="#ff0000"> </font><b><font color="#ffffff">const</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">double</font></b><font color="#ff0000"> a </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#F3E651">,</font><font color="#ff0000"> b </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">;</font>
- printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">"</font>, mult.name, a, b, mult.calculate(a,b));
- printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">"</font>, div.name, a, b, div.calculate(a,b));
-}
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) =&gt; %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) =&gt; %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>As you can see, you can call the function (pointed by the function pointer) with the same syntax as in C++ or Java:</span><br />
@@ -73,8 +78,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">"</font>, mult.name, a, b, mult.calculate(a,b));
-printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">"</font>, div.name, a, b, div.calculate(a,b));
+<pre><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) =&gt; %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
+<font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) =&gt; %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
</pre>
<br />
<span>However, that&#39;s just syntactic sugar for:</span><br />
@@ -83,8 +88,8 @@ printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">"</font>, mult.name, a, b, (*mult.calculate)(a,b));
-printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">"</font>, div.name, a, b, (*div.calculate)(a,b));
+<pre><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) =&gt; %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> mult</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">(*</font><font color="#ff0000">mult</font><font color="#F3E651">.</font><font color="#ff0000">calculate</font><font color="#F3E651">)(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
+<font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%s(%f, %f) =&gt; %f</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> div</font><font color="#F3E651">.</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">(*</font><font color="#ff0000">div</font><font color="#F3E651">.</font><font color="#ff0000">calculate</font><font color="#F3E651">)(</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
</pre>
<br />
<span>Output:</span><br />
@@ -93,10 +98,10 @@ printf(<font color="#808080">"%s(%f, %f) =&gt; %f</font>\n<font color="#808080">
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>pbuetow ~/git/blog/source [<font color="#000000">38268</font>]% gcc oop-c-example.c -o oop-c-example
-pbuetow ~/git/blog/source [<font color="#000000">38269</font>]% ./oop-c-example
-Multiplication(<font color="#000000">3.000000</font>, <font color="#000000">2.000000</font>) =&gt; <font color="#000000">6.000000</font>
-Division(<font color="#000000">3.000000</font>, <font color="#000000">2.000000</font>) =&gt; <font color="#000000">1.500000</font>
+<pre><font color="#ff0000">pbuetow </font><font color="#F3E651">~</font><font color="#ff0000">/git/blog/source </font><font color="#F3E651">[</font><font color="#bb00ff">38268</font><font color="#F3E651">]%</font><font color="#ff0000"> gcc oop-c-example</font><font color="#F3E651">.</font><font color="#ff0000">c -o oop-c-example</font>
+<font color="#ff0000">pbuetow </font><font color="#F3E651">~</font><font color="#ff0000">/git/blog/source </font><font color="#F3E651">[</font><font color="#bb00ff">38269</font><font color="#F3E651">]%</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">/oop-c-example</font>
+<font color="#ff0000">Multiplication</font><font color="#F3E651">(</font><font color="#bb00ff">3.000000</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2.000000</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">6.000000</font>
+<font color="#ff0000">Division</font><font color="#F3E651">(</font><font color="#bb00ff">3.000000</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2.000000</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">1.500000</font>
</pre>
<br />
<span>Not complicated at all, but nice to know and helps to make the code easier to read!</span><br />
@@ -109,7 +114,7 @@ Division(<font color="#000000">3.000000</font>, <font color="#000000">2.000000</
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>mult.calculate(mult,a,b));
+<pre><font color="#ff0000">mult</font><font color="#F3E651">.</font><font color="#7bc710">calculate</font><font color="#F3E651">(</font><font color="#ff0000">mult</font><font color="#F3E651">,</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000">b</font><font color="#F3E651">));</font>
</pre>
<br />
<h2 style='display: inline' id='real-object-oriented-programming-with-c'>Real object oriented programming with C</h2><br />
@@ -130,11 +135,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html
index c4079734..a6083bb6 100644
--- a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html
+++ b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Realistic load testing with I/O Riot for Linux</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.gmi">Gemini</a>
</p>
@@ -218,11 +223,12 @@ Total time: 1213.00s
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html
index 8c32a7d5..32c2889f 100644
--- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html
+++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>DTail - The distributed log tail program</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi">Gemini</a>
</p>
@@ -144,11 +149,12 @@ dtail –servers serverlist.txt –files ‘/var/log/*.log’ –regex ‘(?i:er
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace.html b/gemfeed/2021-04-24-welcome-to-the-geminispace.html
index 7f60b5db..b610fecc 100644
--- a/gemfeed/2021-04-24-welcome-to-the-geminispace.html
+++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Welcome to the Geminispace</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-04-24-welcome-to-the-geminispace.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi">Gemini</a>
</p>
@@ -117,11 +122,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
index 3a832d5b..2026ef35 100644
--- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
+++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Personal Bash coding style guide</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-05-16-personal-bash-coding-style-guide.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi">Gemini</a>
</p>
@@ -66,7 +71,7 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/bin/bash </font></i>
+<pre><i><font color="#ababab">#!/bin/bash </font></i>
</pre>
<br />
<span>... as the shebang line, but that does not work on all Unix and Unix-like operating systems (e.g., the *BSDs don&#39;t have Bash installed to /bin/bash). Better is:</span><br />
@@ -75,7 +80,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
</pre>
<br />
<h3 style='display: inline' id='two-space-soft-tabs-indentation'>Two space soft-tabs indentation</h3><br />
@@ -96,14 +101,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># All fits on one line</font></i>
-command1 | command2
+<pre><i><font color="#ababab"># All fits on one line</font></i>
+<font color="#ff0000">command1 </font><font color="#F3E651">|</font><font color="#ff0000"> command2</font>
-<i><font color="silver"># Long commands</font></i>
-command1 \
- | command2 \
- | command3 \
- | command4
+<i><font color="#ababab"># Long commands</font></i>
+<font color="#ff0000">command1 </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> command2 </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> command3 </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> command4</font>
</pre>
<br />
<span>I think there is a better way like the following, which is less noisy. The pipe | already indicates the Bash that another command is expected, thus making the explicit line breaks with \ obsolete:</span><br />
@@ -112,11 +117,11 @@ command1 \
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Long commands</font></i>
-command1 |
- command2 |
- command3 |
- command4
+<pre><i><font color="#ababab"># Long commands</font></i>
+<font color="#ff0000">command1 </font><font color="#F3E651">|</font>
+<font color="#ff0000"> command2 </font><font color="#F3E651">|</font>
+<font color="#ff0000"> command3 </font><font color="#F3E651">|</font>
+<font color="#ff0000"> command4</font>
</pre>
<br />
<span class='quote'>Update: It&#39;s 2023 now, and I have changed my mind. I think Google&#39;s way is the better one. It may be a bit more to type, but the leading <span class='inlinecode'>|</span> are a nice eye catcher, so you know immediately what is going on!</span><br />
@@ -129,11 +134,11 @@ command1 |
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>greet () {
- <b><u><font color="#000000">local</font></u></b> -r greeting=<font color="#808080">"${1}"</font>
- <b><u><font color="#000000">local</font></u></b> -r name=<font color="#808080">"${2}"</font>
- echo <font color="#808080">"${greeting} ${name}!"</font>
-}
+<pre><font color="#7bc710">greet ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">greeting</font><font color="#F3E651">=</font><font color="#bb00ff">"${1}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">name</font><font color="#F3E651">=</font><font color="#bb00ff">"${2}"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"${greeting} ${name}!"</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>In this particular example, I agree that you should quote them as you don&#39;t know the input (are there, for example, whitespace characters?). But if you are sure that you are only using simple bare words, then I think that the code looks much cleaner when you do this instead:</span><br />
@@ -142,11 +147,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>say_hello_to_paul () {
- <b><u><font color="#000000">local</font></u></b> -r greeting=Hello
- <b><u><font color="#000000">local</font></u></b> -r name=Paul
- echo <font color="#808080">"$greeting $name!"</font>
-}
+<pre><font color="#7bc710">say_hello_to_paul ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">greeting</font><font color="#F3E651">=</font><font color="#ff0000">Hello</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">name</font><font color="#F3E651">=</font><font color="#ff0000">Paul</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$greeting $name!"</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>You see, I also omitted the curly braces { } around the variables. I only use the curly braces around variables when it makes the code either easier/clearer to read or if it is necessary to use them:</span><br />
@@ -155,9 +160,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">declare</font></u></b> FOO=bar
-<i><font color="silver"># Curly braces around FOO are necessary</font></i>
-echo <font color="#808080">"foo${FOO}baz"</font>
+<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> </font><font color="#ff0000">FOO</font><font color="#F3E651">=</font><font color="#ff0000">bar</font>
+<i><font color="#ababab"># Curly braces around FOO are necessary</font></i>
+<font color="#ff0000">echo </font><font color="#bb00ff">"foo${FOO}baz"</font>
</pre>
<br />
<span>A few more words on always quoting the variables: For the sake of consistency (and for making ShellCheck happy), I am not against quoting everything I encounter. I also think that the larger the Bash script becomes, the more critical it becomes always to quote variables. That&#39;s because it will be more likely that you might not remember that some of the functions don&#39;t work on values with spaces in them, for example. It&#39;s just that I won&#39;t quote everything in every small script I write. </span><br />
@@ -170,13 +175,13 @@ echo <font color="#808080">"foo${FOO}baz"</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Prefer this:</font></i>
-addition=$(( X + Y ))
-substitution=<font color="#808080">"${string/#foo/bar}"</font>
+<pre><i><font color="#ababab"># Prefer this:</font></i>
+<font color="#ff0000">addition</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#F3E651">(</font><font color="#ff0000"> X </font><font color="#F3E651">+</font><font color="#ff0000"> Y </font><font color="#F3E651">))</font>
+<font color="#ff0000">substitution</font><font color="#F3E651">=</font><font color="#bb00ff">"${string/#foo/bar}"</font>
-<i><font color="silver"># Instead of this:</font></i>
-addition=<font color="#808080">"$(expr "</font>${X}<font color="#808080">" + "</font>${Y}<font color="#808080">")"</font>
-substitution=<font color="#808080">"$(echo "</font>${string}<font color="#808080">" | sed -e 's/^foo/bar/')"</font>
+<i><font color="#ababab"># Instead of this:</font></i>
+<font color="#ff0000">addition</font><font color="#F3E651">=</font><font color="#bb00ff">"$(expr "</font><font color="#ff0000">${X}</font><font color="#bb00ff">" + "</font><font color="#ff0000">${Y}</font><font color="#bb00ff">")"</font>
+<font color="#ff0000">substitution</font><font color="#F3E651">=</font><font color="#bb00ff">"$(echo "</font><font color="#ff0000">${string}</font><font color="#bb00ff">" | sed -e 's/^foo/bar/')"</font>
</pre>
<br />
<span>I can&#39;t entirely agree here. The external commands (especially sed) are much more sophisticated and powerful than the built-in Bash versions. Sed can do much more than the Bash can ever do by itself when it comes to text manipulation (the name "sed" stands for streaming editor, after all).</span><br />
@@ -197,20 +202,20 @@ substitution=<font color="#808080">"$(echo "</font>${string}<font color="#808080
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">declare</font></u></b> -r SUGAR_FREE=yes
-<b><u><font color="#000000">declare</font></u></b> -r I_NEED_THE_BUZZ=no
+<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -r </font><font color="#ff0000">SUGAR_FREE</font><font color="#F3E651">=</font><font color="#ff0000">yes</font>
+<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -r </font><font color="#ff0000">I_NEED_THE_BUZZ</font><font color="#F3E651">=</font><font color="#ff0000">no</font>
-buy_soda () {
- <b><u><font color="#000000">local</font></u></b> -r sugar_free=$1
+<font color="#7bc710">buy_soda ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">sugar_free</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
- <b><u><font color="#000000">if</font></u></b> [[ $sugar_free == yes ]]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">'Diet Dr. Pepper'</font>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">'Pepsi Coke'</font>
- <b><u><font color="#000000">fi</font></u></b>
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#ff0000">$sugar_free</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> yes </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Diet Dr. Pepper'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Pepsi Coke'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
-buy_soda $I_NEED_THE_BUZZ
+<font color="#ff0000">buy_soda </font><font color="#ff0000">$I_NEED_THE_BUZZ</font>
</pre>
<br />
<h3 style='display: inline' id='non-evil-alternative-to-variable-assignments-via-eval'>Non-evil alternative to variable assignments via eval</h3><br />
@@ -221,12 +226,12 @@ buy_soda $I_NEED_THE_BUZZ
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># What does this set?</font></i>
-<i><font color="silver"># Did it succeed? In part or whole?</font></i>
-<b><u><font color="#000000">eval</font></u></b> $(set_my_variables)
+<pre><i><font color="#ababab"># What does this set?</font></i>
+<i><font color="#ababab"># Did it succeed? In part or whole?</font></i>
+<b><font color="#ffffff">eval</font></b><font color="#ff0000"> </font><font color="#ff0000">$(set_my_variables)</font>
-<i><font color="silver"># What happens if one of the returned values has a space in it?</font></i>
-variable=<font color="#808080">"$(eval some_function)"</font>
+<i><font color="#ababab"># What happens if one of the returned values has a space in it?</font></i>
+<font color="#ff0000">variable</font><font color="#F3E651">=</font><font color="#bb00ff">"$(eval some_function)"</font>
</pre>
<br />
<span>However, if I want to read variables from another file, I don&#39;t have to use eval here. I only have to source the file:</span><br />
@@ -265,39 +270,39 @@ Hello paul, it is Sat 15 May 19:21:12 BST 2021
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>filter_lines () {
- echo <font color="#808080">'Start filtering lines in a fancy way!'</font> &gt;&amp;<font color="#000000">2</font>
- grep ... | sed ....
-}
+<pre><font color="#7bc710">filter_lines ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Start filtering lines in a fancy way!'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> grep </font><font color="#F3E651">...</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sed </font><font color="#F3E651">....</font>
+<font color="#ff0000">}</font>
-process_lines () {
- echo <font color="#808080">'Start processing line by line!'</font> &gt;&amp;<font color="#000000">2</font>
- <b><u><font color="#000000">while</font></u></b> <b><u><font color="#000000">read</font></u></b> -r line; <b><u><font color="#000000">do</font></u></b>
- ... <b><u><font color="#000000">do</font></u></b> something and produce a result...
- echo <font color="#808080">"$result"</font>
- <b><u><font color="#000000">done</font></u></b>
-}
+<font color="#7bc710">process_lines ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Start processing line by line!'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -r line</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">...</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> something and produce a result</font><font color="#F3E651">...</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$result"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Do some post-processing of the data</font></i>
-postprocess_lines () {
- echo <font color="#808080">'Start removing duplicates!'</font> &gt;&amp;<font color="#000000">2</font>
- sort -u
-}
+<i><font color="#ababab"># Do some post-processing of the data</font></i>
+<font color="#7bc710">postprocess_lines ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Start removing duplicates!'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> sort -u</font>
+<font color="#ff0000">}</font>
-genreate_report () {
- echo <font color="#808080">'My boss wants to have a report!'</font> &gt;&amp;<font color="#000000">2</font>
- tee outfile.txt
- wc -l outfile.txt
-}
+<font color="#7bc710">genreate_report ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'My boss wants to have a report!'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> tee outfile</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000"> wc -l outfile</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000">}</font>
-main () {
- filter_lines |
- process_lines |
- postprocess_lines |
- generate_report
-}
+<font color="#7bc710">main ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> filter_lines </font><font color="#F3E651">|</font>
+<font color="#ff0000"> process_lines </font><font color="#F3E651">|</font>
+<font color="#ff0000"> postprocess_lines </font><font color="#F3E651">|</font>
+<font color="#ff0000"> generate_report</font>
+<font color="#ff0000">}</font>
-main
+<font color="#ff0000">main</font>
</pre>
<br />
<span>The stdout is always passed as a pipe to the next following stage. The stderr is used for info logging.</span><br />
@@ -312,13 +317,13 @@ main
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>some_function () {
- <b><u><font color="#000000">local</font></u></b> -r param_foo=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_baz=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_bay=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
+<pre><font color="#7bc710">some_function ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_foo</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_baz</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_bay</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
- <i><font color="silver"># ...</font></i>
-}
+<font color="#ff0000"> </font><i><font color="#ababab"># ...</font></i>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>Want to add a param_baz? Just do this:</span><br />
@@ -327,14 +332,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>some_function () {
- <b><u><font color="#000000">local</font></u></b> -r param_foo=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_bar=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_baz=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_bay=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
+<pre><font color="#7bc710">some_function ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_foo</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_bar</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_baz</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_bay</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
- <i><font color="silver"># ...</font></i>
-}
+<font color="#ff0000"> </font><i><font color="#ababab"># ...</font></i>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>Want to remove param_foo? Nothing easier than that:</span><br />
@@ -343,13 +348,13 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>some_function () {
- <b><u><font color="#000000">local</font></u></b> -r param_bar=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_baz=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r param_bay=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
-
- <i><font color="silver"># ...</font></i>
-}
+<pre><font color="#7bc710">some_function ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_bar</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_baz</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">param_bay</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><i><font color="#ababab"># ...</font></i>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>As you can see, I didn&#39;t need to change any other assignments within the function. Of course, you would also need to change the function argument lists at every occasion where the function is invoked - you would do that within the same refactoring session.</span><br />
@@ -362,9 +367,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">set</font></u></b> -e
-grep -q foo &lt;&lt;&lt; bar
-echo Jo
+<pre><b><font color="#ffffff">set</font></b><font color="#ff0000"> -e</font>
+<font color="#ff0000">grep -q foo </font><font color="#F3E651">&lt;&lt;&lt;</font><font color="#ff0000"> bar</font>
+<font color="#ff0000">echo Jo</font>
</pre>
<br />
<span>Here &#39;Jo&#39; will never be printed out as the grep didn&#39;t find any match. It&#39;s unrealistic for most scripts to run in paranoid mode purely, so there must be a way to add exceptions. Critical Bash scripts of mine tend to look like this:</span><br />
@@ -373,26 +378,26 @@ echo Jo
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-<b><u><font color="#000000">set</font></u></b> -e
+<b><font color="#ffffff">set</font></b><font color="#ff0000"> -e</font>
-some_function () {
- <i><font color="silver"># .. some critical code</font></i>
- <i><font color="silver"># ...</font></i>
+<font color="#7bc710">some_function ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># .. some critical code</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># ...</font></i>
- <b><u><font color="#000000">set</font></u></b> +e
- <i><font color="silver"># Grep might fail, but that's OK now</font></i>
- grep ....
- <b><u><font color="#000000">local</font></u></b> -i ec=$?
- <b><u><font color="#000000">set</font></u></b> -e
+<font color="#ff0000"> </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#ff0000">e</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Grep might fail, but that's OK now</font></i>
+<font color="#ff0000"> grep </font><font color="#F3E651">....</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">ec</font><font color="#F3E651">=</font><font color="#ff0000">$?</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> -e</font>
- <i><font color="silver"># .. critical code continues ...</font></i>
- <b><u><font color="#000000">if</font></u></b> [[ $ec -ne <font color="#000000">0</font> ]]; <b><u><font color="#000000">then</font></u></b>
- : <i><font color="silver"># ...</font></i>
- <b><u><font color="#000000">fi</font></u></b>
- <i><font color="silver"># ...</font></i>
-}
+<font color="#ff0000"> </font><i><font color="#ababab"># .. critical code continues ...</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#ff0000">$ec</font><font color="#ff0000"> -ne </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000"> </font><i><font color="#ababab"># ...</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><i><font color="#ababab"># ...</font></i>
+<font color="#ff0000">}</font>
</pre>
<br />
<h2 style='display: inline' id='learned'>Learned</h2><br />
@@ -407,10 +412,10 @@ some_function () {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">if</font></u></b> [[ <font color="#808080">"${my_var}"</font> &gt; <font color="#000000">3</font> ]]; <b><u><font color="#000000">then</font></u></b>
- <i><font color="silver"># True for 4, false for 22.</font></i>
- do_something
-<b><u><font color="#000000">fi</font></u></b>
+<pre><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"${my_var}"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><i><font color="#ababab"># True for 4, false for 22.</font></i>
+<font color="#ff0000"> do_something</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>... but it is probably an unintended lexicographical comparison. A correct way would be:</span><br />
@@ -419,9 +424,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">if</font></u></b> (( my_var &gt; <font color="#000000">3</font> )); <b><u><font color="#000000">then</font></u></b>
- do_something
-<b><u><font color="#000000">fi</font></u></b>
+<pre><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">((</font><font color="#ff0000"> my_var </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#F3E651">));</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> do_something</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>or</span><br />
@@ -430,9 +435,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">if</font></u></b> [[ <font color="#808080">"${my_var}"</font> -gt <font color="#000000">3</font> ]]; <b><u><font color="#000000">then</font></u></b>
- do_something
-<b><u><font color="#000000">fi</font></u></b>
+<pre><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"${my_var}"</font><font color="#ff0000"> -gt </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> do_something</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<h3 style='display: inline' id='pipestatus'>PIPESTATUS</h3><br />
@@ -445,10 +450,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tar -cf - ./* | ( cd <font color="#808080">"${dir}"</font> &amp;&amp; tar -xf - )
-<b><u><font color="#000000">if</font></u></b> (( PIPESTATUS[<font color="#000000">0</font>] != <font color="#000000">0</font> || PIPESTATUS[<font color="#000000">1</font>] != <font color="#000000">0</font> )); <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Unable to tar files to ${dir}"</font> &gt;&amp;<font color="#000000">2</font>
-<b><u><font color="#000000">fi</font></u></b>
+<pre><font color="#ff0000">tar -cf - </font><font color="#F3E651">./*</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000"> cd </font><font color="#bb00ff">"${dir}"</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> tar -xf - </font><font color="#F3E651">)</font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">((</font><font color="#ff0000"> PIPESTATUS</font><font color="#F3E651">[</font><font color="#bb00ff">0</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> PIPESTATUS</font><font color="#F3E651">[</font><font color="#bb00ff">1</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">));</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Unable to tar files to ${dir}"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>However, as PIPESTATUS will be overwritten as soon as you do any other command, if you need to act differently on errors based on where it happened in the pipe, you&#39;ll need to assign PIPESTATUS to another variable immediately after running the command (don&#39;t forget that [ is a command and will wipe out PIPESTATUS).</span><br />
@@ -457,14 +462,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tar -cf - ./* | ( cd <font color="#808080">"${DIR}"</font> &amp;&amp; tar -xf - )
-return_codes=( <font color="#808080">"${PIPESTATUS[@]}"</font> )
-<b><u><font color="#000000">if</font></u></b> (( return_codes[<font color="#000000">0</font>] != <font color="#000000">0</font> )); <b><u><font color="#000000">then</font></u></b>
- do_something
-<b><u><font color="#000000">fi</font></u></b>
-<b><u><font color="#000000">if</font></u></b> (( return_codes[<font color="#000000">1</font>] != <font color="#000000">0</font> )); <b><u><font color="#000000">then</font></u></b>
- do_something_else
-<b><u><font color="#000000">fi</font></u></b>
+<pre><font color="#ff0000">tar -cf - </font><font color="#F3E651">./*</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000"> cd </font><font color="#bb00ff">"${DIR}"</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> tar -xf - </font><font color="#F3E651">)</font>
+<font color="#ff0000">return_codes</font><font color="#F3E651">=(</font><font color="#ff0000"> </font><font color="#bb00ff">"${PIPESTATUS[@]}"</font><font color="#ff0000"> </font><font color="#F3E651">)</font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">((</font><font color="#ff0000"> return_codes</font><font color="#F3E651">[</font><font color="#bb00ff">0</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">));</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> do_something</font>
+<b><font color="#ffffff">fi</font></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">((</font><font color="#ff0000"> return_codes</font><font color="#F3E651">[</font><font color="#bb00ff">1</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">));</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> do_something_else</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<h2 style='display: inline' id='use-common-sense-and-be-consistent'>Use common sense and BE CONSISTENT.</h2><br />
@@ -495,11 +500,12 @@ return_codes=( <font color="#808080">"${PIPESTATUS[@]}"</font> )
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
index 926335cd..ec797afe 100644
--- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
+++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gemtexter - One Bash script to rule it all</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi">Gemini</a>
</p>
@@ -114,18 +119,18 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul <b><u><font color="#000000">in</font></u></b> uranus <b><u><font color="#000000">in</font></u></b> gemtexter on 🌱 main
-❯ wc -l gemtexter lib/*
- <font color="#000000">117</font> gemtexter
- <font color="#000000">59</font> lib/assert.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">128</font> lib/atomfeed.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">64</font> lib/gemfeed.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">161</font> lib/generate.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">50</font> lib/git.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">162</font> lib/html.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">30</font> lib/log.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">63</font> lib/md.<b><u><font color="#000000">source</font></u></b>.sh
- <font color="#000000">834</font> total
+<pre><font color="#ff0000">paul </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> uranus </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> gemtexter on 🌱 main</font>
+<font color="#ff0000">❯ wc -l gemtexter lib</font><font color="#F3E651">/*</font>
+<font color="#ff0000"> </font><font color="#bb00ff">117</font><font color="#ff0000"> gemtexter</font>
+<font color="#ff0000"> </font><font color="#bb00ff">59</font><font color="#ff0000"> lib/assert</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">128</font><font color="#ff0000"> lib/atomfeed</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">64</font><font color="#ff0000"> lib/gemfeed</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">161</font><font color="#ff0000"> lib/generate</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">50</font><font color="#ff0000"> lib/git</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">162</font><font color="#ff0000"> lib/html</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">30</font><font color="#ff0000"> lib/log</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">63</font><font color="#ff0000"> lib/md</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><font color="#bb00ff">834</font><font color="#ff0000"> total</font>
</pre>
<br />
<span>This way, the script could grow far beyond 1000 lines of code and still be maintainable. With more features, execution speed may slowly become a problem, though. I already notice that Gemtexter doesn&#39;t produce results instantly but requires few seconds of runtime already. That&#39;s not a problem yet, though. </span><br />
@@ -160,9 +165,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>gemtext=<font color="#808080">'=&gt; http://example.org Description of the link'</font>
-assert::equals <font color="#808080">"$(generate::make_link html "</font>$gemtext<font color="#808080">")"</font> \
- <font color="#808080">'&lt;a class="textlink" href="http://example.org"&gt;Description of the link&lt;/a&gt;&lt;br /&gt;'</font>
+<pre><font color="#ff0000">gemtext</font><font color="#F3E651">=</font><font color="#bb00ff">'=&gt; http://example.org Description of the link'</font>
+<font color="#ff0000">assert</font><font color="#F3E651">::</font><font color="#ff0000">equals </font><font color="#bb00ff">"$(generate::make_link html "</font><font color="#ff0000">$gemtext</font><font color="#bb00ff">")"</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'&lt;a class="textlink" href="http://example.org"&gt;Description of the link&lt;/a&gt;&lt;br /&gt;'</font>
</pre>
<br />
<h3 style='display: inline' id='markdown-unit-test-example'>Markdown unit test example</h3><br />
@@ -171,9 +176,9 @@ assert::equals <font color="#808080">"$(generate::make_link html "</font>$gemtex
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>gemtext=<font color="#808080">'=&gt; http://example.org Description of the link'</font>
-assert::equals <font color="#808080">"$(generate::make_link md "</font>$gemtext<font color="#808080">")"</font> \
- <font color="#808080">'[Description of the link](http://example.org) '</font>
+<pre><font color="#ff0000">gemtext</font><font color="#F3E651">=</font><font color="#bb00ff">'=&gt; http://example.org Description of the link'</font>
+<font color="#ff0000">assert</font><font color="#F3E651">::</font><font color="#ff0000">equals </font><font color="#bb00ff">"$(generate::make_link md "</font><font color="#ff0000">$gemtext</font><font color="#bb00ff">")"</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'[Description of the link](http://example.org) '</font>
</pre>
<br />
<h2 style='display: inline' id='handcrafted-html-styles'>Handcrafted HTML styles</h2><br />
@@ -222,11 +227,12 @@ assert::equals <font color="#808080">"$(generate::make_link md "</font>$gemtext<
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist.html b/gemfeed/2021-07-04-the-well-grounded-rubyist.html
index 1c572a06..a61ac5e6 100644
--- a/gemfeed/2021-07-04-the-well-grounded-rubyist.html
+++ b/gemfeed/2021-07-04-the-well-grounded-rubyist.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>The Well-Grounded Rubyist</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-07-04-the-well-grounded-rubyist.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist.gmi">Gemini</a>
</p>
@@ -141,11 +146,12 @@ Hello World
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html b/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html
index fe745a70..c8b2daa1 100644
--- a/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html
+++ b/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>On being Pedantic about Open-Source</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-08-01-on-being-pedantic-about-open-source.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source.gmi">Gemini</a>
</p>
@@ -151,11 +156,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-09-12-keep-it-simple-and-stupid.html b/gemfeed/2021-09-12-keep-it-simple-and-stupid.html
index a11eea9a..4363766f 100644
--- a/gemfeed/2021-09-12-keep-it-simple-and-stupid.html
+++ b/gemfeed/2021-09-12-keep-it-simple-and-stupid.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Keep it simple and stupid</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-09-12-keep-it-simple-and-stupid.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi">Gemini</a>
</p>
@@ -138,11 +143,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-10-22-defensive-devops.html b/gemfeed/2021-10-22-defensive-devops.html
index e9689033..f7d6fc04 100644
--- a/gemfeed/2021-10-22-defensive-devops.html
+++ b/gemfeed/2021-10-22-defensive-devops.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Defensive DevOps</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-10-22-defensive-devops.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-10-22-defensive-devops.gmi">Gemini</a>
</p>
@@ -131,11 +136,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-11-29-bash-golf-part-1.html b/gemfeed/2021-11-29-bash-golf-part-1.html
index 22c38b78..5991843d 100644
--- a/gemfeed/2021-11-29-bash-golf-part-1.html
+++ b/gemfeed/2021-11-29-bash-golf-part-1.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bash Golf Part 1</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-11-29-bash-golf-part-1.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-11-29-bash-golf-part-1.gmi">Gemini</a>
</p>
@@ -504,11 +509,12 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html b/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html
index 05f4bad7..e5be6a73 100644
--- a/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html
+++ b/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>How to stay sane as a DevOps person </title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.gmi">Gemini</a>
</p>
@@ -160,11 +165,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-01-01-bash-golf-part-2.html b/gemfeed/2022-01-01-bash-golf-part-2.html
index b8c77be3..43dca349 100644
--- a/gemfeed/2022-01-01-bash-golf-part-2.html
+++ b/gemfeed/2022-01-01-bash-golf-part-2.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bash Golf Part 2</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-01-01-bash-golf-part-2.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-01-01-bash-golf-part-2.gmi">Gemini</a>
</p>
@@ -523,11 +528,12 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-01-23-welcome-to-the-foo.zone.html b/gemfeed/2022-01-23-welcome-to-the-foo.zone.html
index 3bc42ed3..1cb15a4f 100644
--- a/gemfeed/2022-01-23-welcome-to-the-foo.zone.html
+++ b/gemfeed/2022-01-23-welcome-to-the-foo.zone.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Welcome to the foo.zone</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-01-23-welcome-to-the-foo.zone.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-01-23-welcome-to-the-foo.zone.gmi">Gemini</a>
</p>
@@ -62,11 +67,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-02-04-computer-operating-systems-i-use.html b/gemfeed/2022-02-04-computer-operating-systems-i-use.html
index 666658e7..1bb1455b 100644
--- a/gemfeed/2022-02-04-computer-operating-systems-i-use.html
+++ b/gemfeed/2022-02-04-computer-operating-systems-i-use.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Computer operating systems I use(d)</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-02-04-computer-operating-systems-i-use.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use.gmi">Gemini</a>
</p>
@@ -276,11 +281,12 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html
index aadc7f23..78e92e89 100644
--- a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html
+++ b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>The release of DTail 4.0.0</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi">Gemini</a>
</p>
@@ -336,11 +341,12 @@ exec /usr/local/bin/dtailhealth --server localhost:2222
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-04-10-creative-universe.html b/gemfeed/2022-04-10-creative-universe.html
index d4a24614..bff0a98c 100644
--- a/gemfeed/2022-04-10-creative-universe.html
+++ b/gemfeed/2022-04-10-creative-universe.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Creative universe</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-04-10-creative-universe.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-04-10-creative-universe.gmi">Gemini</a>
</p>
@@ -168,11 +173,12 @@ learn () {
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.html b/gemfeed/2022-05-27-perl-is-still-a-great-choice.html
index a549863e..064511ec 100644
--- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.html
+++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Perl is still a great choice</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-05-27-perl-is-still-a-great-choice.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi">Gemini</a>
</p>
@@ -174,11 +179,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-06-15-sweating-the-small-stuff.html b/gemfeed/2022-06-15-sweating-the-small-stuff.html
index cdb98bf7..73241ee4 100644
--- a/gemfeed/2022-06-15-sweating-the-small-stuff.html
+++ b/gemfeed/2022-06-15-sweating-the-small-stuff.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sweating the small stuff - Tiny projects of mine</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-06-15-sweating-the-small-stuff.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff.gmi">Gemini</a>
</p>
@@ -367,11 +372,12 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html
index a97963ee..02a74a54 100644
--- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html
+++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Let's Encrypt with OpenBSD and Rex</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi">Gemini</a>
</p>
@@ -708,11 +713,12 @@ rex commons
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.html b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.html
index ff1c5ec4..e12729ea 100644
--- a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.html
+++ b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gemtexter 1.1.0 - Let's Gemtext again</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi">Gemini</a>
</p>
@@ -57,23 +62,23 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>check_dependencies () {
- <i><font color="silver"># At least, Bash 5 is required</font></i>
- <b><u><font color="#000000">local</font></u></b> -i required_version=<font color="#000000">5</font>
- IFS=. <b><u><font color="#000000">read</font></u></b> -ra version &lt;&lt;&lt; <font color="#808080">"$BASH_VERSION"</font>
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"${version[0]}"</font> -lt $required_version ]; <b><u><font color="#000000">then</font></u></b>
- log ERROR <font color="#808080">"ERROR, </font>\"<font color="#808080">bash</font>\"<font color="#808080"> must be at least at major version $required_version!"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">2</font>
- <b><u><font color="#000000">fi</font></u></b>
+<pre><font color="#7bc710">check_dependencies ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># At least, Bash 5 is required</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">required_version</font><font color="#F3E651">=</font><font color="#bb00ff">5</font>
+<font color="#ff0000"> </font><font color="#ff0000">IFS</font><font color="#F3E651">=.</font><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -ra version </font><font color="#F3E651">&lt;&lt;&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">"$BASH_VERSION"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"${version[0]}"</font><font color="#ff0000"> -lt </font><font color="#ff0000">$required_version</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log ERROR </font><font color="#bb00ff">"ERROR, </font><font color="#ffffff">\"</font><font color="#bb00ff">bash</font><font color="#ffffff">\"</font><font color="#bb00ff"> must be at least at major version $required_version!"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- <i><font color="silver"># These must be the GNU versions of the commands</font></i>
- <b><u><font color="#000000">for</font></u></b> tool <b><u><font color="#000000">in</font></u></b> $DATE $SED $GREP; <b><u><font color="#000000">do</font></u></b>
- <b><u><font color="#000000">if</font></u></b> ! $tool --version | grep -q GNU; <b><u><font color="#000000">then</font></u></b>
- log ERROR <font color="#808080">"ERROR, </font>\"<font color="#808080">$tool</font>\"<font color="#808080"> command is not the GNU version, please install!"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">2</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">done</font></u></b>
-}
+<font color="#ff0000"> </font><i><font color="#ababab"># These must be the GNU versions of the commands</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> tool </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#ff0000">$DATE</font><font color="#ff0000"> </font><font color="#ff0000">$SED</font><font color="#ff0000"> </font><font color="#ff0000">$GREP</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> </font><font color="#ff0000">$tool</font><font color="#ff0000"> --version </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q GNU</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log ERROR </font><font color="#bb00ff">"ERROR, </font><font color="#ffffff">\"</font><font color="#bb00ff">$tool</font><font color="#ffffff">\"</font><font color="#bb00ff"> command is not the GNU version, please install!"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>Especially macOS users didn&#39;t read the <span class='inlinecode'>README</span> carefully enough to install GNU Grep, GNU Sed and GNU Date before using Gemtexter.</span><br />
@@ -94,7 +99,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>./gemtexter --generate <font color="#808080">'.*hello.*'</font>
+<pre><font color="#F3E651">.</font><font color="#ff0000">/gemtexter --generate </font><font color="#bb00ff">'.*hello.*'</font>
</pre>
<br />
<h3 style='display: inline' id='revamped-git-support'>Revamped <span class='inlinecode'>git</span> support</h3><br />
@@ -131,11 +136,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-09-30-after-a-bad-nights-sleep.html b/gemfeed/2022-09-30-after-a-bad-nights-sleep.html
index 8c6cb3cb..4af8753b 100644
--- a/gemfeed/2022-09-30-after-a-bad-nights-sleep.html
+++ b/gemfeed/2022-09-30-after-a-bad-nights-sleep.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>After a bad night's sleep</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-09-30-after-a-bad-nights-sleep.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi">Gemini</a>
</p>
@@ -131,11 +136,12 @@ jgs (________\ \
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-10-30-installing-dtail-on-openbsd.html b/gemfeed/2022-10-30-installing-dtail-on-openbsd.html
index a5aaeefe..b40e883e 100644
--- a/gemfeed/2022-10-30-installing-dtail-on-openbsd.html
+++ b/gemfeed/2022-10-30-installing-dtail-on-openbsd.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Installing DTail on OpenBSD</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-10-30-installing-dtail-on-openbsd.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi">Gemini</a>
</p>
@@ -378,11 +383,12 @@ REMOTE|fishfinger|100|7|fstab|093f510ec5c0f512.h /usr/local ffs rw,wxallowed,nod
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.html b/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.html
index 978f6839..870252ff 100644
--- a/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.html
+++ b/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>I tried (Doom) Emacs, but I switched back to (Neo)Vim</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.gmi">Gemini</a>
</p>
@@ -94,10 +99,10 @@ Art by \ \_! / __!
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">" Clipboard</font></i>
-vnoremap ,<b><u><font color="#000000">y</font></u></b> !pbcopy&lt;CR&gt;ugv
-vnoremap ,<b><u><font color="#000000">i</font></u></b> !pbpaste&lt;CR&gt;
-nmap ,<b><u><font color="#000000">i</font></u></b> !wpbpaste&lt;CR&gt;
+<pre><i><font color="#ababab">" Clipboard</font></i>
+<font color="#ff0000">vnoremap ,</font><b><font color="#ffffff">y</font></b><font color="#ff0000"> !pbcopy</font><font color="#ff0000">&lt;CR&gt;</font><font color="#ff0000">ugv</font>
+<font color="#ff0000">vnoremap ,</font><b><font color="#ffffff">i</font></b><font color="#ff0000"> !pbpaste</font><font color="#ff0000">&lt;CR&gt;</font>
+<font color="#ff0000">nmap ,</font><b><font color="#ffffff">i</font></b><font color="#ff0000"> !wpbpaste</font><font color="#ff0000">&lt;CR&gt;</font>
</pre>
<br />
<span>That&#39;s only a very few lines and does precisely what I want. It&#39;s quick and dirty but get&#39;s the job done! If VimScript becomes too cumbersome, I can use Lua for NeoVim scripting.</span><br />
@@ -142,11 +147,12 @@ nmap ,<b><u><font color="#000000">i</font></u></b> !wpbpaste&lt;CR&gt;
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html
index fdb7d474..6f3dd3de 100644
--- a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html
+++ b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>(Re)learning Java - My takeaways</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.gmi">Gemini</a>
</p>
@@ -137,11 +142,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-01-23-why-grapheneos-rox.html b/gemfeed/2023-01-23-why-grapheneos-rox.html
index 4b326b94..22fcd6ba 100644
--- a/gemfeed/2023-01-23-why-grapheneos-rox.html
+++ b/gemfeed/2023-01-23-why-grapheneos-rox.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Why GrapheneOS rox</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-01-23-why-grapheneos-rox.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-01-23-why-grapheneos-rox.gmi">Gemini</a>
</p>
@@ -167,11 +172,12 @@ Art by Joan Stark
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-02-26-how-to-shut-down-after-work.html b/gemfeed/2023-02-26-how-to-shut-down-after-work.html
index 0b0b8854..b5c7c07c 100644
--- a/gemfeed/2023-02-26-how-to-shut-down-after-work.html
+++ b/gemfeed/2023-02-26-how-to-shut-down-after-work.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>How to shut down after work</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-02-26-how-to-shut-down-after-work.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work.gmi">Gemini</a>
</p>
@@ -103,11 +108,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.html b/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.html
index 418ee711..051625f9 100644
--- a/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.html
+++ b/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'The Pragmatic Programmer' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes.gmi">Gemini</a>
</p>
@@ -112,11 +117,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html
index 57582782..223ceeb8 100644
--- a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html
+++ b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gemtexter 2.0.0 - Let's Gemtext again²</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi">Gemini</a>
</p>
@@ -123,8 +128,8 @@ Blablabla...
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">declare</font></u></b> -xr PRE_GENERATE_HOOK=./pre_generate_hook.sh
-<b><u><font color="#000000">declare</font></u></b> -xr POST_PUBLISH_HOOK=./post_publish_hook.sh
+<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">PRE_GENERATE_HOOK</font><font color="#F3E651">=.</font><font color="#ff0000">/pre_generate_hook</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">POST_PUBLISH_HOOK</font><font color="#F3E651">=.</font><font color="#ff0000">/post_publish_hook</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
</pre>
<br />
<h2 style='display: inline' id='use-of-safer-bash-options'>Use of safer Bash options</h2><br />
@@ -141,10 +146,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% cat gemfeed/<font color="#000000">2023</font>-<font color="#000000">02</font>-<font color="#000000">26</font>-title-here.gmi
-<i><font color="silver"># Title here</font></i>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> cat gemfeed</font><font color="#F3E651">/</font><font color="#bb00ff">2023</font><font color="#ff0000">-</font><font color="#bb00ff">02</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000">-title-here</font><font color="#F3E651">.</font><font color="#ff0000">gmi</font>
+<i><font color="#ababab"># Title here</font></i>
-The remaining content of the Gemtext file...
+<font color="#ff0000">The remaining content of the Gemtext file</font><font color="#F3E651">...</font>
</pre>
<br />
<span>Gemtexter will add a line starting with <span class='inlinecode'>&gt; Published at ...</span> now. Any subsequent Atom feed generation will then use that date.</span><br />
@@ -153,12 +158,12 @@ The remaining content of the Gemtext file...
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% cat gemfeed/<font color="#000000">2023</font>-<font color="#000000">02</font>-<font color="#000000">26</font>-title-here.gmi
-<i><font color="silver"># Title here</font></i>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> cat gemfeed</font><font color="#F3E651">/</font><font color="#bb00ff">2023</font><font color="#ff0000">-</font><font color="#bb00ff">02</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000">-title-here</font><font color="#F3E651">.</font><font color="#ff0000">gmi</font>
+<i><font color="#ababab"># Title here</font></i>
-&gt; Published at <font color="#000000">2023</font>-<font color="#000000">02</font>-26T21:<font color="#000000">43</font>:<font color="#000000">51</font>+<font color="#000000">01</font>:<font color="#000000">00</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> Published at </font><font color="#bb00ff">2023</font><font color="#ff0000">-</font><font color="#bb00ff">02</font><font color="#ff0000">-26T21</font><font color="#F3E651">:</font><font color="#bb00ff">43</font><font color="#F3E651">:</font><font color="#bb00ff">51</font><font color="#F3E651">+</font><font color="#bb00ff">01</font><font color="#F3E651">:</font><font color="#bb00ff">00</font>
-The remaining content of the Gemtext file...
+<font color="#ff0000">The remaining content of the Gemtext file</font><font color="#F3E651">...</font>
</pre>
<br />
<h2 style='display: inline' id='xmllint-support'>XMLLint support</h2><br />
@@ -182,11 +187,12 @@ The remaining content of the Gemtext file...
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-04-01-never-split-the-difference-book-notes.html b/gemfeed/2023-04-01-never-split-the-difference-book-notes.html
index ffe52af6..f09a56b9 100644
--- a/gemfeed/2023-04-01-never-split-the-difference-book-notes.html
+++ b/gemfeed/2023-04-01-never-split-the-difference-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'Never split the difference' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-04-01-never-split-the-difference-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes.gmi">Gemini</a>
</p>
@@ -175,11 +180,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html b/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html
index bedad8bf..a90f5edc 100644
--- a/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html
+++ b/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Unveiling `guprecords.raku`: Global Uptime Records with Raku</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi">Gemini</a>
</p>
@@ -81,7 +86,7 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ raku guprecords.raku --stats=dir=$HOME/git/uprecords/stats --all
+<pre><font color="#ff0000">$ raku guprecords</font><font color="#F3E651">.</font><font color="#ff0000">raku --stats</font><font color="#F3E651">=</font><font color="#ff0000">dir</font><font color="#F3E651">=</font><font color="#ff0000">$HOME</font><font color="#ff0000">/git/uprecords/stats --all</font>
</pre>
<br />
<span>This command will generate a comprehensive uptime report from the collected statistics, making it easy to review and enjoy the data.</span><br />
@@ -193,11 +198,12 @@ no1 in 455 days, 18:52:44 | at Sun Jul 21 07:37:51 2024
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.html b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.html
index d6355fc1..8a2c8be2 100644
--- a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.html
+++ b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'The Obstacle is the Way' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi">Gemini</a>
</p>
@@ -128,11 +133,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html
index b4b61489..2a7d7603 100644
--- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html
+++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>KISS server monitoring with Gogios</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi">Gemini</a>
</p>
@@ -117,11 +122,11 @@ Have a nice day!
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>git clone https://codeberg.org/snonux/gogios.git
-cd gogios
-go build -o gogios cmd/gogios/main.go
-doas cp gogios /usr/local/bin/gogios
-doas chmod <font color="#000000">755</font> /usr/local/bin/gogios
+<pre><font color="#ff0000">git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/gogios</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">cd gogios</font>
+<font color="#ff0000">go build -o gogios cmd/gogios/main</font><font color="#F3E651">.</font><font color="#ff0000">go</font>
+<font color="#ff0000">doas cp gogios /usr/local/bin/gogios</font>
+<font color="#ff0000">doas chmod </font><font color="#bb00ff">755</font><font color="#ff0000"> /usr/local/bin/gogios</font>
</pre>
<br />
<span>You can use cross-compilation if you want to compile Gogios for OpenBSD on a Linux system without installing the Go compiler on OpenBSD. Follow these steps:</span><br />
@@ -130,9 +135,9 @@ doas chmod <font color="#000000">755</font> /usr/local/bin/gogios
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">export</font></u></b> GOOS=openbsd
-<b><u><font color="#000000">export</font></u></b> GOARCH=amd64
-go build -o gogios cmd/gogios/main.go
+<pre><b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">GOOS</font><font color="#F3E651">=</font><font color="#ff0000">openbsd</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">GOARCH</font><font color="#F3E651">=</font><font color="#ff0000">amd64</font>
+<font color="#ff0000">go build -o gogios cmd/gogios/main</font><font color="#F3E651">.</font><font color="#ff0000">go</font>
</pre>
<br />
<span>On your OpenBSD system, copy the binary to <span class='inlinecode'>/usr/local/bin/gogios</span> and set the correct permissions as described in the previous section. All steps described here you could automate with your configuration management system of choice. I use Rexify, the friendly configuration management system, to automate the installation, but that is out of the scope of this document.</span><br />
@@ -147,11 +152,11 @@ go build -o gogios cmd/gogios/main.go
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>doas adduser -group _gogios -batch _gogios
-doas usermod -d /var/run/gogios _gogios
-doas mkdir -p /var/run/gogios
-doas chown _gogios:_gogios /var/run/gogios
-doas chmod <font color="#000000">750</font> /var/run/gogios
+<pre><font color="#ff0000">doas adduser -group _gogios -batch _gogios</font>
+<font color="#ff0000">doas usermod -d /var/run/gogios _gogios</font>
+<font color="#ff0000">doas mkdir -p /var/run/gogios</font>
+<font color="#ff0000">doas chown _gogios</font><font color="#F3E651">:</font><font color="#ff0000">_gogios /var/run/gogios</font>
+<font color="#ff0000">doas chmod </font><font color="#bb00ff">750</font><font color="#ff0000"> /var/run/gogios</font>
</pre>
<br />
<span>Please note that creating a user and group might differ depending on your operating system. For other operating systems, consult their documentation for creating system users and groups.</span><br />
@@ -164,8 +169,8 @@ doas chmod <font color="#000000">750</font> /var/run/gogios
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>doas pkg_add monitoring-plugins
-doas pkg_add nrpe <i><font color="silver"># If you want to execute checks remotely via NRPE.</font></i>
+<pre><font color="#ff0000">doas pkg_add monitoring-plugins</font>
+<font color="#ff0000">doas pkg_add nrpe </font><i><font color="#ababab"># If you want to execute checks remotely via NRPE.</font></i>
</pre>
<br />
<span>Once the installation is complete, you can find the monitoring plugins in the <span class='inlinecode'>/usr/local/libexec/nagios</span> directory, which then can be configured to be used in <span class='inlinecode'>gogios.json</span>.</span><br />
@@ -192,41 +197,41 @@ echo &#39;This is a test email from OpenBSD.&#39; | mail -s &#39;Test Email&#39;
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>{
- "EmailTo": "<font color="#808080">paul@dev.buetow.org</font>",
- "EmailFrom": "<font color="#808080">gogios@buetow.org</font>",
- "CheckTimeoutS": <font color="#000000">10</font>,
- "CheckConcurrency": <font color="#000000">2</font>,
- "StateDir": "<font color="#808080">/var/run/gogios</font>",
- "Checks": {
- "Check ICMP4 www.foo.zone": {
- "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_ping</font>",
- "Args": [ "-H", "www.foo.zone", "-4", "-w", "50,10%", "-c", "100,15%" ],
- "Retries": <font color="#000000">3</font>,
- "RetryInterval": <font color="#000000">10</font>
- },
- "Check ICMP6 www.foo.zone": {
- "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_ping</font>",
- "Args": [ "-H", "www.foo.zone", "-6", "-w", "50,10%", "-c", "100,15%" ],
- "Retries": <font color="#000000">3</font>,
- "RetryInterval": <font color="#000000">10</font>
- },
- "www.foo.zone HTTP IPv4": {
- "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_http</font>",
- "Args": ["www.foo.zone", "-4"],
- "DependsOn": ["Check ICMP4 www.foo.zone"]
- },
- "www.foo.zone HTTP IPv6": {
- "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_http</font>",
- "Args": ["www.foo.zone", "-6"],
- "DependsOn": ["Check ICMP6 www.foo.zone"]
- }
- "Check NRPE Disk Usage foo.zone": {
- "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_nrpe</font>",
- "Args": ["-H", "foo.zone", "-c", "check_disk", "-p", "5666", "-4"]
- }
- }
-}
+<pre><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">EmailTo</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">paul@dev.buetow.org</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">EmailFrom</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">gogios@buetow.org</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">CheckTimeoutS</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">10</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">CheckConcurrency</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">2</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">StateDir</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/var/run/gogios</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Checks</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP4 www.foo.zone</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_ping</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-H</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-4</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-w</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">50,10%</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-c</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">100,15%</font><font color="#ff0000">"</font><font color="#ff0000"> </font><font color="#F3E651">],</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Retries</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">3</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">RetryInterval</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP6 www.foo.zone</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_ping</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-H</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-6</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-w</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">50,10%</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-c</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">100,15%</font><font color="#ff0000">"</font><font color="#ff0000"> </font><font color="#F3E651">],</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Retries</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">3</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">RetryInterval</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone HTTP IPv4</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_http</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-4</font><font color="#ff0000">"</font><font color="#F3E651">],</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">DependsOn</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP4 www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone HTTP IPv6</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_http</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-6</font><font color="#ff0000">"</font><font color="#F3E651">],</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">DependsOn</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP6 www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Check NRPE Disk Usage foo.zone</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_nrpe</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">-H</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-c</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">check_disk</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-p</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">5666</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-4</font><font color="#ff0000">"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<ul>
@@ -255,7 +260,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>doas -u _gogios /usr/local/bin/gogios -cfg /etc/gogios.json
+<pre><font color="#ff0000">doas -u _gogios /usr/local/bin/gogios -cfg /etc/gogios</font><font color="#F3E651">.</font><font color="#ff0000">json</font>
</pre>
<br />
<span>To run Gogios via CRON on OpenBSD as the <span class='inlinecode'>gogios</span> user and check all services once per minute, follow these steps:</span><br />
@@ -297,11 +302,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.html b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.html
index b0a6fbec..e08eee69 100644
--- a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.html
+++ b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'Software Developers Career Guide and Soft Skills' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi">Gemini</a>
</p>
@@ -360,11 +365,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html
index 7bcae7ca..4cc32a19 100644
--- a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html
+++ b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gemtexter 2.1.0 - Let's Gemtext again³</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi">Gemini</a>
</p>
@@ -72,9 +77,9 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$foo"</font> ]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"$foo"</font>
-<b><u><font color="#000000">fi</font></u></b>
+<pre><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$foo"</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>Please run <span class='inlinecode'>source-highlight --lang-list</span> for a list of all supported languages.</span><br />
@@ -103,7 +108,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">declare</font></u></b> -xr MASTODON_URI=<font color="#808080">'https://fosstodon.org/@snonux'</font>
+<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">MASTODON_URI</font><font color="#F3E651">=</font><font color="#bb00ff">'https://fosstodon.org/@snonux'</font>
</pre>
<br />
<span>and add the following into your <span class='inlinecode'>index.gmi</span>:</span><br />
@@ -118,7 +123,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">&lt;a</font></u></b> <b><font color="#000000">href</font></b>=<font color="#808080">'https://fosstodon.org/@snonux'</font> <b><font color="#000000">rel</font></b>=<font color="#808080">'me'</font><b><u><font color="#000000">&gt;</font></u></b>Me at Mastodon<b><u><font color="#000000">&lt;/a&gt;</font></u></b>
+<pre><b><font color="#ffffff">&lt;a</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">href</font></b><font color="#F3E651">=</font><font color="#bb00ff">'https://fosstodon.org/@snonux'</font><font color="#ff0000"> </font><b><font color="#F35E1E">rel</font></b><font color="#F3E651">=</font><font color="#bb00ff">'me'</font><b><font color="#ffffff">&gt;</font></b><font color="#ff0000">Me at Mastodon</font><b><font color="#ffffff">&lt;/a&gt;</font></b>
</pre>
<br />
<h2 style='display: inline' id='more'>More</h2><br />
@@ -138,11 +143,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-08-18-site-reliability-engineering-part-1.html b/gemfeed/2023-08-18-site-reliability-engineering-part-1.html
index 716dcfd5..d729fd97 100644
--- a/gemfeed/2023-08-18-site-reliability-engineering-part-1.html
+++ b/gemfeed/2023-08-18-site-reliability-engineering-part-1.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Site Reliability Engineering - Part 1: SRE and Organizational Culture</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-08-18-site-reliability-engineering-part-1.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1.gmi">Gemini</a>
</p>
@@ -73,11 +78,12 @@ DC on fire:
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-09-25-dtail-usage-examples.html b/gemfeed/2023-09-25-dtail-usage-examples.html
index 6723a770..16c130d6 100644
--- a/gemfeed/2023-09-25-dtail-usage-examples.html
+++ b/gemfeed/2023-09-25-dtail-usage-examples.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>DTail usage examples</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-09-25-dtail-usage-examples.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-09-25-dtail-usage-examples.gmi">Gemini</a>
</p>
@@ -70,7 +75,7 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --servers serverlist.txt --grep INFO --files <font color="#808080">"/var/log/dserver/*.log"</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt --grep INFO --files </font><font color="#bb00ff">"/var/log/dserver/*.log"</font>
</pre>
<br />
<span>Hint: you can also provide a comma separated server list, e.g.: <span class='inlinecode'>servers server1.example.org,server2.example.org:PORT,...</span></span><br />
@@ -83,7 +88,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --servers serverlist.txt --grep INFO <font color="#808080">"/var/log/dserver/*.log"</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt --grep INFO </font><font color="#bb00ff">"/var/log/dserver/*.log"</font>
</pre>
<br />
<h2 style='display: inline' id='aggregating-logs'>Aggregating logs</h2><br />
@@ -96,10 +101,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --servers serverlist.txt \
- --files <font color="#808080">'/var/log/dserver/*.log'</font> \
- --query <font color="#808080">'from STATS select sum($goroutines),sum($cgocalls),</font>
-<font color="#808080"> last($time),max(lifetimeConnections)'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select sum($goroutines),sum($cgocalls),</font>
+<font color="#bb00ff"> last($time),max(lifetimeConnections)'</font>
</pre>
<br />
<span>Beware: For map-reduce queries to work, you have to ensure that DTail supports your log format. Check out the documentaiton of the DTail query language and the DTail log formats on the DTail homepage for more information.</span><br />
@@ -112,10 +117,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --servers serverlist.txt \
- --files <font color="#808080">'/var/log/dserver/*.log'</font> \
- <font color="#808080">'from STATS select sum($goroutines),sum($cgocalls),</font>
-<font color="#808080"> last($time),max(lifetimeConnections)'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'from STATS select sum($goroutines),sum($cgocalls),</font>
+<font color="#bb00ff"> last($time),max(lifetimeConnections)'</font>
</pre>
<br />
<span>Here is another example:</span><br />
@@ -124,10 +129,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --servers serverlist.txt \
- --files <font color="#808080">'/var/log/dserver/*.log'</font> \
- --query <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
-<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
+<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
</pre>
<br />
<a href='./dtail-usage-examples/dtail-map2.gif'><img alt='Tail map-reduce example 2' title='Tail map-reduce example 2' src='./dtail-usage-examples/dtail-map2.gif' /></a><br />
@@ -138,9 +143,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --servers serverlist.txt \
- --files <font color="#808080">'/var/log/dserver/*.log'</font> \
- --query <font color="#808080">'from STATS select ... outfile append result.csv'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select ... outfile append result.csv'</font>
</pre>
<br />
<h2 style='display: inline' id='how-to-use-dcat'>How to use <span class='inlinecode'>dcat</span></h2><br />
@@ -153,7 +158,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dcat --servers serverlist.txt --files /etc/hostname
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt --files /etc/hostname</font>
</pre>
<br />
<a href='./dtail-usage-examples/dcat.gif'><img alt='Cat example' title='Cat example' src='./dtail-usage-examples/dcat.gif' /></a><br />
@@ -164,7 +169,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dcat --servers serverlist.txt /etc/hostname
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt /etc/hostname</font>
</pre>
<br />
<h2 style='display: inline' id='how-to-use-dgrep'>How to use <span class='inlinecode'>dgrep</span></h2><br />
@@ -175,9 +180,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dgrep --servers server1.example.org:<font color="#000000">2223</font> \
- --files /etc/passwd \
- --regex nologin
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dgrep --servers server1</font><font color="#F3E651">.</font><font color="#ff0000">example</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">2223</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --files /etc/passwd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --regex nologin</font>
</pre>
<br />
<span>Generally, <span class='inlinecode'>dgrep</span> is also a very useful way to search historic application logs for certain content.</span><br />
@@ -194,10 +199,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dmap --servers serverlist.txt \
- --files <font color="#808080">'/var/log/dserver/*.log'</font> \
- --query <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
-<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dmap --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
+<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
</pre>
<br />
<span>Remember: For that to work, you have to make sure that DTail supports your log format. You can either use the ones already defined in <span class='inlinecode'>internal/mapr/logformat</span> or add an extension to support a custom log format. The example here works out of the box though, as DTail understands its own log format already. </span><br />
@@ -220,9 +225,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dmap --files /var/log/dserver/dserver.log
- --query <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
-<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dmap --files /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
+<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
+<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
</pre>
<br />
<span>As a shorthand version the following command can be used:</span><br />
@@ -231,9 +236,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dmap <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
-<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> \
- /var/log/dsever/dserver.log
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dmap </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
+<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> /var/log/dsever/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
</pre>
<br />
<span>You can also use a file input pipe as follows:</span><br />
@@ -242,9 +247,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% cat /var/log/dserver/dserver.log | \
- dmap <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
-<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> cat /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> dmap </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font>
+<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font>
</pre>
<br />
<h3 style='display: inline' id='aggregating-csv-files'>Aggregating CSV files</h3><br />
@@ -255,16 +260,16 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% cat example.csv
-name,lastname,age,profession
-Michael,Jordan,<font color="#000000">40</font>,Basketball player
-Michael,Jackson,<font color="#000000">100</font>,Singer
-Albert,Einstein,<font color="#000000">200</font>,Physician
-% dmap --query <font color="#808080">'select lastname,name where age &gt; 40 logformat csv outfile result.csv'</font> example.csv
-% cat result.csv
-lastname,name
-Jackson,Michael
-Einstein,Albert
+<pre><font color="#F3E651">%</font><font color="#ff0000"> cat example</font><font color="#F3E651">.</font><font color="#ff0000">csv</font>
+<font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000">lastname</font><font color="#F3E651">,</font><font color="#ff0000">age</font><font color="#F3E651">,</font><font color="#ff0000">profession</font>
+<font color="#ff0000">Michael</font><font color="#F3E651">,</font><font color="#ff0000">Jordan</font><font color="#F3E651">,</font><font color="#bb00ff">40</font><font color="#F3E651">,</font><font color="#ff0000">Basketball player</font>
+<font color="#ff0000">Michael</font><font color="#F3E651">,</font><font color="#ff0000">Jackson</font><font color="#F3E651">,</font><font color="#bb00ff">100</font><font color="#F3E651">,</font><font color="#ff0000">Singer</font>
+<font color="#ff0000">Albert</font><font color="#F3E651">,</font><font color="#ff0000">Einstein</font><font color="#F3E651">,</font><font color="#bb00ff">200</font><font color="#F3E651">,</font><font color="#ff0000">Physician</font>
+<font color="#F3E651">%</font><font color="#ff0000"> dmap --query </font><font color="#bb00ff">'select lastname,name where age &gt; 40 logformat csv outfile result.csv'</font><font color="#ff0000"> example</font><font color="#F3E651">.</font><font color="#ff0000">csv</font>
+<font color="#F3E651">%</font><font color="#ff0000"> cat result</font><font color="#F3E651">.</font><font color="#ff0000">csv</font>
+<font color="#ff0000">lastname</font><font color="#F3E651">,</font><font color="#ff0000">name</font>
+<font color="#ff0000">Jackson</font><font color="#F3E651">,</font><font color="#ff0000">Michael</font>
+<font color="#ff0000">Einstein</font><font color="#F3E651">,</font><font color="#ff0000">Albert</font>
</pre>
<br />
<span>DMap can also be used to query and aggregate CSV files from remote servers.</span><br />
@@ -277,44 +282,44 @@ Einstein,Albert
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail /var/log/dserver/dserver.log
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dtail --logLevel trace /var/log/dserver/dserver.log
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --logLevel trace /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dcat /etc/passwd
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat /etc/passwd</font>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dcat --plain /etc/passwd &gt; /etc/test
-<i><font color="silver"># Should show no differences.</font></i>
-diff /etc/test /etc/passwd
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat --plain /etc/passwd </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /etc/test</font>
+<i><font color="#ababab"># Should show no differences.</font></i>
+<font color="#ff0000">diff /etc/test /etc/passwd </font>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dgrep --regex ERROR --files /var/log/dserver/dsever.log
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dgrep --regex ERROR --files /var/log/dserver/dsever</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% dgrep --before <font color="#000000">10</font> --after <font color="#000000">10</font> --max <font color="#000000">10</font> --grep ERROR /var/log/dserver/dsever.log
+<pre><font color="#F3E651">%</font><font color="#ff0000"> dgrep --before </font><font color="#bb00ff">10</font><font color="#ff0000"> --after </font><font color="#bb00ff">10</font><font color="#ff0000"> --max </font><font color="#bb00ff">10</font><font color="#ff0000"> --grep ERROR /var/log/dserver/dsever</font><font color="#F3E651">.</font><font color="#ff0000">log</font>
</pre>
<br />
<span>Use <span class='inlinecode'>--help</span> for more available options. Or go to the DTail page for more information! Hope you find DTail useful!</span><br />
@@ -334,11 +339,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html
index b67d90e4..1faf9285 100644
--- a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html
+++ b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>KISS static web photo albums with `photoalbum.sh`</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi">Gemini</a>
</p>
@@ -130,42 +135,42 @@ photoalbum makemake
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% photoalbum makemake
-You may now customize ./photoalbumrc and run make
+<pre><font color="#F3E651">%</font><font color="#ff0000"> photoalbum makemake</font>
+<font color="#ff0000">You may now customize </font><font color="#F3E651">.</font><font color="#ff0000">/photoalbumrc and run make</font>
-% cat Makefile
-all:
- photoalbum generate photoalbumrc
-clean:
- photoalbum clean photoalbumrc
+<font color="#F3E651">%</font><font color="#ff0000"> cat Makefile</font>
+<font color="#ff0000">all</font><font color="#F3E651">:</font>
+<font color="#ff0000"> photoalbum generate photoalbumrc</font>
+<font color="#ff0000">clean</font><font color="#F3E651">:</font>
+<font color="#ff0000"> photoalbum clean photoalbumrc</font>
-% cat photoalbumrc
-<i><font color="silver"># The title of the photoalbum</font></i>
-TITLE=<font color="#808080">'A simple Photoalbum'</font>
+<font color="#F3E651">%</font><font color="#ff0000"> cat photoalbumrc</font>
+<i><font color="#ababab"># The title of the photoalbum</font></i>
+<font color="#ff0000">TITLE</font><font color="#F3E651">=</font><font color="#bb00ff">'A simple Photoalbum'</font>
-<i><font color="silver"># Thumbnail height geometry</font></i>
-THUMBHEIGHT=<font color="#000000">300</font>
-<i><font color="silver"># Normal geometry height (when viewing photo). Uncomment, to keep original size.</font></i>
-HEIGHT=<font color="#000000">1200</font>
-<i><font color="silver"># Max previews per page.</font></i>
-MAXPREVIEWS=<font color="#000000">40</font>
-<i><font color="silver"># Randomly shuffle all previews.</font></i>
-<i><font color="silver"># SHUFFLE=yes</font></i>
+<i><font color="#ababab"># Thumbnail height geometry</font></i>
+<font color="#ff0000">THUMBHEIGHT</font><font color="#F3E651">=</font><font color="#bb00ff">300</font>
+<i><font color="#ababab"># Normal geometry height (when viewing photo). Uncomment, to keep original size.</font></i>
+<font color="#ff0000">HEIGHT</font><font color="#F3E651">=</font><font color="#bb00ff">1200</font>
+<i><font color="#ababab"># Max previews per page.</font></i>
+<font color="#ff0000">MAXPREVIEWS</font><font color="#F3E651">=</font><font color="#bb00ff">40</font>
+<i><font color="#ababab"># Randomly shuffle all previews.</font></i>
+<i><font color="#ababab"># SHUFFLE=yes</font></i>
-<i><font color="silver"># Diverse directories, need to be full paths, not relative!</font></i>
-INCOMING_DIR=$(pwd)/incoming
-DIST_DIR=$(pwd)/dist
-TEMPLATE_DIR=/usr/share/photoalbum/templates/default
-<i><font color="silver">#TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal</font></i>
+<i><font color="#ababab"># Diverse directories, need to be full paths, not relative!</font></i>
+<font color="#ff0000">INCOMING_DIR</font><font color="#F3E651">=</font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/incoming</font>
+<font color="#ff0000">DIST_DIR</font><font color="#F3E651">=</font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/dist</font>
+<font color="#ff0000">TEMPLATE_DIR</font><font color="#F3E651">=</font><font color="#ff0000">/usr/share/photoalbum/templates/default</font>
+<i><font color="#ababab">#TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal</font></i>
-<i><font color="silver"># Includes a .tar of the incoming dir in the dist, can be yes or no</font></i>
-TARBALL_INCLUDE=yes
-TARBALL_SUFFIX=.tar
-TAR_OPTS=<font color="#808080">'-c'</font>
+<i><font color="#ababab"># Includes a .tar of the incoming dir in the dist, can be yes or no</font></i>
+<font color="#ff0000">TARBALL_INCLUDE</font><font color="#F3E651">=</font><font color="#ff0000">yes</font>
+<font color="#ff0000">TARBALL_SUFFIX</font><font color="#F3E651">=.</font><font color="#ff0000">tar</font>
+<font color="#ff0000">TAR_OPTS</font><font color="#F3E651">=</font><font color="#bb00ff">'-c'</font>
-<i><font color="silver"># Some debugging options</font></i>
-<i><font color="silver">#set -e</font></i>
-<i><font color="silver">#set -x</font></i>
+<i><font color="#ababab"># Some debugging options</font></i>
+<i><font color="#ababab">#set -e</font></i>
+<i><font color="#ababab">#set -x</font></i>
</pre>
<br />
<span>In the case for <span class='inlinecode'>irregular.ninja</span>, I changed the defaults to the following:</span><br />
@@ -174,38 +179,38 @@ TAR_OPTS=<font color="#808080">'-c'</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>--- photoalbumrc 2023-10-29 21:42:00.894202045 +0200
-+++ photoalbumrc.new 2023-06-04 10:40:08.030994440 +0300
-@@ -1,23 +1,24 @@
- # The title of the photoalbum
--TITLE='A simple Photoalbum'
-+TITLE='Irregular.Ninja'
+<pre><font color="#ff0000">--- photoalbumrc 2023-10-29 21:42:00.894202045 +0200</font>
+<font color="#ff0000">+++ photoalbumrc.new 2023-06-04 10:40:08.030994440 +0300</font>
+<font color="#ff0000">@@ -1,23 +1,24 @@</font>
+<font color="#ff0000"> # The title of the photoalbum</font>
+<font color="#ff0000">-TITLE='A simple Photoalbum'</font>
+<font color="#ff0000">+TITLE='Irregular.Ninja'</font>
- # Thumbnail height geometry
--THUMBHEIGHT=300
-+THUMBHEIGHT=400
- # Normal geometry height (when viewing photo). Uncomment, to keep original size.
--HEIGHT=1200
-+HEIGHT=1800
- # Max previews per page.
- MAXPREVIEWS=40
--# Randomly shuffle all previews.
--# SHUFFLE=yes
-+# Randomly shuffle
-+SHUFFLE=yes
+<font color="#ff0000"> # Thumbnail height geometry</font>
+<font color="#ff0000">-THUMBHEIGHT=300</font>
+<font color="#ff0000">+THUMBHEIGHT=400</font>
+<font color="#ff0000"> # Normal geometry height (when viewing photo). Uncomment, to keep original size.</font>
+<font color="#ff0000">-HEIGHT=1200</font>
+<font color="#ff0000">+HEIGHT=1800</font>
+<font color="#ff0000"> # Max previews per page.</font>
+<font color="#ff0000"> MAXPREVIEWS=40</font>
+<font color="#ff0000">-# Randomly shuffle all previews.</font>
+<font color="#ff0000">-# SHUFFLE=yes</font>
+<font color="#ff0000">+# Randomly shuffle</font>
+<font color="#ff0000">+SHUFFLE=yes</font>
- # Diverse directories, need to be full paths, not relative!
--INCOMING_DIR=$(pwd)/incoming
-+INCOMING_DIR=~/Nextcloud/Photos/irregular.ninja
- DIST_DIR=$(pwd)/dist
- TEMPLATE_DIR=/usr/share/photoalbum/templates/default
- #TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal
+<font color="#ff0000"> # Diverse directories, need to be full paths, not relative!</font>
+<font color="#ff0000">-INCOMING_DIR=$(pwd)/incoming</font>
+<font color="#ff0000">+INCOMING_DIR=~/Nextcloud/Photos/irregular.ninja</font>
+<font color="#ff0000"> DIST_DIR=$(pwd)/dist</font>
+<font color="#ff0000"> TEMPLATE_DIR=/usr/share/photoalbum/templates/default</font>
+<font color="#ff0000"> #TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal</font>
- # Includes a .tar of the incoming dir in the dist, can be yes or no
--TARBALL_INCLUDE=yes
-+TARBALL_INCLUDE=no
- TARBALL_SUFFIX=.tar
- TAR_OPTS='-c'
+<font color="#ff0000"> # Includes a .tar of the incoming dir in the dist, can be yes or no</font>
+<font color="#ff0000">-TARBALL_INCLUDE=yes</font>
+<font color="#ff0000">+TARBALL_INCLUDE=no</font>
+<font color="#ff0000"> TARBALL_SUFFIX=.tar</font>
+<font color="#ff0000"> TAR_OPTS='-c'</font>
</pre>
<br />
<span>So I changed the album title, adjusted some image and thumbnail dimensions, and I want all images to be randomly shuffled every time the album is generated! I also have all my photos in my Nextcloud Photo directory and don&#39;t want to copy them to the local <span class='inlinecode'>incoming</span> directory. Also, a tarball containing the whole album as a download isn&#39;t provided.</span><br />
@@ -306,11 +311,12 @@ blurs html index.html photos thumbs
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-11-11-mind-management-book-notes.html b/gemfeed/2023-11-11-mind-management-book-notes.html
index 19d30776..f90dbff7 100644
--- a/gemfeed/2023-11-11-mind-management-book-notes.html
+++ b/gemfeed/2023-11-11-mind-management-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'Mind Management' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-11-11-mind-management-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-11-11-mind-management-book-notes.gmi">Gemini</a>
</p>
@@ -145,11 +150,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-11-19-site-reliability-engineering-part-2.html b/gemfeed/2023-11-19-site-reliability-engineering-part-2.html
index 6cfd8a2c..8689808a 100644
--- a/gemfeed/2023-11-19-site-reliability-engineering-part-2.html
+++ b/gemfeed/2023-11-19-site-reliability-engineering-part-2.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Site Reliability Engineering - Part 2: Operational Balance</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-11-19-site-reliability-engineering-part-2.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2.gmi">Gemini</a>
</p>
@@ -63,11 +68,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2023-12-10-bash-golf-part-3.html b/gemfeed/2023-12-10-bash-golf-part-3.html
index 0b848821..538b7a9e 100644
--- a/gemfeed/2023-12-10-bash-golf-part-3.html
+++ b/gemfeed/2023-12-10-bash-golf-part-3.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bash Golf Part 3</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2023-12-10-bash-golf-part-3.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2023-12-10-bash-golf-part-3.gmi">Gemini</a>
</p>
@@ -56,24 +61,24 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-log () {
- <b><u><font color="#000000">local</font></u></b> -r level=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r message=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -i pid=<font color="#808080">"$$"</font>
+<font color="#7bc710">log ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">level</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">message</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">pid</font><font color="#F3E651">=</font><font color="#bb00ff">"$$"</font>
- <b><u><font color="#000000">local</font></u></b> -r callee=${FUNCNAME[1]}
- <b><u><font color="#000000">local</font></u></b> -r stamp=$(date +%Y%m%d-%H%M%S)
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">callee</font><font color="#F3E651">=</font><font color="#ff0000">${FUNCNAME[1]}</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">stamp</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">date </font><font color="#F3E651">+%</font><font color="#ff0000">Y</font><font color="#F3E651">%</font><font color="#ff0000">m</font><font color="#F3E651">%</font><font color="#ff0000">d-</font><font color="#F3E651">%</font><font color="#ff0000">H</font><font color="#F3E651">%</font><font color="#ff0000">M</font><font color="#F3E651">%</font><font color="#ff0000">S</font><font color="#F3E651">)</font>
- echo <font color="#808080">"$level|$stamp|$pid|$callee|$message"</font> &gt;&amp;<font color="#000000">2</font>
-}
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$level|$stamp|$pid|$callee|$message"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000">}</font>
-at_home_friday_evening () {
- log INFO <font color="#808080">'One Peperoni Pizza, please'</font>
-}
+<font color="#7bc710">at_home_friday_evening ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> log INFO </font><font color="#bb00ff">'One Peperoni Pizza, please'</font>
+<font color="#ff0000">}</font>
-at_home_friday_evening
+<font color="#ff0000">at_home_friday_evening</font>
</pre>
<br />
<span>The output is as follows:</span><br />
@@ -82,8 +87,8 @@ at_home_friday_evening
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>❯ ./logexample.sh
-INFO|<font color="#000000">20231210</font>-<font color="#000000">082732</font>|<font color="#000000">123002</font>|at_home_friday_evening|One Peperoni Pizza, please
+<pre><font color="#ff0000">❯ </font><font color="#F3E651">.</font><font color="#ff0000">/logexample</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">INFO</font><font color="#F3E651">|</font><font color="#bb00ff">20231210</font><font color="#ff0000">-</font><font color="#bb00ff">082732</font><font color="#F3E651">|</font><font color="#bb00ff">123002</font><font color="#F3E651">|</font><font color="#ff0000">at_home_friday_evening</font><font color="#F3E651">|</font><font color="#ff0000">One Peperoni Pizza</font><font color="#F3E651">,</font><font color="#ff0000"> please</font>
</pre>
<br />
<h2 style='display: inline' id='--'><span class='inlinecode'>:(){ :|:&amp; };:</span></h2><br />
@@ -117,18 +122,18 @@ INFO|<font color="#000000">20231210</font>-<font color="#000000">082732</font>|<
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
-
-outer() {
- inner() {
- echo <font color="#808080">'Intel inside!'</font>
- }
- inner
-}
-
-inner
-outer
-inner
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
+
+<font color="#7bc710">outer()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><font color="#7bc710">inner()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Intel inside!'</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000"> inner</font>
+<font color="#ff0000">}</font>
+
+<font color="#ff0000">inner</font>
+<font color="#ff0000">outer</font>
+<font color="#ff0000">inner</font>
</pre>
<br />
<span>And let&#39;s execute it:</span><br />
@@ -146,26 +151,26 @@ Intel inside!
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
-
-outer1() {
- inner() {
- echo <font color="#808080">'Intel inside!'</font>
- }
- inner
-}
-
-outer2() {
- inner() {
- echo <font color="#808080">'Wintel inside!'</font>
- }
- inner
-}
-
-outer1
-inner
-outer2
-inner
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
+
+<font color="#7bc710">outer1()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><font color="#7bc710">inner()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Intel inside!'</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000"> inner</font>
+<font color="#ff0000">}</font>
+
+<font color="#7bc710">outer2()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><font color="#7bc710">inner()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">'Wintel inside!'</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000"> inner</font>
+<font color="#ff0000">}</font>
+
+<font color="#ff0000">outer1</font>
+<font color="#ff0000">inner</font>
+<font color="#ff0000">outer2</font>
+<font color="#ff0000">inner</font>
</pre>
<br />
<span>And let&#39;s run it:</span><br />
@@ -186,14 +191,14 @@ Wintel inside!
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-some_expensive_operations() {
- echo <font color="#808080">"Doing expensive operations with '$1' from pid $$"</font>
-}
+<font color="#7bc710">some_expensive_operations()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Doing expensive operations with '$1' from pid $$"</font>
+<font color="#ff0000">}</font>
-<b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> {<font color="#000000">0</font>..<font color="#000000">9</font>}; <b><u><font color="#000000">do</font></u></b> echo $i; <b><u><font color="#000000">done</font></u></b> \
- | xargs -P<font color="#000000">10</font> -I{} bash -c <font color="#808080">'some_expensive_operations "{}"'</font>
+<b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> {</font><font color="#bb00ff">0</font><font color="#F3E651">..</font><font color="#bb00ff">9</font><font color="#ff0000">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> echo </font><font color="#ff0000">$i</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -P</font><font color="#bb00ff">10</font><font color="#ff0000"> -I{} bash -c </font><font color="#bb00ff">'some_expensive_operations "{}"'</font>
</pre>
<br />
<span>We try here to run ten parallel processes; each of them should run the <span class='inlinecode'>some_expensive_operations</span> function with a different argument. The arguments are provided to <span class='inlinecode'>xargs</span> through <span class='inlinecode'>STDIN</span> one per line. When executed, we get this:</span><br />
@@ -218,15 +223,15 @@ bash: line 1: some_expensive_operations: command not found
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-some_expensive_operations() {
- echo <font color="#808080">"Doing expensive operations with '$1' from pid $$"</font>
-}
-<b><u><font color="#000000">export</font></u></b> -f some_expensive_operations
+<font color="#7bc710">some_expensive_operations()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Doing expensive operations with '$1' from pid $$"</font>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> -f some_expensive_operations</font>
-<b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> {<font color="#000000">0</font>..<font color="#000000">9</font>}; <b><u><font color="#000000">do</font></u></b> echo $i; <b><u><font color="#000000">done</font></u></b> \
- | xargs -P<font color="#000000">10</font> -I{} bash -c <font color="#808080">'some_expensive_operations "{}"'</font>
+<b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> {</font><font color="#bb00ff">0</font><font color="#F3E651">..</font><font color="#bb00ff">9</font><font color="#ff0000">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> echo </font><font color="#ff0000">$i</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -P</font><font color="#bb00ff">10</font><font color="#ff0000"> -I{} bash -c </font><font color="#bb00ff">'some_expensive_operations "{}"'</font>
</pre>
<br />
<span>When we run this now, we get:</span><br />
@@ -251,19 +256,19 @@ Doing expensive operations with &#39;9&#39; from pid 132840
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-some_other_function() {
- echo <font color="#808080">"$1"</font>
-}
+<font color="#7bc710">some_other_function()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000">}</font>
-some_expensive_operations() {
- some_other_function <font color="#808080">"Doing expensive operations with '$1' from pid $$"</font>
-}
-<b><u><font color="#000000">export</font></u></b> -f some_expensive_operations
+<font color="#7bc710">some_expensive_operations()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> some_other_function </font><font color="#bb00ff">"Doing expensive operations with '$1' from pid $$"</font>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> -f some_expensive_operations</font>
-<b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> {<font color="#000000">0</font>..<font color="#000000">9</font>}; <b><u><font color="#000000">do</font></u></b> echo $i; <b><u><font color="#000000">done</font></u></b> \
- | xargs -P<font color="#000000">10</font> -I{} bash -c <font color="#808080">'some_expensive_operations "{}"'</font>
+<b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> {</font><font color="#bb00ff">0</font><font color="#F3E651">..</font><font color="#bb00ff">9</font><font color="#ff0000">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> echo </font><font color="#ff0000">$i</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -P</font><font color="#bb00ff">10</font><font color="#ff0000"> -I{} bash -c </font><font color="#bb00ff">'some_expensive_operations "{}"'</font>
</pre>
<br />
<span>... because <span class='inlinecode'>some_other_function</span> isn&#39;t exported! You will also need to add an <span class='inlinecode'>export -f some_other_function</span>!</span><br />
@@ -276,22 +281,22 @@ some_expensive_operations() {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
-
-foo() {
- <b><u><font color="#000000">local</font></u></b> foo=bar <i><font color="silver"># Declare local/dynamic variable</font></i>
- bar
- echo <font color="#808080">"$foo"</font>
-}
-
-bar() {
- echo <font color="#808080">"$foo"</font>
- foo=baz
-}
-
-foo=foo <i><font color="silver"># Declare global variable</font></i>
-foo <i><font color="silver"># Call function foo</font></i>
-echo <font color="#808080">"$foo"</font>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
+
+<font color="#7bc710">foo()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">bar </font><i><font color="#ababab"># Declare local/dynamic variable</font></i>
+<font color="#ff0000"> bar</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$foo"</font>
+<font color="#ff0000">}</font>
+
+<font color="#7bc710">bar()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$foo"</font>
+<font color="#ff0000"> </font><font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">baz</font>
+<font color="#ff0000">}</font>
+
+<font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">foo </font><i><font color="#ababab"># Declare global variable</font></i>
+<font color="#ff0000">foo </font><i><font color="#ababab"># Call function foo</font></i>
+<font color="#ff0000">echo </font><font color="#bb00ff">"$foo"</font>
</pre>
<br />
<span>Let&#39;s pause a minute. What do you think the output would be?</span><br />
@@ -316,34 +321,34 @@ foo
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-<b><u><font color="#000000">declare</font></u></b> -r foo=foo
-<b><u><font color="#000000">declare</font></u></b> -r bar=bar
+<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -r </font><font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">foo</font>
+<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -r </font><font color="#ff0000">bar</font><font color="#F3E651">=</font><font color="#ff0000">bar</font>
-<b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$foo"</font> = foo ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$bar"</font> = bar ]; <b><u><font color="#000000">then</font></u></b>
- echo ok1
- <b><u><font color="#000000">fi</font></u></b>
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> bar </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo ok1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<b><font color="#ffffff">fi</font></b>
-<b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$foo"</font> = foo ] &amp;&amp; [ <font color="#808080">"$bar"</font> == bar ]; <b><u><font color="#000000">then</font></u></b>
- echo ok2a
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo ok2a</font>
+<b><font color="#ffffff">fi</font></b>
-[ <font color="#808080">"$foo"</font> = foo ] &amp;&amp; [ <font color="#808080">"$bar"</font> == bar ] &amp;&amp; echo ok2b
+<font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo ok2b</font>
-<b><u><font color="#000000">if</font></u></b> [[ <font color="#808080">"$foo"</font> = foo &amp;&amp; <font color="#808080">"$bar"</font> == bar ]]; <b><u><font color="#000000">then</font></u></b>
- echo ok3a
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo ok3a</font>
+<b><font color="#ffffff">fi</font></b>
- [[ <font color="#808080">"$foo"</font> = foo &amp;&amp; <font color="#808080">"$bar"</font> == bar ]] &amp;&amp; echo ok3b
+<font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">]]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo ok3b</font>
-<b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">test</font></u></b> <font color="#808080">"$foo"</font> = foo &amp;&amp; <b><u><font color="#000000">test</font></u></b> <font color="#808080">"$bar"</font> = bar; <b><u><font color="#000000">then</font></u></b>
- echo ok4a
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> bar</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo ok4a</font>
+<b><font color="#ffffff">fi</font></b>
-<b><u><font color="#000000">test</font></u></b> <font color="#808080">"$foo"</font> = foo &amp;&amp; <b><u><font color="#000000">test</font></u></b> <font color="#808080">"$bar"</font> = bar &amp;&amp; echo ok4b
+<b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> bar </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo ok4b</font>
</pre>
<br />
<span>The output we get is:</span><br />
@@ -367,18 +372,18 @@ ok4b
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-<i><font color="silver"># Single line comment</font></i>
+<i><font color="#ababab"># Single line comment</font></i>
-<i><font color="silver"># These are two single line</font></i>
-<i><font color="silver"># comments one after another</font></i>
+<i><font color="#ababab"># These are two single line</font></i>
+<i><font color="#ababab"># comments one after another</font></i>
-: &lt;&lt;COMMENT
-This is another way a
-multi line comment
-could be written!
-COMMENT
+<font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">COMMENT</font>
+<font color="#ff0000">This is another way a</font>
+<font color="#ff0000">multi line comment</font>
+<font color="#ff0000">could be written</font><font color="#F3E651">!</font>
+<font color="#ff0000">COMMENT</font>
</pre>
<br />
<span>I will not demonstrate the execution of this script, as it won&#39;t print anything! It&#39;s obviously not the most pretty way of commenting on your code, but it could sometimes be handy!</span><br />
@@ -391,11 +396,11 @@ COMMENT
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-echo foo
-echo echo baz &gt;&gt; $0
-echo bar
+<font color="#ff0000">echo foo</font>
+<font color="#ff0000">echo echo baz </font><font color="#F3E651">&gt;&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$0</font>
+<font color="#ff0000">echo bar</font>
</pre>
<br />
<span>When it is run, it will do:</span><br />
@@ -429,11 +434,12 @@ echo baz
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-01-09-site-reliability-engineering-part-3.html b/gemfeed/2024-01-09-site-reliability-engineering-part-3.html
index 6df79f17..eca5cc8e 100644
--- a/gemfeed/2024-01-09-site-reliability-engineering-part-3.html
+++ b/gemfeed/2024-01-09-site-reliability-engineering-part-3.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Site Reliability Engineering - Part 3: On-Call Culture</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-01-09-site-reliability-engineering-part-3.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3.gmi">Gemini</a>
</p>
@@ -77,11 +82,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
index 0f201cc5..fefdad45 100644
--- a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
+++ b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>One reason why I love OpenBSD</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.gmi">Gemini</a>
</p>
@@ -39,8 +44,8 @@ SSFISHKISSFISHKISSFISHKISSFISHKIS SFIS
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ doas installboot sd0 <i><font color="silver"># Update the bootloader (not for every upgrade required)</font></i>
-$ doas sysupgrade <i><font color="silver"># Update all binaries (including Kernel)</font></i>
+<pre><font color="#ff0000">$ doas installboot sd0 </font><i><font color="#ababab"># Update the bootloader (not for every upgrade required)</font></i>
+<font color="#ff0000">$ doas sysupgrade </font><i><font color="#ababab"># Update all binaries (including Kernel)</font></i>
</pre>
<br />
<span><span class='inlinecode'>sysupgrade</span> downloaded and upgraded to the next release and rebooted the system. After the reboot, I run:</span><br />
@@ -51,9 +56,9 @@ $ doas sysupgrade <i><font color="silver"># Update all binaries (including Kerne
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ doas sysmerge <i><font color="silver"># Update system configuration files</font></i>
-$ doas pkg_add -u <i><font color="silver"># Update all packages</font></i>
-$ doas reboot <i><font color="silver"># Just in case, reboot one more time</font></i>
+<pre><font color="#ff0000">$ doas sysmerge </font><i><font color="#ababab"># Update system configuration files</font></i>
+<font color="#ff0000">$ doas pkg_add -u </font><i><font color="#ababab"># Update all packages</font></i>
+<font color="#ff0000">$ doas reboot </font><i><font color="#ababab"># Just in case, reboot one more time</font></i>
</pre>
<br />
<span>That&#39;s it! Took me around 5 minutes in total! No issues, only these few comands, only 5 minutes! It just works! No problems, no conflicts, no tons (actually none) config file merge conflicts.</span><br />
@@ -88,11 +93,12 @@ $ doas reboot <i><font color="silver"># Just in case, reboot one more time</font
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.html b/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.html
index fc4904ab..ee690ab4 100644
--- a/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.html
+++ b/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>From `babylon5.buetow.org` to `*.buetow.cloud`</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.gmi">Gemini</a>
</p>
@@ -197,11 +202,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html
index 29e335bc..cd658d33 100644
--- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html
+++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>A fine Fyne Android app for quickly logging ideas programmed in Go</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi">Gemini</a>
</p>
@@ -74,11 +79,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html
index ed9f17dd..0eeff480 100644
--- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html
+++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>KISS high-availability with OpenBSD</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi">Gemini</a>
</p>
@@ -98,38 +103,38 @@ _____|_:_:_| (o)-(o) |_:_:_|--&#39;`-. ,--. ksh under-water (((\&#39;/
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/bin/ksh</font></i>
+<pre><i><font color="#ababab">#!/bin/ksh</font></i>
-ZONES_DIR=/var/nsd/zones/master/
-DEFAULT_MASTER=fishfinger.buetow.org
-DEFAULT_STANDBY=blowfish.buetow.org
+<font color="#ff0000">ZONES_DIR</font><font color="#F3E651">=</font><font color="#ff0000">/var/nsd/zones/master</font><font color="#F3E651">/</font>
+<font color="#ff0000">DEFAULT_MASTER</font><font color="#F3E651">=</font><font color="#ff0000">fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">DEFAULT_STANDBY</font><font color="#F3E651">=</font><font color="#ff0000">blowfish</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-determine_master_and_standby () {
- <b><u><font color="#000000">local</font></u></b> master=$DEFAULT_MASTER
- <b><u><font color="#000000">local</font></u></b> standby=$DEFAULT_STANDBY
+<font color="#7bc710">determine_master_and_standby ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">master</font><font color="#F3E651">=</font><font color="#ff0000">$DEFAULT_MASTER</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">standby</font><font color="#F3E651">=</font><font color="#ff0000">$DEFAULT_STANDBY</font>
- .
- .
- .
-
- <b><u><font color="#000000">local</font></u></b> -i health_ok=<font color="#000000">1</font>
- <b><u><font color="#000000">if</font></u></b> ! ftp -<font color="#000000">4</font> -o - https://$master/index.txt | grep -q <font color="#808080">"Welcome to $master"</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"https://$master/index.txt IPv4 health check failed"</font>
- health_ok=<font color="#000000">0</font>
- <b><u><font color="#000000">elif</font></u></b> ! ftp -<font color="#000000">6</font> -o - https://$master/index.txt | grep -q <font color="#808080">"Welcome to $master"</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"https://$master/index.txt IPv6 health check failed"</font>
- health_ok=<font color="#000000">0</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ $health_ok -eq <font color="#000000">0</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">local</font></u></b> tmp=$master
- master=$standby
- standby=$tmp
- <b><u><font color="#000000">fi</font></u></b>
+<font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">health_ok</font><font color="#F3E651">=</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> ftp -</font><font color="#bb00ff">4</font><font color="#ff0000"> -o - https</font><font color="#F3E651">://</font><font color="#ff0000">$master</font><font color="#ff0000">/index</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q </font><font color="#bb00ff">"Welcome to $master"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"https://$master/index.txt IPv4 health check failed"</font>
+<font color="#ff0000"> </font><font color="#ff0000">health_ok</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">elif</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> ftp -</font><font color="#bb00ff">6</font><font color="#ff0000"> -o - https</font><font color="#F3E651">://</font><font color="#ff0000">$master</font><font color="#ff0000">/index</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q </font><font color="#bb00ff">"Welcome to $master"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"https://$master/index.txt IPv6 health check failed"</font>
+<font color="#ff0000"> </font><font color="#ff0000">health_ok</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">$health_ok</font><font color="#ff0000"> -eq </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">tmp</font><font color="#F3E651">=</font><font color="#ff0000">$master</font>
+<font color="#ff0000"> </font><font color="#ff0000">master</font><font color="#F3E651">=</font><font color="#ff0000">$standby</font>
+<font color="#ff0000"> </font><font color="#ff0000">standby</font><font color="#F3E651">=</font><font color="#ff0000">$tmp</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- .
- .
- .
-}
+<font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>The failover scripts looks for the <span class='inlinecode'> ; Enable failover</span> string in the DNS zone files and swaps the <span class='inlinecode'>A</span> and <span class='inlinecode'>AAAA</span> records of the DNS entries accordingly:</span><br />
@@ -138,42 +143,42 @@ determine_master_and_standby () {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>fishfinger$ grep failover /var/nsd/zones/master/foo.zone.zone
- <font color="#000000">300</font> IN A <font color="#000000">46.23</font>.<font color="#000000">94.99</font> ; Enable failover
- <font color="#000000">300</font> IN AAAA 2a03:<font color="#000000">6000</font>:6f67:<font color="#000000">624</font>::<font color="#000000">99</font> ; Enable failover
-www <font color="#000000">300</font> IN A <font color="#000000">46.23</font>.<font color="#000000">94.99</font> ; Enable failover
-www <font color="#000000">300</font> IN AAAA 2a03:<font color="#000000">6000</font>:6f67:<font color="#000000">624</font>::<font color="#000000">99</font> ; Enable failover
-standby <font color="#000000">300</font> IN A <font color="#000000">23.88</font>.<font color="#000000">35.144</font> ; Enable failover
-standby <font color="#000000">300</font> IN AAAA 2a01:4f8:c17:20f1::<font color="#000000">42</font> ; Enable failover
+<pre><font color="#ff0000">fishfinger$ grep failover /var/nsd/zones/master/foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font>
+<font color="#ff0000"> </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA 2a03</font><font color="#F3E651">:</font><font color="#bb00ff">6000</font><font color="#F3E651">:</font><font color="#ff0000">6f67</font><font color="#F3E651">:</font><font color="#bb00ff">624</font><font color="#F3E651">::</font><font color="#bb00ff">99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font>
+<font color="#ff0000">www </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font>
+<font color="#ff0000">www </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA 2a03</font><font color="#F3E651">:</font><font color="#bb00ff">6000</font><font color="#F3E651">:</font><font color="#ff0000">6f67</font><font color="#F3E651">:</font><font color="#bb00ff">624</font><font color="#F3E651">::</font><font color="#bb00ff">99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font>
+<font color="#ff0000">standby </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">23.88</font><font color="#F3E651">.</font><font color="#bb00ff">35.144</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font>
+<font color="#ff0000">standby </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA 2a01</font><font color="#F3E651">:</font><font color="#ff0000">4f8</font><font color="#F3E651">:</font><font color="#ff0000">c17</font><font color="#F3E651">:</font><font color="#ff0000">20f1</font><font color="#F3E651">::</font><font color="#bb00ff">42</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>transform () {
- sed -E <font color="#808080">'</font>
-<font color="#808080"> /IN A .*; Enable failover/ {</font>
-<font color="#808080"> /^standby/! {</font>
-<font color="#808080"> s/^(.*) 300 IN A (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN A '</font>$(cat /var/nsd/run/master_a)<font color="#808080">' ; </font>\3<font color="#808080">/;</font>
-<font color="#808080"> }</font>
-<font color="#808080"> /^standby/ {</font>
-<font color="#808080"> s/^(.*) 300 IN A (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN A '</font>$(cat /var/nsd/run/standby_a)<font color="#808080">' ; </font>\3<font color="#808080">/;</font>
-<font color="#808080"> }</font>
-<font color="#808080"> }</font>
-<font color="#808080"> /IN AAAA .*; Enable failover/ {</font>
-<font color="#808080"> /^standby/! {</font>
-<font color="#808080"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN AAAA '</font>$(cat /var/nsd/run/master_aaaa)<font color="#808080">' ; </font>\3<font color="#808080">/;</font>
-<font color="#808080"> }</font>
-<font color="#808080"> /^standby/ {</font>
-<font color="#808080"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN AAAA '</font>$(cat /var/nsd/run/standby_aaaa)<font color="#808080">' ; </font>\3<font color="#808080">/;</font>
-<font color="#808080"> }</font>
-<font color="#808080"> }</font>
-<font color="#808080"> / ; serial/ {</font>
-<font color="#808080"> s/^( +) ([0-9]+) .*; (.*)/</font>\1<font color="#808080"> '</font>$(date +%s)<font color="#808080">' ; </font>\3<font color="#808080">/;</font>
-<font color="#808080"> }</font>
-<font color="#808080"> '</font>
-}
+<pre><font color="#7bc710">transform ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> sed -E </font><font color="#bb00ff">'</font>
+<font color="#bb00ff"> /IN A .*; Enable failover/ {</font>
+<font color="#bb00ff"> /^standby/! {</font>
+<font color="#bb00ff"> s/^(.*) 300 IN A (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN A '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/master_a</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> /^standby/ {</font>
+<font color="#bb00ff"> s/^(.*) 300 IN A (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN A '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/standby_a</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> /IN AAAA .*; Enable failover/ {</font>
+<font color="#bb00ff"> /^standby/! {</font>
+<font color="#bb00ff"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN AAAA '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/master_aaaa</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> /^standby/ {</font>
+<font color="#bb00ff"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN AAAA '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/standby_aaaa</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> / ; serial/ {</font>
+<font color="#bb00ff"> s/^( +) ([0-9]+) .*; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> '</font><font color="#ff0000">$(</font><font color="#ff0000">date </font><font color="#F3E651">+%</font><font color="#ff0000">s</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> '</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>After the failover, the script reloads <span class='inlinecode'>nsd</span> and performs a sanity check to see if DNS still works. If not, a rollback will be performed:</span><br />
@@ -182,48 +187,48 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#! Race condition !#</font></i>
-
-<b><u><font color="#000000">if</font></u></b> [ -f $zone_file.bak ]; <b><u><font color="#000000">then</font></u></b>
- mv $zone_file.bak $zone_file
-<b><u><font color="#000000">fi</font></u></b>
+<pre><i><font color="#ababab">#! Race condition !#</font></i>
+<font color="#ff0000"> </font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> mv </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak </font><font color="#ff0000">$zone_file</font>
+<b><font color="#ffffff">fi</font></b>
-cat $zone_file | transform &gt; $zone_file.new.tmp
+<font color="#ff0000">cat </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> transform </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font>
-grep -v <font color="#808080">' ; serial'</font> $zone_file.new.tmp &gt; $zone_file.new.noserial.tmp
-grep -v <font color="#808080">' ; serial'</font> $zone_file &gt; $zone_file.old.noserial.tmp
+<font color="#ff0000">grep -v </font><font color="#bb00ff">' ; serial'</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp</font>
+<font color="#ff0000">grep -v </font><font color="#bb00ff">' ; serial'</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">old</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp</font>
-echo <font color="#808080">"Has zone $zone_file changed?"</font>
-<b><u><font color="#000000">if</font></u></b> diff -u $zone_file.old.noserial.tmp $zone_file.new.noserial.tmp; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"The zone $zone_file hasn't changed"</font>
- rm $zone_file.*.tmp
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">0</font>
-<b><u><font color="#000000">fi</font></u></b>
+<font color="#ff0000">echo </font><font color="#bb00ff">"Has zone $zone_file changed?"</font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> diff -u </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">old</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"The zone $zone_file hasn't changed"</font>
+<font color="#ff0000"> rm </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.*.</font><font color="#ff0000">tmp</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<b><font color="#ffffff">fi</font></b>
-cp $zone_file $zone_file.bak
-mv $zone_file.new.tmp $zone_file
-rm $zone_file.*.tmp
-echo <font color="#808080">"Reloading nsd"</font>
-nsd-control reload
+<font color="#ff0000">cp </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak</font>
+<font color="#ff0000">mv </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#ff0000">$zone_file</font>
+<font color="#ff0000">rm </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.*.</font><font color="#ff0000">tmp</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"Reloading nsd"</font>
+<font color="#ff0000">nsd-control reload</font>
-<b><u><font color="#000000">if</font></u></b> ! zone_is_ok $zone; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Rolling back $zone_file changes"</font>
- cp $zone_file $zone_file.invalid
- mv $zone_file.bak $zone_file
- echo <font color="#808080">"Reloading nsd"</font>
- nsd-control reload
- zone_is_ok $zone
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">3</font>
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> zone_is_ok </font><font color="#ff0000">$zone</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Rolling back $zone_file changes"</font>
+<font color="#ff0000"> cp </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">invalid</font>
+<font color="#ff0000"> mv </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak </font><font color="#ff0000">$zone_file</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Reloading nsd"</font>
+<font color="#ff0000"> nsd-control reload</font>
+<font color="#ff0000"> zone_is_ok </font><font color="#ff0000">$zone</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">3</font>
+<b><font color="#ffffff">fi</font></b>
-<b><u><font color="#000000">for</font></u></b> cleanup <b><u><font color="#000000">in</font></u></b> invalid bak; <b><u><font color="#000000">do</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ -f $zone_file.$cleanup ]; <b><u><font color="#000000">then</font></u></b>
- rm $zone_file.$cleanup
- <b><u><font color="#000000">fi</font></u></b>
-<b><u><font color="#000000">done</font></u></b>
+<b><font color="#ffffff">for</font></b><font color="#ff0000"> cleanup </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> invalid bak</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">$cleanup</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> rm </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">$cleanup</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<b><font color="#ffffff">done</font></b>
-echo <font color="#808080">"Failover of zone $zone to $MASTER completed"</font>
-<b><u><font color="#000000">return</font></u></b> <font color="#000000">1</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"Failover of zone $zone to $MASTER completed"</font>
+<b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
</pre>
<br />
<span>A non-zero return code (here, 3 when a rollback and 1 when a DNS failover was performed) will cause CRON to send an E-Mail with the whole script output.</span><br />
@@ -280,13 +285,13 @@ echo <font color="#808080">"Failover of zone $zone to $MASTER completed"</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Weekly auto-failover for Let's Encrypt automation</font></i>
-<b><u><font color="#000000">local</font></u></b> -i -r week_of_the_year=$(date +%U)
-<b><u><font color="#000000">if</font></u></b> [ $(( week_of_the_year % <font color="#000000">2</font> )) -eq <font color="#000000">0</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">local</font></u></b> tmp=$master
- master=$standby
- standby=$tmp
-<b><u><font color="#000000">fi</font></u></b>
+<pre><i><font color="#ababab"># Weekly auto-failover for Let's Encrypt automation</font></i>
+<b><font color="#ffffff">local</font></b><font color="#ff0000"> -i -r </font><font color="#ff0000">week_of_the_year</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">date </font><font color="#F3E651">+%</font><font color="#ff0000">U</font><font color="#F3E651">)</font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">$(</font><font color="#F3E651">(</font><font color="#ff0000"> week_of_the_year </font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#F3E651">))</font><font color="#ff0000"> -eq </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">tmp</font><font color="#F3E651">=</font><font color="#ff0000">$master</font>
+<font color="#ff0000"> </font><font color="#ff0000">master</font><font color="#F3E651">=</font><font color="#ff0000">$standby</font>
+<font color="#ff0000"> </font><font color="#ff0000">standby</font><font color="#F3E651">=</font><font color="#ff0000">$tmp</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>This way, a DNS failover is performed weekly so that the ACME automation can update the Let&#39;s Encrypt certificates (for master and standby) before they expire on each VM.</span><br />
@@ -349,11 +354,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-05-01-slow-productivity-book-notes.html b/gemfeed/2024-05-01-slow-productivity-book-notes.html
index 8ab1182a..c7641815 100644
--- a/gemfeed/2024-05-01-slow-productivity-book-notes.html
+++ b/gemfeed/2024-05-01-slow-productivity-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'Slow Productivity' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-05-01-slow-productivity-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes.gmi">Gemini</a>
</p>
@@ -171,11 +176,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.html b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.html
index 7889e2b9..31974467 100644
--- a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.html
+++ b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Projects I currently don't have time for</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi">Gemini</a>
</p>
@@ -220,12 +225,12 @@ Art by Laura Brown
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>Cluster :UK, :uk01 <b><u><font color="#000000">do</font></u></b>
- Customer.C1A1.segments.volumes.each <b><u><font color="#000000">do</font></u></b> |volume|
- puts volume.usage_stats
- volume.move_off! <b><u><font color="#000000">if</font></u></b> volume.over_subscribed?
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">Cluster </font><font color="#F3E651">:</font><font color="#ff0000">UK</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">uk01 </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> Customer</font><font color="#F3E651">.</font><font color="#ff0000">C1A1</font><font color="#F3E651">.</font><font color="#ff0000">segments</font><font color="#F3E651">.</font><font color="#ff0000">volumes</font><font color="#F3E651">.</font><font color="#ff0000">each </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">volume</font><font color="#F3E651">|</font>
+<font color="#ff0000"> puts volume</font><font color="#F3E651">.</font><font color="#ff0000">usage_stats</font>
+<font color="#ff0000"> volume</font><font color="#F3E651">.</font><font color="#ff0000">move_off! </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> volume</font><font color="#F3E651">.</font><font color="#ff0000">over_subscribed?</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>I am abandoning this project because my workplace has stopped the annual pet project competition, and I have other more important projects to work on at the moment.</span><br />
@@ -327,11 +332,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.html b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.html
index a64fd737..f6e99302 100644
--- a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.html
+++ b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Terminal multiplexing with `tmux` - Z-Shell edition</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.gmi">Gemini</a>
</p>
@@ -90,13 +95,13 @@ jgs `-=========-`()
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">alias</font></u></b> tm=tmux
-<b><u><font color="#000000">alias</font></u></b> tl=<font color="#808080">'tmux list-sessions'</font>
-<b><u><font color="#000000">alias</font></u></b> tn=tmux::new
-<b><u><font color="#000000">alias</font></u></b> ta=tmux::attach
-<b><u><font color="#000000">alias</font></u></b> tx=tmux::remote
-<b><u><font color="#000000">alias</font></u></b> ts=tmux::search
-<b><u><font color="#000000">alias</font></u></b> tssh=tmux::cluster_ssh
+<pre><b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tm</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tl</font><font color="#F3E651">=</font><font color="#bb00ff">'tmux list-sessions'</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tn</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">new</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ta</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">attach</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tx</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">remote</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ts</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">search</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tssh</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">cluster_ssh</font>
</pre>
<br />
<span>Note all <span class='inlinecode'>tmux::...</span>; those are custom shell functions doing certain things, and they aren&#39;t part of the Tmux distribution. But let&#39;s run through every alias one by one. </span><br />
@@ -111,23 +116,23 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Create new session and if already exists attach to it</font></i>
-tmux::new () {
- <b><u><font color="#000000">readonly</font></u></b> session=$1
- <b><u><font color="#000000">local</font></u></b> date=date
- <b><u><font color="#000000">if</font></u></b> where gdate &amp;&gt;/dev/null; <b><u><font color="#000000">then</font></u></b>
- date=gdate
- <b><u><font color="#000000">fi</font></u></b>
+<pre><i><font color="#ababab"># Create new session and if already exists attach to it</font></i>
+<font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">new ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#ff0000"> </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">date</font><font color="#F3E651">=</font><font color="#ff0000">date</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> where gdate </font><font color="#F3E651">&amp;&gt;</font><font color="#ff0000">/dev/null</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">date</font><font color="#F3E651">=</font><font color="#ff0000">gdate</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- tmux::cleanup_default
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$session"</font> ]; <b><u><font color="#000000">then</font></u></b>
- tmux::new T$($date +%s)
- <b><u><font color="#000000">else</font></u></b>
- tmux new-session -d -s $session
- tmux -<font color="#000000">2</font> attach-session -t $session || tmux -<font color="#000000">2</font> switch-client -t $session
- <b><u><font color="#000000">fi</font></u></b>
-}
-<b><u><font color="#000000">alias</font></u></b> tn=tmux::new
+<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">cleanup_default</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$session"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">new T</font><font color="#ff0000">$($date</font><font color="#ff0000"> </font><font color="#F3E651">+%</font><font color="#ff0000">s</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> tmux new-session -d -s </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> attach-session -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> switch-client -t </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tn</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">new</font>
</pre>
<br />
<span>There is a lot going on here. Let&#39;s have a detailed look at what it is doing. As a note, the function relies on GNU Date, so MacOS is looking for the <span class='inlinecode'>gdate</span> commands to be available. Otherwise, it will fall back to <span class='inlinecode'>date</span>. You need to install GNU Date for Mac, as it isn&#39;t installed by default there. As I use Fedora Linux on my personal Laptop and a MacBook for work, I have to make it work for both.</span><br />
@@ -142,14 +147,14 @@ tmux::new () {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::cleanup_default () {
- <b><u><font color="#000000">local</font></u></b> s
- tmux list-sessions | grep <font color="#808080">'^T.*: '</font> | grep -F -v attached |
- cut -d: -f<font color="#000000">1</font> | <b><u><font color="#000000">while</font></u></b> <b><u><font color="#000000">read</font></u></b> -r s; <b><u><font color="#000000">do</font></u></b>
- echo <font color="#808080">"Killing $s"</font>
- tmux kill-session -t <font color="#808080">"$s"</font>
- <b><u><font color="#000000">done</font></u></b>
-}
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">cleanup_default ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> s</font>
+<font color="#ff0000"> tmux list-sessions </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">'^T.*: '</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep -F -v attached </font><font color="#F3E651">|</font>
+<font color="#ff0000"> cut -d</font><font color="#F3E651">:</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -r s</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Killing $s"</font>
+<font color="#ff0000"> tmux kill-session -t </font><font color="#bb00ff">"$s"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>The cleanup function kills all open Tmux sessions that haven&#39;t been renamed properly yet—but only if they aren&#39;t attached (e.g., don&#39;t run in the foreground in any terminal). Cleaning them up automatically keeps my Tmux sessions as neat and tidy as possible. </span><br />
@@ -166,16 +171,16 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::attach () {
- <b><u><font color="#000000">readonly</font></u></b> session=$1
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">attach ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#ff0000"> </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$session"</font> ]; <b><u><font color="#000000">then</font></u></b>
- tmux attach-session || tmux::new
- <b><u><font color="#000000">else</font></u></b>
- tmux attach-session -t $session || tmux::new $session
- <b><u><font color="#000000">fi</font></u></b>
-}
-<b><u><font color="#000000">alias</font></u></b> ta=tmux::attach
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$session"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> tmux attach-session </font><font color="#F3E651">||</font><font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">new</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> tmux attach-session -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">new </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ta</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">attach</font>
</pre>
<br />
<span>If no session is specified (as the argument of the function), it will try to attach to the first open session. If no Tmux server is running, it will create a new one with <span class='inlinecode'>tmux::new</span>. Otherwise, with a session name given as the argument, it will attach to it. If unsuccessful (e.g., the session doesn&#39;t exist), it will be created and attached to.</span><br />
@@ -188,12 +193,12 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::remote () {
- <b><u><font color="#000000">readonly</font></u></b> server=$1
- tmux new -s $server <font color="#808080">"ssh -t $server 'tmux attach-session || tmux'"</font> || \
- tmux attach-session -d -t $server
-}
-<b><u><font color="#000000">alias</font></u></b> tr=tmux::remote
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">remote ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#ff0000"> </font><font color="#ff0000">server</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
+<font color="#ff0000"> tmux new -s </font><font color="#ff0000">$server</font><font color="#ff0000"> </font><font color="#bb00ff">"ssh -t $server 'tmux attach-session || tmux'"</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> tmux attach-session -d -t </font><font color="#ff0000">$server</font>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tr</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">remote</font>
</pre>
<br />
<h3 style='display: inline' id='change-of-the-tmux-prefix-for-better-nesting'>Change of the Tmux prefix for better nesting</h3><br />
@@ -216,15 +221,15 @@ set-option -g prefix C-g
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::search () {
- <b><u><font color="#000000">local</font></u></b> -r session=$(tmux list-sessions | fzf | cut -d: -f<font color="#000000">1</font>)
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$TMUX"</font> ]; <b><u><font color="#000000">then</font></u></b>
- tmux attach-session -t $session
- <b><u><font color="#000000">else</font></u></b>
- tmux switch -t $session
- <b><u><font color="#000000">fi</font></u></b>
-}
-<b><u><font color="#000000">alias</font></u></b> ts=tmux::search
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">search ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">tmux list-sessions </font><font color="#F3E651">|</font><font color="#ff0000"> fzf </font><font color="#F3E651">|</font><font color="#ff0000"> cut -d</font><font color="#F3E651">:</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$TMUX"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> tmux attach-session -t </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> tmux switch -t </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ts</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">search</font>
</pre>
<br />
<span>All it does is list all currently open sessions in <span class='inlinecode'>fzf</span>, where one of them can be searched and selected through fuzzy find, and then either switch (if already inside a session) to the other session or attach to the other session (if not yet in Tmux).</span><br />
@@ -251,15 +256,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::cluster_ssh () {
- <b><u><font color="#000000">if</font></u></b> [ -f <font color="#808080">"$1"</font> ]; <b><u><font color="#000000">then</font></u></b>
- tmux::tssh_from_file $1
- <b><u><font color="#000000">return</font></u></b>
- <b><u><font color="#000000">fi</font></u></b>
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">cluster_ssh ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$1"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">tssh_from_file </font><font color="#ff0000">$1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- tmux::tssh_from_argument $@
-}
-<b><u><font color="#000000">alias</font></u></b> tssh=tmux::cluster_ssh
+<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">tssh_from_argument </font><font color="#ff0000">$@</font>
+<font color="#ff0000">}</font>
+<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tssh</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">cluster_ssh</font>
</pre>
<br />
<span>This function is just a wrapper around the more complex <span class='inlinecode'>tmux::tssh_from_file</span> and <span class='inlinecode'>tmux::tssh_from_argument</span> functions, as you have learned already. Most of the magic happens there.</span><br />
@@ -272,23 +277,23 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::tssh_from_argument () {
- <b><u><font color="#000000">local</font></u></b> -r session=$1; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> first_server=$1; <b><u><font color="#000000">shift</font></u></b>
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">tssh_from_argument ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">first_server</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
- tmux new-session -d -s $session <font color="#808080">"ssh -t $first_server"</font>
- <b><u><font color="#000000">if</font></u></b> ! tmux list-session | grep <font color="#808080">"^$session:"</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Could not create session $session"</font>
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">2</font>
- <b><u><font color="#000000">fi</font></u></b>
+<font color="#ff0000"> tmux new-session -d -s </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#bb00ff">"ssh -t $first_server"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> tmux list-session </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">"^$session:"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Could not create session $session"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- <b><u><font color="#000000">for</font></u></b> server <b><u><font color="#000000">in</font></u></b> <font color="#808080">"${@[@]}"</font>; <b><u><font color="#000000">do</font></u></b>
- tmux split-window -t $session <font color="#808080">"tmux select-layout tiled; ssh -t $server"</font>
- <b><u><font color="#000000">done</font></u></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> server </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#bb00ff">"${@[@]}"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> tmux split-window -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#bb00ff">"tmux select-layout tiled; ssh -t $server"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
- tmux setw -t $session synchronize-panes on
- tmux -<font color="#000000">2</font> attach-session -t $session | tmux -<font color="#000000">2</font> switch-client -t $session
-}
+<font color="#ff0000"> tmux setw -t </font><font color="#ff0000">$session</font><font color="#ff0000"> synchronize-panes on</font>
+<font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> attach-session -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> switch-client -t </font><font color="#ff0000">$session</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>It expects at least two arguments. The first argument is the session name to create for the clustered SSH session. All other arguments are server hostnames or FQDNs to which to connect. The first one is used to make the initial session. All remaining ones are added to that session with <span class='inlinecode'>tmux split-window -t $session...</span>. At the end, we enable synchronized panes by default, so whenever you type, the commands will be sent to every SSH connection, thus allowing the neat ClusterSSH feature to run commands on multiple servers simultaneously. Once done, we attach (or switch, if already in Tmux) to it.</span><br />
@@ -308,12 +313,12 @@ bind-key P setw synchronize-panes on
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>tmux::tssh_from_file () {
- <b><u><font color="#000000">local</font></u></b> -r serverlist=$1; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> -r session=$(basename $serverlist | cut -d. -f<font color="#000000">1</font>)
+<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">tssh_from_file ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">serverlist</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">basename </font><font color="#ff0000">$serverlist</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> cut -d</font><font color="#F3E651">.</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#F3E651">)</font>
- tmux::tssh_from_argument $session $(awk <font color="#808080">'{ print $1} '</font> $serverlist | sed <font color="#808080">'s/.lan./.lan/g'</font>)
-}
+<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">tssh_from_argument </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#ff0000">$(</font><font color="#ff0000">awk </font><font color="#bb00ff">'{ print $1} '</font><font color="#ff0000"> </font><font color="#ff0000">$serverlist</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sed </font><font color="#bb00ff">'s/.lan./.lan/g'</font><font color="#F3E651">)</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<h3 style='display: inline' id='tssh-examples'><span class='inlinecode'>tssh</span> examples</h3><br />
@@ -444,11 +449,12 @@ bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "tmux.conf re
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-07-05-random-weird-things.html b/gemfeed/2024-07-05-random-weird-things.html
index 9645d261..b5d99539 100644
--- a/gemfeed/2024-07-05-random-weird-things.html
+++ b/gemfeed/2024-07-05-random-weird-things.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Random Weird Things - Part Ⅰ</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-07-05-random-weird-things.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-07-05-random-weird-things.gmi">Gemini</a>
</p>
@@ -56,52 +61,52 @@ WHOA!! ( o.o )
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>❯ traceroute -m <font color="#000000">60</font> bad.horse
-traceroute to bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.157</font>), <font color="#000000">60</font> hops max, <font color="#000000">60</font> byte packets
- <font color="#000000">1</font> _gateway (<font color="#000000">192.168</font>.<font color="#000000">1.1</font>) <font color="#000000">5.237</font> ms <font color="#000000">5.264</font> ms <font color="#000000">6.009</font> ms
- <font color="#000000">2</font> <font color="#000000">77</font>-<font color="#000000">85</font>-<font color="#000000">0</font>-<font color="#000000">2</font>.ip.btc-net.<b><u><font color="#000000">bg</font></u></b> (<font color="#000000">77.85</font>.<font color="#000000">0.2</font>) <font color="#000000">8.753</font> ms <font color="#000000">7.112</font> ms <font color="#000000">8.336</font> ms
- <font color="#000000">3</font> <font color="#000000">212</font>-<font color="#000000">39</font>-<font color="#000000">69</font>-<font color="#000000">103</font>.ip.btc-net.<b><u><font color="#000000">bg</font></u></b> (<font color="#000000">212.39</font>.<font color="#000000">69.103</font>) <font color="#000000">9.434</font> ms <font color="#000000">9.268</font> ms <font color="#000000">9.986</font> ms
- <font color="#000000">4</font> * * *
- <font color="#000000">5</font> xe-<font color="#000000">1</font>-<font color="#000000">2</font>-<font color="#000000">0</font>.mpr1.fra4.de.above.net (<font color="#000000">80.81</font>.<font color="#000000">194.26</font>) <font color="#000000">39.812</font> ms <font color="#000000">39.030</font> ms <font color="#000000">39.772</font> ms
- <font color="#000000">6</font> * ae12.cs1.fra6.de.eth.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">26.172</font>) <font color="#000000">123.576</font> ms *
- <font color="#000000">7</font> * * *
- <font color="#000000">8</font> * * *
- <font color="#000000">9</font> ae10.cr1.lhr15.uk.eth.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">29.17</font>) <font color="#000000">119.097</font> ms <font color="#000000">119.478</font> ms <font color="#000000">120.767</font> ms
-<font color="#000000">10</font> ae2.cr1.lhr11.uk.zip.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">24.140</font>) <font color="#000000">120.398</font> ms <font color="#000000">121.147</font> ms <font color="#000000">120.948</font> ms
-<font color="#000000">11</font> * * *
-<font color="#000000">12</font> ae25.mpr1.yyz1.ca.zip.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">23.117</font>) <font color="#000000">145.072</font> ms * <font color="#000000">181.773</font> ms
-<font color="#000000">13</font> ae5.mpr1.tor3.ca.zip.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">23.118</font>) <font color="#000000">168.239</font> ms <font color="#000000">168.158</font> ms <font color="#000000">168.137</font> ms
-<font color="#000000">14</font> <font color="#000000">64.124</font>.<font color="#000000">217.237</font>.IDIA-<font color="#000000">265104</font>-ZYO.zip.zayo.com (<font color="#000000">64.124</font>.<font color="#000000">217.237</font>) <font color="#000000">168.026</font> ms <font color="#000000">167.999</font> ms <font color="#000000">165.451</font> ms
-<font color="#000000">15</font> * * *
-<font color="#000000">16</font> t00.toroc1.on.ca.sn11.net (<font color="#000000">162.252</font>.<font color="#000000">204.2</font>) <font color="#000000">131.598</font> ms <font color="#000000">131.308</font> ms <font color="#000000">131.482</font> ms
-<font color="#000000">17</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.130</font>) <font color="#000000">131.430</font> ms <font color="#000000">145.914</font> ms <font color="#000000">130.514</font> ms
-<font color="#000000">18</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.131</font>) <font color="#000000">136.634</font> ms <font color="#000000">145.295</font> ms <font color="#000000">135.631</font> ms
-<font color="#000000">19</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.132</font>) <font color="#000000">139.158</font> ms <font color="#000000">148.363</font> ms <font color="#000000">138.934</font> ms
-<font color="#000000">20</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.133</font>) <font color="#000000">145.395</font> ms <font color="#000000">148.054</font> ms <font color="#000000">147.140</font> ms
-<font color="#000000">21</font> he.rides.across.the.nation (<font color="#000000">162.252</font>.<font color="#000000">205.134</font>) <font color="#000000">149.687</font> ms <font color="#000000">147.731</font> ms <font color="#000000">150.135</font> ms
-<font color="#000000">22</font> the.thoroughbred.of.sin (<font color="#000000">162.252</font>.<font color="#000000">205.135</font>) <font color="#000000">156.644</font> ms <font color="#000000">155.155</font> ms <font color="#000000">156.447</font> ms
-<font color="#000000">23</font> he.got.the.application (<font color="#000000">162.252</font>.<font color="#000000">205.136</font>) <font color="#000000">161.187</font> ms <font color="#000000">162.318</font> ms <font color="#000000">162.674</font> ms
-<font color="#000000">24</font> that.you.just.sent.<b><u><font color="#000000">in</font></u></b> (<font color="#000000">162.252</font>.<font color="#000000">205.137</font>) <font color="#000000">166.763</font> ms <font color="#000000">166.675</font> ms <font color="#000000">164.243</font> ms
-<font color="#000000">25</font> it.needs.evaluation (<font color="#000000">162.252</font>.<font color="#000000">205.138</font>) <font color="#000000">172.073</font> ms <font color="#000000">171.919</font> ms <font color="#000000">171.390</font> ms
-<font color="#000000">26</font> so.<b><u><font color="#000000">let</font></u></b>.the.games.begin (<font color="#000000">162.252</font>.<font color="#000000">205.139</font>) <font color="#000000">175.386</font> ms <font color="#000000">174.180</font> ms <font color="#000000">175.965</font> ms
-<font color="#000000">27</font> a.heinous.crime (<font color="#000000">162.252</font>.<font color="#000000">205.140</font>) <font color="#000000">180.857</font> ms <font color="#000000">180.766</font> ms <font color="#000000">180.192</font> ms
-<font color="#000000">28</font> a.show.of.force (<font color="#000000">162.252</font>.<font color="#000000">205.141</font>) <font color="#000000">187.942</font> ms <font color="#000000">186.669</font> ms <font color="#000000">186.986</font> ms
-<font color="#000000">29</font> a.murder.would.be.nice.of.course (<font color="#000000">162.252</font>.<font color="#000000">205.142</font>) <font color="#000000">191.349</font> ms <font color="#000000">191.939</font> ms <font color="#000000">190.740</font> ms
-<font color="#000000">30</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.143</font>) <font color="#000000">195.425</font> ms <font color="#000000">195.716</font> ms <font color="#000000">196.186</font> ms
-<font color="#000000">31</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.144</font>) <font color="#000000">199.238</font> ms <font color="#000000">200.620</font> ms <font color="#000000">200.318</font> ms
-<font color="#000000">32</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.145</font>) <font color="#000000">207.554</font> ms <font color="#000000">206.729</font> ms <font color="#000000">205.201</font> ms
-<font color="#000000">33</font> he-s.bad (<font color="#000000">162.252</font>.<font color="#000000">205.146</font>) <font color="#000000">211.087</font> ms <font color="#000000">211.649</font> ms <font color="#000000">211.712</font> ms
-<font color="#000000">34</font> the.evil.league.of.evil (<font color="#000000">162.252</font>.<font color="#000000">205.147</font>) <font color="#000000">212.657</font> ms <font color="#000000">216.777</font> ms <font color="#000000">216.589</font> ms
-<font color="#000000">35</font> is.watching.so.beware (<font color="#000000">162.252</font>.<font color="#000000">205.148</font>) <font color="#000000">220.911</font> ms <font color="#000000">220.326</font> ms <font color="#000000">221.961</font> ms
-<font color="#000000">36</font> the.grade.that.you.receive (<font color="#000000">162.252</font>.<font color="#000000">205.149</font>) <font color="#000000">225.384</font> ms <font color="#000000">225.696</font> ms <font color="#000000">225.640</font> ms
-<font color="#000000">37</font> will.be.your.last.we.swear (<font color="#000000">162.252</font>.<font color="#000000">205.150</font>) <font color="#000000">232.312</font> ms <font color="#000000">230.989</font> ms <font color="#000000">230.919</font> ms
-<font color="#000000">38</font> so.make.the.bad.horse.gleeful (<font color="#000000">162.252</font>.<font color="#000000">205.151</font>) <font color="#000000">235.761</font> ms <font color="#000000">235.291</font> ms <font color="#000000">235.585</font> ms
-<font color="#000000">39</font> or.he-ll.make.you.his.mare (<font color="#000000">162.252</font>.<font color="#000000">205.152</font>) <font color="#000000">241.350</font> ms <font color="#000000">239.407</font> ms <font color="#000000">238.394</font> ms
-<font color="#000000">40</font> o_o (<font color="#000000">162.252</font>.<font color="#000000">205.153</font>) <font color="#000000">246.154</font> ms <font color="#000000">247.650</font> ms <font color="#000000">247.110</font> ms
-<font color="#000000">41</font> you-re.saddled.up (<font color="#000000">162.252</font>.<font color="#000000">205.154</font>) <font color="#000000">250.925</font> ms <font color="#000000">250.401</font> ms <font color="#000000">250.619</font> ms
-<font color="#000000">42</font> there-s.no.recourse (<font color="#000000">162.252</font>.<font color="#000000">205.155</font>) <font color="#000000">256.071</font> ms <font color="#000000">251.154</font> ms <font color="#000000">255.340</font> ms
-<font color="#000000">43</font> it-s.hi-ho.silver (<font color="#000000">162.252</font>.<font color="#000000">205.156</font>) <font color="#000000">260.152</font> ms <font color="#000000">261.775</font> ms <font color="#000000">261.544</font> ms
-<font color="#000000">44</font> signed.bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.157</font>) <font color="#000000">262.430</font> ms <font color="#000000">261.410</font> ms <font color="#000000">261.365</font> ms
+<pre><font color="#ff0000">❯ traceroute -m </font><font color="#bb00ff">60</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse</font>
+<font color="#ff0000">traceroute to bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.157</font><font color="#F3E651">),</font><font color="#ff0000"> </font><font color="#bb00ff">60</font><font color="#ff0000"> hops max</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">60</font><font color="#ff0000"> byte packets</font>
+<font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> _gateway </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">5.237</font><font color="#ff0000"> ms </font><font color="#bb00ff">5.264</font><font color="#ff0000"> ms </font><font color="#bb00ff">6.009</font><font color="#ff0000"> ms</font>
+<font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">77</font><font color="#ff0000">-</font><font color="#bb00ff">85</font><font color="#ff0000">-</font><font color="#bb00ff">0</font><font color="#ff0000">-</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">ip</font><font color="#F3E651">.</font><font color="#ff0000">btc-net</font><font color="#F3E651">.</font><b><font color="#ffffff">bg</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">77.85</font><font color="#F3E651">.</font><font color="#bb00ff">0.2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">8.753</font><font color="#ff0000"> ms </font><font color="#bb00ff">7.112</font><font color="#ff0000"> ms </font><font color="#bb00ff">8.336</font><font color="#ff0000"> ms</font>
+<font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#bb00ff">212</font><font color="#ff0000">-</font><font color="#bb00ff">39</font><font color="#ff0000">-</font><font color="#bb00ff">69</font><font color="#ff0000">-</font><font color="#bb00ff">103</font><font color="#F3E651">.</font><font color="#ff0000">ip</font><font color="#F3E651">.</font><font color="#ff0000">btc-net</font><font color="#F3E651">.</font><b><font color="#ffffff">bg</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">212.39</font><font color="#F3E651">.</font><font color="#bb00ff">69.103</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">9.434</font><font color="#ff0000"> ms </font><font color="#bb00ff">9.268</font><font color="#ff0000"> ms </font><font color="#bb00ff">9.986</font><font color="#ff0000"> ms</font>
+<font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font>
+<font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> xe-</font><font color="#bb00ff">1</font><font color="#ff0000">-</font><font color="#bb00ff">2</font><font color="#ff0000">-</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">mpr1</font><font color="#F3E651">.</font><font color="#ff0000">fra4</font><font color="#F3E651">.</font><font color="#ff0000">de</font><font color="#F3E651">.</font><font color="#ff0000">above</font><font color="#F3E651">.</font><font color="#ff0000">net </font><font color="#F3E651">(</font><font color="#bb00ff">80.81</font><font color="#F3E651">.</font><font color="#bb00ff">194.26</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">39.812</font><font color="#ff0000"> ms </font><font color="#bb00ff">39.030</font><font color="#ff0000"> ms </font><font color="#bb00ff">39.772</font><font color="#ff0000"> ms</font>
+<font color="#ff0000"> </font><font color="#bb00ff">6</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> ae12</font><font color="#F3E651">.</font><font color="#ff0000">cs1</font><font color="#F3E651">.</font><font color="#ff0000">fra6</font><font color="#F3E651">.</font><font color="#ff0000">de</font><font color="#F3E651">.</font><font color="#ff0000">eth</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">26.172</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">123.576</font><font color="#ff0000"> ms </font><font color="#F3E651">*</font>
+<font color="#ff0000"> </font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font>
+<font color="#ff0000"> </font><font color="#bb00ff">8</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font>
+<font color="#ff0000"> </font><font color="#bb00ff">9</font><font color="#ff0000"> ae10</font><font color="#F3E651">.</font><font color="#ff0000">cr1</font><font color="#F3E651">.</font><font color="#ff0000">lhr15</font><font color="#F3E651">.</font><font color="#ff0000">uk</font><font color="#F3E651">.</font><font color="#ff0000">eth</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">29.17</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">119.097</font><font color="#ff0000"> ms </font><font color="#bb00ff">119.478</font><font color="#ff0000"> ms </font><font color="#bb00ff">120.767</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">10</font><font color="#ff0000"> ae2</font><font color="#F3E651">.</font><font color="#ff0000">cr1</font><font color="#F3E651">.</font><font color="#ff0000">lhr11</font><font color="#F3E651">.</font><font color="#ff0000">uk</font><font color="#F3E651">.</font><font color="#ff0000">zip</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">24.140</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">120.398</font><font color="#ff0000"> ms </font><font color="#bb00ff">121.147</font><font color="#ff0000"> ms </font><font color="#bb00ff">120.948</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">11</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font>
+<font color="#bb00ff">12</font><font color="#ff0000"> ae25</font><font color="#F3E651">.</font><font color="#ff0000">mpr1</font><font color="#F3E651">.</font><font color="#ff0000">yyz1</font><font color="#F3E651">.</font><font color="#ff0000">ca</font><font color="#F3E651">.</font><font color="#ff0000">zip</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">23.117</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">145.072</font><font color="#ff0000"> ms </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#bb00ff">181.773</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">13</font><font color="#ff0000"> ae5</font><font color="#F3E651">.</font><font color="#ff0000">mpr1</font><font color="#F3E651">.</font><font color="#ff0000">tor3</font><font color="#F3E651">.</font><font color="#ff0000">ca</font><font color="#F3E651">.</font><font color="#ff0000">zip</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">23.118</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">168.239</font><font color="#ff0000"> ms </font><font color="#bb00ff">168.158</font><font color="#ff0000"> ms </font><font color="#bb00ff">168.137</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">14</font><font color="#ff0000"> </font><font color="#bb00ff">64.124</font><font color="#F3E651">.</font><font color="#bb00ff">217.237</font><font color="#F3E651">.</font><font color="#ff0000">IDIA-</font><font color="#bb00ff">265104</font><font color="#ff0000">-ZYO</font><font color="#F3E651">.</font><font color="#ff0000">zip</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.124</font><font color="#F3E651">.</font><font color="#bb00ff">217.237</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">168.026</font><font color="#ff0000"> ms </font><font color="#bb00ff">167.999</font><font color="#ff0000"> ms </font><font color="#bb00ff">165.451</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">15</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font>
+<font color="#bb00ff">16</font><font color="#ff0000"> t00</font><font color="#F3E651">.</font><font color="#ff0000">toroc1</font><font color="#F3E651">.</font><font color="#ff0000">on</font><font color="#F3E651">.</font><font color="#ff0000">ca</font><font color="#F3E651">.</font><font color="#ff0000">sn11</font><font color="#F3E651">.</font><font color="#ff0000">net </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">204.2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">131.598</font><font color="#ff0000"> ms </font><font color="#bb00ff">131.308</font><font color="#ff0000"> ms </font><font color="#bb00ff">131.482</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">17</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.130</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">131.430</font><font color="#ff0000"> ms </font><font color="#bb00ff">145.914</font><font color="#ff0000"> ms </font><font color="#bb00ff">130.514</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">18</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.131</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">136.634</font><font color="#ff0000"> ms </font><font color="#bb00ff">145.295</font><font color="#ff0000"> ms </font><font color="#bb00ff">135.631</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">19</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.132</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">139.158</font><font color="#ff0000"> ms </font><font color="#bb00ff">148.363</font><font color="#ff0000"> ms </font><font color="#bb00ff">138.934</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">20</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.133</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">145.395</font><font color="#ff0000"> ms </font><font color="#bb00ff">148.054</font><font color="#ff0000"> ms </font><font color="#bb00ff">147.140</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">21</font><font color="#ff0000"> he</font><font color="#F3E651">.</font><font color="#ff0000">rides</font><font color="#F3E651">.</font><font color="#ff0000">across</font><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">nation </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.134</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">149.687</font><font color="#ff0000"> ms </font><font color="#bb00ff">147.731</font><font color="#ff0000"> ms </font><font color="#bb00ff">150.135</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">22</font><font color="#ff0000"> the</font><font color="#F3E651">.</font><font color="#ff0000">thoroughbred</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">sin </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.135</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">156.644</font><font color="#ff0000"> ms </font><font color="#bb00ff">155.155</font><font color="#ff0000"> ms </font><font color="#bb00ff">156.447</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">23</font><font color="#ff0000"> he</font><font color="#F3E651">.</font><font color="#ff0000">got</font><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">application </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.136</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">161.187</font><font color="#ff0000"> ms </font><font color="#bb00ff">162.318</font><font color="#ff0000"> ms </font><font color="#bb00ff">162.674</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">24</font><font color="#ff0000"> that</font><font color="#F3E651">.</font><font color="#ff0000">you</font><font color="#F3E651">.</font><font color="#ff0000">just</font><font color="#F3E651">.</font><font color="#ff0000">sent</font><font color="#F3E651">.</font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.137</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">166.763</font><font color="#ff0000"> ms </font><font color="#bb00ff">166.675</font><font color="#ff0000"> ms </font><font color="#bb00ff">164.243</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">25</font><font color="#ff0000"> it</font><font color="#F3E651">.</font><font color="#ff0000">needs</font><font color="#F3E651">.</font><font color="#ff0000">evaluation </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.138</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">172.073</font><font color="#ff0000"> ms </font><font color="#bb00ff">171.919</font><font color="#ff0000"> ms </font><font color="#bb00ff">171.390</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">26</font><font color="#ff0000"> so</font><font color="#F3E651">.</font><b><font color="#ffffff">let</font></b><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">games</font><font color="#F3E651">.</font><font color="#ff0000">begin </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.139</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">175.386</font><font color="#ff0000"> ms </font><font color="#bb00ff">174.180</font><font color="#ff0000"> ms </font><font color="#bb00ff">175.965</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">27</font><font color="#ff0000"> a</font><font color="#F3E651">.</font><font color="#ff0000">heinous</font><font color="#F3E651">.</font><font color="#ff0000">crime </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.140</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">180.857</font><font color="#ff0000"> ms </font><font color="#bb00ff">180.766</font><font color="#ff0000"> ms </font><font color="#bb00ff">180.192</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">28</font><font color="#ff0000"> a</font><font color="#F3E651">.</font><font color="#ff0000">show</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">force </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.141</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">187.942</font><font color="#ff0000"> ms </font><font color="#bb00ff">186.669</font><font color="#ff0000"> ms </font><font color="#bb00ff">186.986</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">29</font><font color="#ff0000"> a</font><font color="#F3E651">.</font><font color="#ff0000">murder</font><font color="#F3E651">.</font><font color="#ff0000">would</font><font color="#F3E651">.</font><font color="#ff0000">be</font><font color="#F3E651">.</font><font color="#ff0000">nice</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">course </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.142</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">191.349</font><font color="#ff0000"> ms </font><font color="#bb00ff">191.939</font><font color="#ff0000"> ms </font><font color="#bb00ff">190.740</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">30</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.143</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">195.425</font><font color="#ff0000"> ms </font><font color="#bb00ff">195.716</font><font color="#ff0000"> ms </font><font color="#bb00ff">196.186</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">31</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.144</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">199.238</font><font color="#ff0000"> ms </font><font color="#bb00ff">200.620</font><font color="#ff0000"> ms </font><font color="#bb00ff">200.318</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">32</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.145</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">207.554</font><font color="#ff0000"> ms </font><font color="#bb00ff">206.729</font><font color="#ff0000"> ms </font><font color="#bb00ff">205.201</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">33</font><font color="#ff0000"> he-s</font><font color="#F3E651">.</font><font color="#ff0000">bad </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.146</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">211.087</font><font color="#ff0000"> ms </font><font color="#bb00ff">211.649</font><font color="#ff0000"> ms </font><font color="#bb00ff">211.712</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">34</font><font color="#ff0000"> the</font><font color="#F3E651">.</font><font color="#ff0000">evil</font><font color="#F3E651">.</font><font color="#ff0000">league</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">evil </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.147</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">212.657</font><font color="#ff0000"> ms </font><font color="#bb00ff">216.777</font><font color="#ff0000"> ms </font><font color="#bb00ff">216.589</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">35</font><font color="#ff0000"> is</font><font color="#F3E651">.</font><font color="#ff0000">watching</font><font color="#F3E651">.</font><font color="#ff0000">so</font><font color="#F3E651">.</font><font color="#ff0000">beware </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.148</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">220.911</font><font color="#ff0000"> ms </font><font color="#bb00ff">220.326</font><font color="#ff0000"> ms </font><font color="#bb00ff">221.961</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">36</font><font color="#ff0000"> the</font><font color="#F3E651">.</font><font color="#ff0000">grade</font><font color="#F3E651">.</font><font color="#ff0000">that</font><font color="#F3E651">.</font><font color="#ff0000">you</font><font color="#F3E651">.</font><font color="#ff0000">receive </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.149</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">225.384</font><font color="#ff0000"> ms </font><font color="#bb00ff">225.696</font><font color="#ff0000"> ms </font><font color="#bb00ff">225.640</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">37</font><font color="#ff0000"> will</font><font color="#F3E651">.</font><font color="#ff0000">be</font><font color="#F3E651">.</font><font color="#ff0000">your</font><font color="#F3E651">.</font><font color="#ff0000">last</font><font color="#F3E651">.</font><font color="#ff0000">we</font><font color="#F3E651">.</font><font color="#ff0000">swear </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.150</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">232.312</font><font color="#ff0000"> ms </font><font color="#bb00ff">230.989</font><font color="#ff0000"> ms </font><font color="#bb00ff">230.919</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">38</font><font color="#ff0000"> so</font><font color="#F3E651">.</font><font color="#ff0000">make</font><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">bad</font><font color="#F3E651">.</font><font color="#ff0000">horse</font><font color="#F3E651">.</font><font color="#ff0000">gleeful </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.151</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">235.761</font><font color="#ff0000"> ms </font><font color="#bb00ff">235.291</font><font color="#ff0000"> ms </font><font color="#bb00ff">235.585</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">39</font><font color="#ff0000"> or</font><font color="#F3E651">.</font><font color="#ff0000">he-ll</font><font color="#F3E651">.</font><font color="#ff0000">make</font><font color="#F3E651">.</font><font color="#ff0000">you</font><font color="#F3E651">.</font><font color="#ff0000">his</font><font color="#F3E651">.</font><font color="#ff0000">mare </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.152</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">241.350</font><font color="#ff0000"> ms </font><font color="#bb00ff">239.407</font><font color="#ff0000"> ms </font><font color="#bb00ff">238.394</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">40</font><font color="#ff0000"> o_o </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.153</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">246.154</font><font color="#ff0000"> ms </font><font color="#bb00ff">247.650</font><font color="#ff0000"> ms </font><font color="#bb00ff">247.110</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">41</font><font color="#ff0000"> you-re</font><font color="#F3E651">.</font><font color="#ff0000">saddled</font><font color="#F3E651">.</font><font color="#ff0000">up </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.154</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">250.925</font><font color="#ff0000"> ms </font><font color="#bb00ff">250.401</font><font color="#ff0000"> ms </font><font color="#bb00ff">250.619</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">42</font><font color="#ff0000"> there-s</font><font color="#F3E651">.</font><font color="#ff0000">no</font><font color="#F3E651">.</font><font color="#ff0000">recourse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.155</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">256.071</font><font color="#ff0000"> ms </font><font color="#bb00ff">251.154</font><font color="#ff0000"> ms </font><font color="#bb00ff">255.340</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">43</font><font color="#ff0000"> it-s</font><font color="#F3E651">.</font><font color="#ff0000">hi-ho</font><font color="#F3E651">.</font><font color="#ff0000">silver </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.156</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">260.152</font><font color="#ff0000"> ms </font><font color="#bb00ff">261.775</font><font color="#ff0000"> ms </font><font color="#bb00ff">261.544</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">44</font><font color="#ff0000"> signed</font><font color="#F3E651">.</font><font color="#ff0000">bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.157</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">262.430</font><font color="#ff0000"> ms </font><font color="#bb00ff">261.410</font><font color="#ff0000"> ms </font><font color="#bb00ff">261.365</font><font color="#ff0000"> ms</font>
</pre>
<br />
<h2 style='display: inline' id='2-ascii-cinema'>2. ASCII cinema</h2><br />
@@ -129,20 +134,20 @@ traceroute to bad.horse (<font color="#000000">162.252</font>.<font color="#0000
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">#include</font></u></b> <font color="#808080">&lt;stdio.h&gt;</font>
+<pre><font color="#ababab">#include</font><font color="#ff0000"> </font><font color="#bb00ff">&lt;stdio.h&gt;</font>
-<b><font color="#000000">int</font></b> main(<b><font color="#000000">void</font></b>) {
- <b><font color="#000000">int</font></b> array[<font color="#000000">5</font>] = { <font color="#000000">1</font>, <font color="#000000">2</font>, <font color="#000000">3</font>, <font color="#000000">4</font>, <font color="#000000">5</font> };
+<b><font color="#F35E1E">int</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">(</font><b><font color="#F35E1E">void</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> array</font><font color="#F3E651">[</font><font color="#bb00ff">5</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> i = <font color="#000000">0</font>; i &lt; <font color="#000000">5</font>; i++)
- printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, array[i]);
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++)</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> array</font><font color="#F3E651">[</font><font color="#ff0000">i</font><font color="#F3E651">]);</font>
- <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> i = <font color="#000000">0</font>; i &lt; <font color="#000000">5</font>; i++)
- printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, i[array]);
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++)</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> i</font><font color="#F3E651">[</font><font color="#ff0000">array</font><font color="#F3E651">]);</font>
- <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> i = <font color="#000000">0</font>; i &lt; <font color="#000000">5</font>; i++)
- printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, *(i + array));
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++)</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">*(</font><font color="#ff0000">i </font><font color="#F3E651">+</font><font color="#ff0000"> array</font><font color="#F3E651">));</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<h3 style='display: inline' id='5-variables-with-prefix-'>5. Variables with prefix <span class='inlinecode'>$</span></h3><br />
@@ -153,20 +158,20 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">#include</font></u></b> <font color="#808080">&lt;stdio.h&gt;</font>
+<pre><font color="#ababab">#include</font><font color="#ff0000"> </font><font color="#bb00ff">&lt;stdio.h&gt;</font>
-<b><font color="#000000">int</font></b> main(<b><font color="#000000">void</font></b>) {
- <b><font color="#000000">int</font></b> $array[<font color="#000000">5</font>] = { <font color="#000000">1</font>, <font color="#000000">2</font>, <font color="#000000">3</font>, <font color="#000000">4</font>, <font color="#000000">5</font> };
+<b><font color="#F35E1E">int</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">(</font><b><font color="#F35E1E">void</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $array</font><font color="#F3E651">[</font><font color="#bb00ff">5</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> $i = <font color="#000000">0</font>; $i &lt; <font color="#000000">5</font>; $i++)
- printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, $array[$i]);
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> $i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> $i</font><font color="#F3E651">++)</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> $array</font><font color="#F3E651">[</font><font color="#ff0000">$i</font><font color="#F3E651">]);</font>
- <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> $i = <font color="#000000">0</font>; $i &lt; <font color="#000000">5</font>; $i++)
- printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, $i[$array]);
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> $i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> $i</font><font color="#F3E651">++)</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> $i</font><font color="#F3E651">[</font><font color="#ff0000">$array</font><font color="#F3E651">]);</font>
- <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> $i = <font color="#000000">0</font>; $i &lt; <font color="#000000">5</font>; $i++)
- printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, *($i + $array));
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> $i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> $i</font><font color="#F3E651">++)</font>
+<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">*(</font><font color="#ff0000">$i </font><font color="#F3E651">+</font><font color="#ff0000"> $array</font><font color="#F3E651">));</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<h2 style='display: inline' id='6-object-oriented-shell-scripts-using-ksh'>6. Object oriented shell scripts using <span class='inlinecode'>ksh</span></h2><br />
@@ -177,40 +182,40 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/ksh93</font></i>
-
-<b><u><font color="#000000">typeset</font></u></b> -T Point_t=(
- integer -h <font color="#808080">'x coordinate'</font> x=<font color="#000000">0</font>
- integer -h <font color="#808080">'y coordinate'</font> y=<font color="#000000">0</font>
- <b><u><font color="#000000">typeset</font></u></b> -h <font color="#808080">'point color'</font> color=<font color="#808080">"red"</font>
+<pre><i><font color="#ababab">#!/usr/bin/ksh93</font></i>
+<font color="#ff0000"> </font>
+<b><font color="#ffffff">typeset</font></b><font color="#ff0000"> -T </font><font color="#ff0000">Point_t</font><font color="#F3E651">=(</font>
+<font color="#ff0000"> integer -h </font><font color="#bb00ff">'x coordinate'</font><font color="#ff0000"> </font><font color="#ff0000">x</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> integer -h </font><font color="#bb00ff">'y coordinate'</font><font color="#ff0000"> </font><font color="#ff0000">y</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">typeset</font></b><font color="#ff0000"> -h </font><font color="#bb00ff">'point color'</font><font color="#ff0000"> </font><font color="#ff0000">color</font><font color="#F3E651">=</font><font color="#bb00ff">"red"</font>
- function getcolor {
- print -r ${_.color}
- }
+<font color="#ff0000"> </font><font color="#7bc710">function getcolor </font><font color="#ff0000">{</font>
+<font color="#ff0000"> print -r </font><font color="#ff0000">${_.color}</font>
+<font color="#ff0000"> }</font>
- function setcolor {
- _.color=$1
- }
+<font color="#ff0000"> </font><font color="#7bc710">function setcolor </font><font color="#ff0000">{</font>
+<font color="#ff0000"> _</font><font color="#F3E651">.</font><font color="#ff0000">color</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
+<font color="#ff0000"> }</font>
- setxy() {
- _.x=$1; _.y=$2
- }
+<font color="#ff0000"> </font><font color="#7bc710">setxy()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> _</font><font color="#F3E651">.</font><font color="#ff0000">x</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> _</font><font color="#F3E651">.</font><font color="#ff0000">y</font><font color="#F3E651">=</font><font color="#ff0000">$2</font>
+<font color="#ff0000"> }</font>
- getxy() {
- print -r <font color="#808080">"(${_.x},${_.y})"</font>
- }
-)
-
-Point_t point
-
-echo <font color="#808080">"Initial coordinates are (${point.x},${point.y}). Color is ${point.color}"</font>
-
-point.setxy <font color="#000000">5</font> <font color="#000000">6</font>
-point.setcolor blue
-
-echo <font color="#808080">"New coordinates are ${point.getxy}. Color is ${point.getcolor}"</font>
-
-<b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
+<font color="#ff0000"> </font><font color="#7bc710">getxy()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> print -r </font><font color="#bb00ff">"(${_.x},${_.y})"</font>
+<font color="#ff0000"> }</font>
+<font color="#F3E651">)</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000">Point_t point</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"Initial coordinates are (${point.x},${point.y}). Color is ${point.color}"</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000">point</font><font color="#F3E651">.</font><font color="#ff0000">setxy </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#bb00ff">6</font>
+<font color="#ff0000">point</font><font color="#F3E651">.</font><font color="#ff0000">setcolor blue</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"New coordinates are ${point.getxy}. Color is ${point.getcolor}"</font>
+<font color="#ff0000"> </font>
+<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
</pre>
<br />
<a class='textlink' href='https://blog.fpmurphy.com/2010/05/ksh93-using-types-to-create-object-orientated-scripts.html'>Using types to create object oriented Korn shell 93 scripts</a><br />
@@ -223,18 +228,18 @@ echo <font color="#808080">"New coordinates are ${point.getxy}. Color is ${point
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> main
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> main</font>
-<b><u><font color="#000000">import</font></u></b> <font color="#808080">"fmt"</font>
+<b><font color="#ffffff">import</font></b><font color="#ff0000"> </font><font color="#bb00ff">"fmt"</font>
-<b><u><font color="#000000">func</font></u></b> main() {
- <b><u><font color="#000000">var</font></u></b> i int
- f := <b><u><font color="#000000">func</font></u></b>() *int {
- <b><u><font color="#000000">return</font></u></b> &amp;i
- }
- *f()++
- fmt.Println(i)
-}
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">var</font></b><font color="#ff0000"> i int</font>
+<font color="#ff0000"> f </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><b><font color="#ffffff">func</font></b><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">int </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#F3E651">&amp;</font><font color="#ff0000">i</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#7bc710">f</font><font color="#F3E651">()++</font>
+<font color="#ff0000"> fmt</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#ff0000">i</font><font color="#F3E651">)</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<a class='textlink' href='https://go.dev/play/p/sPRdyDvXefK?__s=mk8u899owb9yurl256gw'>Go playground</a><br />
@@ -396,11 +401,12 @@ r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()&lt;&gt;@,;:\\".\
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.html b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.html
index a13e9450..cb5610e6 100644
--- a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.html
+++ b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'The Stoic Challenge' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-07-07-the-stoic-challenge-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi">Gemini</a>
</p>
@@ -87,11 +92,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-08-05-typing-127.1-words-per-minute.html b/gemfeed/2024-08-05-typing-127.1-words-per-minute.html
index 669d37a4..bcd7a1b0 100644
--- a/gemfeed/2024-08-05-typing-127.1-words-per-minute.html
+++ b/gemfeed/2024-08-05-typing-127.1-words-per-minute.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Typing `127.1` words per minute (`>100wpm average`)</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-08-05-typing-127.1-words-per-minute.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi">Gemini</a>
</p>
@@ -248,11 +253,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-09-07-projects-i-support.html b/gemfeed/2024-09-07-projects-i-support.html
index 01cf18b0..33247351 100644
--- a/gemfeed/2024-09-07-projects-i-support.html
+++ b/gemfeed/2024-09-07-projects-i-support.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Projects I financially support</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-09-07-projects-i-support.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-09-07-projects-i-support.gmi">Gemini</a>
</p>
@@ -119,11 +124,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-09-07-site-reliability-engineering-part-4.html b/gemfeed/2024-09-07-site-reliability-engineering-part-4.html
index a3980380..e3ce4bb7 100644
--- a/gemfeed/2024-09-07-site-reliability-engineering-part-4.html
+++ b/gemfeed/2024-09-07-site-reliability-engineering-part-4.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Site Reliability Engineering - Part 4: Onboarding for On-Call Engineers</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-09-07-site-reliability-engineering-part-4.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4.gmi">Gemini</a>
</p>
@@ -92,11 +97,12 @@ jgs \\`_..---.Y.---.._`//
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html b/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html
index 6056850c..c59a65e2 100644
--- a/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html
+++ b/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gemtexter 3.0.0 - Let's Gemtext again⁴</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.gmi">Gemini</a>
</p>
@@ -76,7 +81,7 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">declare</font></u></b> -xr HTML_THEME_DIR=./extras/html/themes/simple
+<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">HTML_THEME_DIR</font><font color="#F3E651">=.</font><font color="#ff0000">/extras/html/themes/simple</font>
</pre>
<br />
<span>To customize the theme or create your own, simply copy the theme directory and modify it as needed. This makes it also much easier to switch between layouts.</span><br />
@@ -102,11 +107,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-10-24-staff-engineer-book-notes.html b/gemfeed/2024-10-24-staff-engineer-book-notes.html
index 94037125..c952e5bf 100644
--- a/gemfeed/2024-10-24-staff-engineer-book-notes.html
+++ b/gemfeed/2024-10-24-staff-engineer-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'Staff Engineer' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-10-24-staff-engineer-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes.gmi">Gemini</a>
</p>
@@ -152,11 +157,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html b/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html
index 9fe54ab8..999f8f3b 100644
--- a/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html
+++ b/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 1: Setting the stage</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.gmi">Gemini</a>
</p>
@@ -198,11 +203,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html b/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html
index 5578fbf1..ab955a5c 100644
--- a/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html
+++ b/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.gmi">Gemini</a>
</p>
@@ -132,9 +137,9 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth]~/Downloads% sudo dd \
- <b><u><font color="#000000">if</font></u></b>=FreeBSD-<font color="#000000">14.1</font>-RELEASE-amd<font color="#000000">64</font>-bootonly.iso \
- of=/dev/sda conv=sync
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~</font><font color="#ff0000">/Downloads</font><font color="#F3E651">%</font><font color="#ff0000"> sudo dd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#F3E651">=</font><font color="#ff0000">FreeBSD-</font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE-amd</font><font color="#bb00ff">64</font><font color="#ff0000">-bootonly</font><font color="#F3E651">.</font><font color="#ff0000">iso </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">of</font><font color="#F3E651">=</font><font color="#ff0000">/dev/sda </font><font color="#ff0000">conv</font><font color="#F3E651">=</font><font color="#ff0000">sync</font>
</pre>
<br />
<span>Next, I plugged the Beelinks (one after another) into my monitor via HDMI (the resolution of the FreeBSD text console seems strangely stretched, as I am using the LG Dual Up monitor), connected Ethernet, an external USB keyboard, and the FreeBSD USB stick, and booted the devices up. With F7, I entered the boot menu and selected the USB stick for the FreeBSD installation.</span><br />
@@ -160,9 +165,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># freebsd-update fetch</font></i>
-root@f0:~ <i><font color="silver"># freebsd-update install</font></i>
-root@f0:~ <i><font color="silver"># freebsd-update reboot</font></i>
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update fetch</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update install</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update reboot</font></i>
</pre>
<br />
<span>I also added the following entries for the three FreeBSD boxes to the <span class='inlinecode'>/etc/hosts</span> file:</span><br />
@@ -171,11 +176,11 @@ root@f0:~ <i><font color="silver"># freebsd-update reboot</font></i>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># cat &lt;&lt;END &gt;&gt;/etc/hosts</font></i>
-<font color="#000000">192.168</font>.<font color="#000000">1.130</font> f0 f0.lan f0.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.131</font> f1 f1.lan f1.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.132</font> f2 f2.lan f2.lan.buetow.org
-END
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cat &lt;&lt;END &gt;&gt;/etc/hosts</font></i>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> f0 f0</font><font color="#F3E651">.</font><font color="#ff0000">lan f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#ff0000"> f1 f1</font><font color="#F3E651">.</font><font color="#ff0000">lan f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#ff0000"> f2 f2</font><font color="#F3E651">.</font><font color="#ff0000">lan f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>You might wonder why bother using the hosts file? Why not use DNS properly? The reason is simplicity. I don&#39;t manage 100 hosts, only a few here and there. Having an OpenWRT router in my home, I could also configure everything there, but maybe I&#39;ll do that later. For now, keep it simple and straightforward.</span><br />
@@ -188,7 +193,7 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># pkg install helix doas zfs-periodic uptimed</font></i>
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># pkg install helix doas zfs-periodic uptimed</font></i>
</pre>
<br />
<h3 style='display: inline' id='helix-editor'>Helix editor</h3><br />
@@ -205,7 +210,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># cp /usr/local/etc/doas.conf.sample /usr/local/etc/doas.conf</font></i>
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/etc/doas.conf.sample /usr/local/etc/doas.conf</font></i>
</pre>
<br />
<a class='textlink' href='https://man.openbsd.org/doas'>https://man.openbsd.org/doas</a><br />
@@ -218,17 +223,17 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># cat &lt;&lt;END &gt;&gt;/etc/periodic.conf</font></i>
-daily_zfs_snapshot_enable=<font color="#808080">"YES"</font>
-daily_zfs_snapshot_pools=<font color="#808080">"zroot"</font>
-daily_zfs_snapshot_keep=<font color="#808080">"7"</font>
-weekly_zfs_snapshot_enable=<font color="#808080">"YES"</font>
-weekly_zfs_snapshot_pools=<font color="#808080">"zroot"</font>
-weekly_zfs_snapshot_keep=<font color="#808080">"5"</font>
-monthly_zfs_snapshot_enable=<font color="#808080">"YES"</font>
-monthly_zfs_snapshot_pools=<font color="#808080">"zroot"</font>
-monthly_zfs_snapshot_keep=<font color="#808080">"6"</font>
-END
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cat &lt;&lt;END &gt;&gt;/etc/periodic.conf</font></i>
+<font color="#ff0000">daily_zfs_snapshot_enable</font><font color="#F3E651">=</font><font color="#bb00ff">"YES"</font>
+<font color="#ff0000">daily_zfs_snapshot_pools</font><font color="#F3E651">=</font><font color="#bb00ff">"zroot"</font>
+<font color="#ff0000">daily_zfs_snapshot_keep</font><font color="#F3E651">=</font><font color="#bb00ff">"7"</font>
+<font color="#ff0000">weekly_zfs_snapshot_enable</font><font color="#F3E651">=</font><font color="#bb00ff">"YES"</font>
+<font color="#ff0000">weekly_zfs_snapshot_pools</font><font color="#F3E651">=</font><font color="#bb00ff">"zroot"</font>
+<font color="#ff0000">weekly_zfs_snapshot_keep</font><font color="#F3E651">=</font><font color="#bb00ff">"5"</font>
+<font color="#ff0000">monthly_zfs_snapshot_enable</font><font color="#F3E651">=</font><font color="#bb00ff">"YES"</font>
+<font color="#ff0000">monthly_zfs_snapshot_pools</font><font color="#F3E651">=</font><font color="#bb00ff">"zroot"</font>
+<font color="#ff0000">monthly_zfs_snapshot_keep</font><font color="#F3E651">=</font><font color="#bb00ff">"6"</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<a class='textlink' href='https://github.com/ross/zfs-periodic'>https://github.com/ross/zfs-periodic</a><br />
@@ -243,9 +248,9 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># cp /usr/local/mimecast/etc/uptimed.conf-dist \</font></i>
- /usr/local/mimecast/etc/uptimed.conf
-root@f0:~ <i><font color="silver"># hx /usr/local/mimecast/etc/uptimed.conf</font></i>
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/mimecast/etc/uptimed.conf-dist \</font></i>
+<font color="#ff0000"> /usr/local/mimecast/etc/uptimed</font><font color="#F3E651">.</font><font color="#ff0000">conf </font>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># hx /usr/local/mimecast/etc/uptimed.conf</font></i>
</pre>
<br />
<span>In the Helix editor session, I changed <span class='inlinecode'>LOG_MAXIMUM_ENTRIES</span> to <span class='inlinecode'>0</span> to keep all uptime entries forever and not cut off at 50 (the default config). After that, I enabled and started <span class='inlinecode'>uptimed</span>:</span><br />
@@ -254,8 +259,8 @@ root@f0:~ <i><font color="silver"># hx /usr/local/mimecast/etc/uptimed.conf</fon
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@f0:~ <i><font color="silver"># service uptimed enable</font></i>
-root@f0:~ <i><font color="silver"># service uptimed start</font></i>
+<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed enable</font></i>
+<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed start</font></i>
</pre>
<br />
<span>To check the current uptime stats, I can now run <span class='inlinecode'>uprecords</span>:</span><br />
@@ -264,15 +269,15 @@ root@f0:~ <i><font color="silver"># service uptimed start</font></i>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre> root@f0:~ <i><font color="silver"># uprecords</font></i>
- <i><font color="silver"># Uptime | System Boot up</font></i>
-----------------------------+---------------------------------------------------
--&gt; <font color="#000000">1</font> <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">07</font>:<font color="#000000">34</font> | FreeBSD <font color="#000000">14.1</font>-RELEASE Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font>
-----------------------------+---------------------------------------------------
-NewRec <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">07</font>:<font color="#000000">33</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font>
- up <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">07</font>:<font color="#000000">34</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font>
- down <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">00</font>:<font color="#000000">00</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font>
- %up <font color="#000000">100.000</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font>
+<pre><font color="#ff0000"> root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># uprecords</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># Uptime | System Boot up</font></i>
+<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font>
+<font color="#ff0000">-</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font>
+<font color="#ff0000">NewRec </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">33</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> up </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> down </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
+<font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000">up </font><font color="#bb00ff">100.000</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font>
</pre>
<br />
<span>This is how I track the uptimes for all of my host:</span><br />
@@ -290,17 +295,17 @@ NewRec <font color="#000000">0</font> days, <font color="#000000">00</font>:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % ifconfig re0
-re0: flags=<font color="#000000">1008843</font>&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP&gt; metric <font color="#000000">0</font> mtu <font color="#000000">1500</font>
- options=8209b&lt;RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE&gt;
- ether e8:ff:1e:d7:1c:ac
- inet <font color="#000000">192.168</font>.<font color="#000000">1.130</font> netmask <font color="#000000">0xffffff00</font> broadcast <font color="#000000">192.168</font>.<font color="#000000">1.255</font>
- inet6 fe80::eaff:1eff:fed7:1cac%re0 prefixlen <font color="#000000">64</font> scopeid <font color="#000000">0x1</font>
- inet6 fd22:c702:acb7:<font color="#000000">0</font>:eaff:1eff:fed7:1cac prefixlen <font color="#000000">64</font> detached autoconf
- inet6 2a01:5a8:<font color="#000000">304</font>:1d5c:eaff:1eff:fed7:1cac prefixlen <font color="#000000">64</font> autoconf pltime <font color="#000000">10800</font> vltime <font color="#000000">14400</font>
- media: Ethernet autoselect (1000baseT &lt;full-duplex&gt;)
- status: active
- nd6 options=<font color="#000000">23</font>&lt;PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL&gt;
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0</font>
+<font color="#ff0000">re0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">flags</font><font color="#F3E651">=</font><font color="#bb00ff">1008843</font><font color="#F3E651">&lt;</font><font color="#ff0000">UP</font><font color="#F3E651">,</font><font color="#ff0000">BROADCAST</font><font color="#F3E651">,</font><font color="#ff0000">RUNNING</font><font color="#F3E651">,</font><font color="#ff0000">SIMPLEX</font><font color="#F3E651">,</font><font color="#ff0000">MULTICAST</font><font color="#F3E651">,</font><font color="#ff0000">LOWER_UP</font><font color="#F3E651">&gt;</font><font color="#ff0000"> metric </font><font color="#bb00ff">0</font><font color="#ff0000"> mtu </font><font color="#bb00ff">1500</font>
+<font color="#ff0000"> </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#ff0000">8209b</font><font color="#F3E651">&lt;</font><font color="#ff0000">RXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">TXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_MTU</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWTAGGING</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWCSUM</font><font color="#F3E651">,</font><font color="#ff0000">WOL_MAGIC</font><font color="#F3E651">,</font><font color="#ff0000">LINKSTATE</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> ether e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">ac</font>
+<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffff00</font><font color="#ff0000"> broadcast </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.255</font>
+<font color="#ff0000"> inet6 fe80</font><font color="#F3E651">::</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac</font><font color="#F3E651">%</font><font color="#ff0000">re0 prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> scopeid </font><font color="#bb00ff">0x1</font>
+<font color="#ff0000"> inet6 fd22</font><font color="#F3E651">:</font><font color="#ff0000">c702</font><font color="#F3E651">:</font><font color="#ff0000">acb7</font><font color="#F3E651">:</font><font color="#bb00ff">0</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> detached autoconf</font>
+<font color="#ff0000"> inet6 2a01</font><font color="#F3E651">:</font><font color="#ff0000">5a8</font><font color="#F3E651">:</font><font color="#bb00ff">304</font><font color="#F3E651">:</font><font color="#ff0000">1d5c</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> autoconf pltime </font><font color="#bb00ff">10800</font><font color="#ff0000"> vltime </font><font color="#bb00ff">14400</font>
+<font color="#ff0000"> media</font><font color="#F3E651">:</font><font color="#ff0000"> Ethernet autoselect </font><font color="#F3E651">(</font><font color="#ff0000">1000baseT </font><font color="#F3E651">&lt;</font><font color="#ff0000">full-duplex</font><font color="#F3E651">&gt;)</font>
+<font color="#ff0000"> status</font><font color="#F3E651">:</font><font color="#ff0000"> active</font>
+<font color="#ff0000"> nd6 </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#bb00ff">23</font><font color="#F3E651">&lt;</font><font color="#ff0000">PERFORMNUD</font><font color="#F3E651">,</font><font color="#ff0000">ACCEPT_RTADV</font><font color="#F3E651">,</font><font color="#ff0000">AUTO_LINKLOCAL</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<h2 style='display: inline' id='ram'>RAM</h2><br />
@@ -311,8 +316,8 @@ re0: flags=<font color="#000000">1008843</font>&lt;UP,BROADCAST,RUNNING,SIMPLEX,
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % sysctl hw.physmem
-hw.physmem: <font color="#000000">16902905856</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font>
+<font color="#ff0000">hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">16902905856</font>
</pre>
<br />
@@ -324,11 +329,11 @@ hw.physmem: <font color="#000000">16902905856</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % sysctl dev.cpu | grep freq:
-dev.cpu.<font color="#000000">3</font>.freq: <font color="#000000">705</font>
-dev.cpu.<font color="#000000">2</font>.freq: <font color="#000000">705</font>
-dev.cpu.<font color="#000000">1</font>.freq: <font color="#000000">604</font>
-dev.cpu.<font color="#000000">0</font>.freq: <font color="#000000">604</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font>
</pre>
<br />
<h2 style='display: inline' id='cpu-throttling'>CPU throttling</h2><br />
@@ -339,14 +344,14 @@ dev.cpu.<font color="#000000">0</font>.freq: <font color="#000000">604</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install ubench
-paul@f0:~ % rehash <i><font color="silver"># For tcsh to find the newly installed command</font></i>
-paul@f0:~ % ubench &amp;
-paul@f0:~ % sysctl dev.cpu | grep freq:
-dev.cpu.<font color="#000000">3</font>.freq: <font color="#000000">2922</font>
-dev.cpu.<font color="#000000">2</font>.freq: <font color="#000000">2922</font>
-dev.cpu.<font color="#000000">1</font>.freq: <font color="#000000">2923</font>
-dev.cpu.<font color="#000000">0</font>.freq: <font color="#000000">2922</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install ubench</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> rehash </font><i><font color="#ababab"># For tcsh to find the newly installed command</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ubench </font><font color="#F3E651">&amp;</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2923</font>
+<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font>
</pre>
<br />
<span>Idle, all three Beelinks plus the switch consumed 26.2W. But with <span class='inlinecode'>ubench</span> stressing all the CPUs, it went up to 38.8W.</span><br />
@@ -369,7 +374,7 @@ dev.cpu.<font color="#000000">0</font>.freq: <font color="#000000">2922</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth]~% sudo dnf install -y wol
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> sudo dnf install -y wol</font>
</pre>
<br />
<span>Next, I created a simple script (<span class='inlinecode'>~/bin/wol-f3s</span>) to wake and shutdown the machines:</span><br />
@@ -378,68 +383,68 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/bin/bash</font></i>
-<i><font color="silver"># Wake-on-LAN and shutdown script for f3s cluster (f0, f1, f2)</font></i>
+<pre><i><font color="#ababab">#!/bin/bash</font></i>
+<i><font color="#ababab"># Wake-on-LAN and shutdown script for f3s cluster (f0, f1, f2)</font></i>
-<i><font color="silver"># MAC addresses</font></i>
-F0_MAC=<font color="#808080">"e8:ff:1e:d7:1c:ac"</font> <i><font color="silver"># f0 (192.168.1.130)</font></i>
-F1_MAC=<font color="#808080">"e8:ff:1e:d7:1e:44"</font> <i><font color="silver"># f1 (192.168.1.131)</font></i>
-F2_MAC=<font color="#808080">"e8:ff:1e:d7:1c:a0"</font> <i><font color="silver"># f2 (192.168.1.132)</font></i>
+<i><font color="#ababab"># MAC addresses</font></i>
+<font color="#ff0000">F0_MAC</font><font color="#F3E651">=</font><font color="#bb00ff">"e8:ff:1e:d7:1c:ac"</font><font color="#ff0000"> </font><i><font color="#ababab"># f0 (192.168.1.130)</font></i>
+<font color="#ff0000">F1_MAC</font><font color="#F3E651">=</font><font color="#bb00ff">"e8:ff:1e:d7:1e:44"</font><font color="#ff0000"> </font><i><font color="#ababab"># f1 (192.168.1.131)</font></i>
+<font color="#ff0000">F2_MAC</font><font color="#F3E651">=</font><font color="#bb00ff">"e8:ff:1e:d7:1c:a0"</font><font color="#ff0000"> </font><i><font color="#ababab"># f2 (192.168.1.132)</font></i>
-<i><font color="silver"># IP addresses</font></i>
-F0_IP=<font color="#808080">"192.168.1.130"</font>
-F1_IP=<font color="#808080">"192.168.1.131"</font>
-F2_IP=<font color="#808080">"192.168.1.132"</font>
+<i><font color="#ababab"># IP addresses</font></i>
+<font color="#ff0000">F0_IP</font><font color="#F3E651">=</font><font color="#bb00ff">"192.168.1.130"</font>
+<font color="#ff0000">F1_IP</font><font color="#F3E651">=</font><font color="#bb00ff">"192.168.1.131"</font>
+<font color="#ff0000">F2_IP</font><font color="#F3E651">=</font><font color="#bb00ff">"192.168.1.132"</font>
-<i><font color="silver"># SSH user</font></i>
-SSH_USER=<font color="#808080">"paul"</font>
+<i><font color="#ababab"># SSH user</font></i>
+<font color="#ff0000">SSH_USER</font><font color="#F3E651">=</font><font color="#bb00ff">"paul"</font>
-<i><font color="silver"># Broadcast address for your LAN</font></i>
-BROADCAST=<font color="#808080">"192.168.1.255"</font>
+<i><font color="#ababab"># Broadcast address for your LAN</font></i>
+<font color="#ff0000">BROADCAST</font><font color="#F3E651">=</font><font color="#bb00ff">"192.168.1.255"</font>
-wake() {
- <b><u><font color="#000000">local</font></u></b> name=$1
- <b><u><font color="#000000">local</font></u></b> mac=$2
- echo <font color="#808080">"Sending WoL packet to $name ($mac)..."</font>
- wol -i <font color="#808080">"$BROADCAST"</font> <font color="#808080">"$mac"</font>
-}
+<font color="#7bc710">wake()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">name</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">mac</font><font color="#F3E651">=</font><font color="#ff0000">$2</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Sending WoL packet to $name ($mac)..."</font>
+<font color="#ff0000"> wol -i </font><font color="#bb00ff">"$BROADCAST"</font><font color="#ff0000"> </font><font color="#bb00ff">"$mac"</font>
+<font color="#ff0000">}</font>
-shutdown_host() {
- <b><u><font color="#000000">local</font></u></b> name=$1
- <b><u><font color="#000000">local</font></u></b> ip=$2
- echo <font color="#808080">"Shutting down $name ($ip)..."</font>
- ssh -o ConnectTimeout=<font color="#000000">5</font> <font color="#808080">"$SSH_USER@$ip"</font> <font color="#808080">"doas poweroff"</font> <font color="#000000">2</font>&gt;/dev/null &amp;&amp; \
- echo <font color="#808080">" ✓ Shutdown command sent to $name"</font> || \
- echo <font color="#808080">" ✗ Failed to reach $name (already down?)"</font>
-}
+<font color="#7bc710">shutdown_host()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">name</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">ip</font><font color="#F3E651">=</font><font color="#ff0000">$2</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Shutting down $name ($ip)..."</font>
+<font color="#ff0000"> ssh -o </font><font color="#ff0000">ConnectTimeout</font><font color="#F3E651">=</font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#bb00ff">"$SSH_USER@$ip"</font><font color="#ff0000"> </font><font color="#bb00ff">"doas poweroff"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" ✓ Shutdown command sent to $name"</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" ✗ Failed to reach $name (already down?)"</font>
+<font color="#ff0000">}</font>
-ACTION=<font color="#808080">"${1:-all}"</font>
+<font color="#ff0000">ACTION</font><font color="#F3E651">=</font><font color="#bb00ff">"${1:-all}"</font>
-<b><u><font color="#000000">case</font></u></b> <font color="#808080">"$ACTION"</font> <b><u><font color="#000000">in</font></u></b>
- f0) wake <font color="#808080">"f0"</font> <font color="#808080">"$F0_MAC"</font> ;;
- f1) wake <font color="#808080">"f1"</font> <font color="#808080">"$F1_MAC"</font> ;;
- f2) wake <font color="#808080">"f2"</font> <font color="#808080">"$F2_MAC"</font> ;;
- all|<font color="#808080">""</font>)
- wake <font color="#808080">"f0"</font> <font color="#808080">"$F0_MAC"</font>
- wake <font color="#808080">"f1"</font> <font color="#808080">"$F1_MAC"</font>
- wake <font color="#808080">"f2"</font> <font color="#808080">"$F2_MAC"</font>
- ;;
- shutdown|poweroff|down)
- shutdown_host <font color="#808080">"f0"</font> <font color="#808080">"$F0_IP"</font>
- shutdown_host <font color="#808080">"f1"</font> <font color="#808080">"$F1_IP"</font>
- shutdown_host <font color="#808080">"f2"</font> <font color="#808080">"$F2_IP"</font>
- echo <font color="#808080">""</font>
- echo <font color="#808080">"✓ Shutdown commands sent to all machines."</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
- ;;
- *)
- echo <font color="#808080">"Usage: $0 [f0|f1|f2|all|shutdown]"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
- ;;
-<b><u><font color="#000000">esac</font></u></b>
+<b><font color="#ffffff">case</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$ACTION"</font><font color="#ff0000"> </font><b><font color="#ffffff">in</font></b>
+<font color="#ff0000"> f0</font><font color="#F3E651">)</font><font color="#ff0000"> wake </font><font color="#bb00ff">"f0"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F0_MAC"</font><font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> f1</font><font color="#F3E651">)</font><font color="#ff0000"> wake </font><font color="#bb00ff">"f1"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F1_MAC"</font><font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> f2</font><font color="#F3E651">)</font><font color="#ff0000"> wake </font><font color="#bb00ff">"f2"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F2_MAC"</font><font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> all</font><font color="#F3E651">|</font><font color="#bb00ff">""</font><font color="#F3E651">)</font>
+<font color="#ff0000"> wake </font><font color="#bb00ff">"f0"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F0_MAC"</font>
+<font color="#ff0000"> wake </font><font color="#bb00ff">"f1"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F1_MAC"</font>
+<font color="#ff0000"> wake </font><font color="#bb00ff">"f2"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F2_MAC"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> shutdown</font><font color="#F3E651">|</font><font color="#ff0000">poweroff</font><font color="#F3E651">|</font><font color="#ff0000">down</font><font color="#F3E651">)</font>
+<font color="#ff0000"> shutdown_host </font><font color="#bb00ff">"f0"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F0_IP"</font>
+<font color="#ff0000"> shutdown_host </font><font color="#bb00ff">"f1"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F1_IP"</font>
+<font color="#ff0000"> shutdown_host </font><font color="#bb00ff">"f2"</font><font color="#ff0000"> </font><font color="#bb00ff">"$F2_IP"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">""</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"✓ Shutdown commands sent to all machines."</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><font color="#F3E651">*)</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Usage: $0 [f0|f1|f2|all|shutdown]"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<b><font color="#ffffff">esac</font></b>
-echo <font color="#808080">""</font>
-echo <font color="#808080">"✓ WoL packets sent. Machines should boot in a few seconds."</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">""</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"✓ WoL packets sent. Machines should boot in a few seconds."</font>
</pre>
<br />
<span>After making the script executable with <span class='inlinecode'>chmod +x ~/bin/wol-f3s</span>, I can now control the machines with simple commands:</span><br />
@@ -448,9 +453,9 @@ echo <font color="#808080">"✓ WoL packets sent. Machines should boot in a few
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth]~% wol-f3s <i><font color="silver"># Wake all three</font></i>
-[paul@earth]~% wol-f3s f0 <i><font color="silver"># Wake only f0</font></i>
-[paul@earth]~% wol-f3s shutdown <i><font color="silver"># Shutdown all three via SSH</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> wol-f3s </font><i><font color="#ababab"># Wake all three</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> wol-f3s f0 </font><i><font color="#ababab"># Wake only f0</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> wol-f3s shutdown </font><i><font color="#ababab"># Shutdown all three via SSH</font></i>
</pre>
<br />
<h2 style='display: inline' id='testing-wol-and-shutdown'>Testing WoL and Shutdown</h2><br />
@@ -461,15 +466,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth]~% wol-f3s shutdown
-Shutting down f0 (<font color="#000000">192.168</font>.<font color="#000000">1.130</font>)...
- ✓ Shutdown <b><u><font color="#000000">command</font></u></b> sent to f0
-Shutting down f1 (<font color="#000000">192.168</font>.<font color="#000000">1.131</font>)...
- ✓ Shutdown <b><u><font color="#000000">command</font></u></b> sent to f1
-Shutting down f2 (<font color="#000000">192.168</font>.<font color="#000000">1.132</font>)...
- ✓ Shutdown <b><u><font color="#000000">command</font></u></b> sent to f2
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> wol-f3s shutdown</font>
+<font color="#ff0000">Shutting down f0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#F3E651">)...</font>
+<font color="#ff0000"> ✓ Shutdown </font><b><font color="#ffffff">command</font></b><font color="#ff0000"> sent to f0</font>
+<font color="#ff0000">Shutting down f1 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#F3E651">)...</font>
+<font color="#ff0000"> ✓ Shutdown </font><b><font color="#ffffff">command</font></b><font color="#ff0000"> sent to f1</font>
+<font color="#ff0000">Shutting down f2 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#F3E651">)...</font>
+<font color="#ff0000"> ✓ Shutdown </font><b><font color="#ffffff">command</font></b><font color="#ff0000"> sent to f2</font>
-✓ Shutdown commands sent to all machines.
+<font color="#ff0000">✓ Shutdown commands sent to all machines</font><font color="#F3E651">.</font>
</pre>
<br />
<span>After waiting for them to fully power down (about 1 minute), I sent the WoL magic packets:</span><br />
@@ -478,15 +483,15 @@ Shutting down f2 (<font color="#000000">192.168</font>.<font color="#000000">1.1
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth]~% wol-f3s
-Sending WoL packet to f0 (e8:ff:1e:d7:1c:ac)...
-Waking up e8:ff:1e:d7:1c:ac...
-Sending WoL packet to f1 (e8:ff:1e:d7:1e:<font color="#000000">44</font>)...
-Waking up e8:ff:1e:d7:1e:<font color="#000000">44</font>...
-Sending WoL packet to f2 (e8:ff:1e:d7:1c:a0)...
-Waking up e8:ff:1e:d7:1c:a0...
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> wol-f3s</font>
+<font color="#ff0000">Sending WoL packet to f0 </font><font color="#F3E651">(</font><font color="#ff0000">e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">ac</font><font color="#F3E651">)...</font>
+<font color="#ff0000">Waking up e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">ac</font><font color="#F3E651">...</font>
+<font color="#ff0000">Sending WoL packet to f1 </font><font color="#F3E651">(</font><font color="#ff0000">e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#F3E651">)...</font>
+<font color="#ff0000">Waking up e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#F3E651">...</font>
+<font color="#ff0000">Sending WoL packet to f2 </font><font color="#F3E651">(</font><font color="#ff0000">e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">a0</font><font color="#F3E651">)...</font>
+<font color="#ff0000">Waking up e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">a0</font><font color="#F3E651">...</font>
-✓ WoL packets sent. Machines should boot <b><u><font color="#000000">in</font></u></b> a few seconds.
+<font color="#ff0000">✓ WoL packets sent</font><font color="#F3E651">.</font><font color="#ff0000"> Machines should boot </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> a few seconds</font><font color="#F3E651">.</font>
</pre>
<br />
<span>Within 30-50 seconds, all three machines successfully booted up and became accessible via SSH!</span><br />
@@ -507,7 +512,7 @@ Waking up e8:ff:1e:d7:1c:a0...
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth]~% wol-f3s shutdown
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~%</font><font color="#ff0000"> wol-f3s shutdown</font>
</pre>
<br />
<span>And all three machines will shut down cleanly. The next time I need them, a simple <span class='inlinecode'>wol-f3s</span> command wakes them all back up. This combination makes the cluster very energy-efficient while maintaining quick access when needed.</span><br />
@@ -555,11 +560,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2024-12-15-random-helix-themes.html b/gemfeed/2024-12-15-random-helix-themes.html
index 3b399487..0ed69e26 100644
--- a/gemfeed/2024-12-15-random-helix-themes.html
+++ b/gemfeed/2024-12-15-random-helix-themes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Random Helix Themes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2024-12-15-random-helix-themes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2024-12-15-random-helix-themes.gmi">Gemini</a>
</p>
@@ -25,33 +30,33 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">export</font></u></b> EDITOR=hx
-<b><u><font color="#000000">export</font></u></b> VISUAL=$EDITOR
-<b><u><font color="#000000">export</font></u></b> GIT_EDITOR=$EDITOR
-<b><u><font color="#000000">export</font></u></b> HELIX_CONFIG_DIR=$HOME/.config/helix
+<pre><b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">EDITOR</font><font color="#F3E651">=</font><font color="#ff0000">hx</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">VISUAL</font><font color="#F3E651">=</font><font color="#ff0000">$EDITOR</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">GIT_EDITOR</font><font color="#F3E651">=</font><font color="#ff0000">$EDITOR</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">HELIX_CONFIG_DIR</font><font color="#F3E651">=</font><font color="#ff0000">$HOME</font><font color="#F3E651">/.</font><font color="#ff0000">config/helix</font>
-editor::helix::random_theme () {
- <i><font color="silver"># May add more theme search paths based on OS. This one is</font></i>
- <i><font color="silver"># for Fedora Linux, but there is also MacOS, etc.</font></i>
- <b><u><font color="#000000">local</font></u></b> -r theme_dir=/usr/share/helix/runtime/themes
- <b><u><font color="#000000">if</font></u></b> [ ! -d $theme_dir ]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Helix theme dir $theme_dir doesnt exist"</font>
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">1</font>
- <b><u><font color="#000000">fi</font></u></b>
+<font color="#ff0000">editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#7bc710">random_theme ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># May add more theme search paths based on OS. This one is</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># for Fedora Linux, but there is also MacOS, etc.</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">theme_dir</font><font color="#F3E651">=</font><font color="#ff0000">/usr/share/helix/runtime/themes</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d </font><font color="#ff0000">$theme_dir</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Helix theme dir $theme_dir doesnt exist"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- <b><u><font color="#000000">local</font></u></b> -r config_file=$HELIX_CONFIG_DIR/config.toml
- <b><u><font color="#000000">local</font></u></b> -r random_theme=<font color="#808080">"$(basename "</font>$(ls $theme_dir \
- | grep -v random.toml | grep .toml | sort -R \
- | head -n <font color="#000000">1</font>)<font color="#808080">" | cut -d. -f1)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">config_file</font><font color="#F3E651">=</font><font color="#ff0000">$HELIX_CONFIG_DIR</font><font color="#ff0000">/config</font><font color="#F3E651">.</font><font color="#ff0000">toml</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">random_theme</font><font color="#F3E651">=</font><font color="#bb00ff">"$(basename "</font><font color="#ff0000">$(</font><font color="#ff0000">ls </font><font color="#ff0000">$theme_dir</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep -v random</font><font color="#F3E651">.</font><font color="#ff0000">toml </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#F3E651">.</font><font color="#ff0000">toml </font><font color="#F3E651">|</font><font color="#ff0000"> sort -R </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> head -n </font><font color="#bb00ff">1</font><font color="#F3E651">)</font><font color="#bb00ff">" | cut -d. -f1)"</font>
- sed <font color="#808080">"/^theme =/ { s/.*/theme = </font>\"<font color="#808080">$random_theme</font>\"<font color="#808080">/; }"</font> \
- $config_file &gt; $config_file.tmp &amp;&amp;
- mv $config_file.tmp $config_file
-}
+<font color="#ff0000"> sed </font><font color="#bb00ff">"/^theme =/ { s/.*/theme = </font><font color="#ffffff">\"</font><font color="#bb00ff">$random_theme</font><font color="#ffffff">\"</font><font color="#bb00ff">/; }"</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">$config_file</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$config_file</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font>
+<font color="#ff0000"> mv </font><font color="#ff0000">$config_file</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#ff0000">$config_file</font>
+<font color="#ff0000">}</font>
-<b><u><font color="#000000">if</font></u></b> [ -f $HELIX_CONFIG_DIR/config.toml ]; <b><u><font color="#000000">then</font></u></b>
- editor::helix::random_theme
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#ff0000">$HELIX_CONFIG_DIR</font><font color="#ff0000">/config</font><font color="#F3E651">.</font><font color="#ff0000">toml </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">random_theme</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>So every time I open a new terminal or shell, <span class='inlinecode'>editor::helix::random_theme</span> gets called, which randomly selects a theme from all installed ones and updates the helix config accordingly.</span><br />
@@ -60,16 +65,16 @@ editor::helix::random_theme () {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[paul@earth] ~ % editor::helix::random_theme
-[paul@earth] ~ % head -n <font color="#000000">1</font> ~/.config/helix/config.toml
-theme = <font color="#808080">"jellybeans"</font>
-[paul@earth] ~ % editor::helix::random_theme
-[paul@earth] ~ % head -n <font color="#000000">1</font> ~/.config/helix/config.toml
-theme = <font color="#808080">"rose_pine"</font>
-[paul@earth] ~ % editor::helix::random_theme
-[paul@earth] ~ % head -n <font color="#000000">1</font> ~/.config/helix/config.toml
-theme = <font color="#808080">"noctis"</font>
-[paul@earth] ~ %
+<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">random_theme</font>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> head -n </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">~/.</font><font color="#ff0000">config/helix/config</font><font color="#F3E651">.</font><font color="#ff0000">toml</font>
+<font color="#ff0000">theme </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"jellybeans"</font>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">random_theme</font>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> head -n </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">~/.</font><font color="#ff0000">config/helix/config</font><font color="#F3E651">.</font><font color="#ff0000">toml</font>
+<font color="#ff0000">theme </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"rose_pine"</font>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">random_theme</font>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> head -n </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">~/.</font><font color="#ff0000">config/helix/config</font><font color="#F3E651">.</font><font color="#ff0000">toml</font>
+<font color="#ff0000">theme </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"noctis"</font>
+<font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font>
</pre>
<br />
<h2 style='display: inline' id='a-better-version'>A better version</h2><br />
@@ -80,44 +85,45 @@ theme = <font color="#808080">"noctis"</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">export</font></u></b> EDITOR=hx
-<b><u><font color="#000000">export</font></u></b> VISUAL=$EDITOR
-<b><u><font color="#000000">export</font></u></b> GIT_EDITOR=$EDITOR
-<b><u><font color="#000000">export</font></u></b> HELIX_CONFIG_DIR=$HOME/.config/helix
+<pre><b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">EDITOR</font><font color="#F3E651">=</font><font color="#ff0000">hx</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">VISUAL</font><font color="#F3E651">=</font><font color="#ff0000">$EDITOR</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">GIT_EDITOR</font><font color="#F3E651">=</font><font color="#ff0000">$EDITOR</font>
+<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">HELIX_CONFIG_DIR</font><font color="#F3E651">=</font><font color="#ff0000">$HOME</font><font color="#F3E651">/.</font><font color="#ff0000">config/helix</font>
-editor::helix::theme::get_random () {
- <b><u><font color="#000000">for</font></u></b> dir <b><u><font color="#000000">in</font></u></b> $(hx --health \
- | awk <font color="#808080">'/^Runtime directories/ { print $3 }'</font> | tr <font color="#808080">';'</font> <font color="#808080">' '</font>); <b><u><font color="#000000">do</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ -d $dir/themes ]; <b><u><font color="#000000">then</font></u></b>
- ls $dir/themes
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">done</font></u></b> | grep -F .toml | sort -R | head -n <font color="#000000">1</font> | cut -d. -f<font color="#000000">1</font>
-}
+<font color="#ff0000">editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">theme</font><font color="#F3E651">::</font><font color="#7bc710">get_random ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> dir </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#ff0000">$(</font><font color="#ff0000">hx --health </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> awk </font><font color="#bb00ff">'/^Runtime directories/ { print $3 }'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tr </font><font color="#bb00ff">';'</font><font color="#ff0000"> </font><font color="#bb00ff">' '</font><font color="#F3E651">);</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -d </font><font color="#ff0000">$dir</font><font color="#ff0000">/themes </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> ls </font><font color="#ff0000">$dir</font><font color="#ff0000">/themes</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep -F </font><font color="#F3E651">.</font><font color="#ff0000">toml </font><font color="#F3E651">|</font><font color="#ff0000"> sort -R </font><font color="#F3E651">|</font><font color="#ff0000"> head -n </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> cut -d</font><font color="#F3E651">.</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font>
+<font color="#ff0000">}</font>
-editor::helix::theme::set () {
- <b><u><font color="#000000">local</font></u></b> -r theme=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b>
+<font color="#ff0000">editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">theme</font><font color="#F3E651">::</font><font color="#7bc710">set ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">theme</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
- <b><u><font color="#000000">local</font></u></b> -r config_file=$HELIX_CONFIG_DIR/config.toml
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">config_file</font><font color="#F3E651">=</font><font color="#ff0000">$HELIX_CONFIG_DIR</font><font color="#ff0000">/config</font><font color="#F3E651">.</font><font color="#ff0000">toml</font>
- sed <font color="#808080">"/^theme =/ { s/.*/theme = </font>\"<font color="#808080">$theme</font>\"<font color="#808080">/; }"</font> \
- $config_file &gt; $config_file.tmp &amp;&amp;
- mv $config_file.tmp $config_file
-}
+<font color="#ff0000"> sed </font><font color="#bb00ff">"/^theme =/ { s/.*/theme = </font><font color="#ffffff">\"</font><font color="#bb00ff">$theme</font><font color="#ffffff">\"</font><font color="#bb00ff">/; }"</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">$config_file</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#ff0000">$config_file</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font>
+<font color="#ff0000"> mv </font><font color="#ff0000">$config_file</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#ff0000">$config_file</font>
+<font color="#ff0000">}</font>
-<b><u><font color="#000000">if</font></u></b> [ -f $HELIX_CONFIG_DIR/config.toml ]; <b><u><font color="#000000">then</font></u></b>
- editor::helix::theme::<b><u><font color="#000000">set</font></u></b> $(editor::helix::theme::get_random)
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#ff0000">$HELIX_CONFIG_DIR</font><font color="#ff0000">/config</font><font color="#F3E651">.</font><font color="#ff0000">toml </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> editor</font><font color="#F3E651">::</font><font color="#ff0000">helix</font><font color="#F3E651">::</font><font color="#ff0000">theme</font><font color="#F3E651">::</font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">$(editor::helix::theme::get_random)</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>I hope you had some fun. E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-01-01-posts-from-october-to-december-2024.html b/gemfeed/2025-01-01-posts-from-october-to-december-2024.html
index 5c474849..b9f8b677 100644
--- a/gemfeed/2025-01-01-posts-from-october-to-december-2024.html
+++ b/gemfeed/2025-01-01-posts-from-october-to-december-2024.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Posts from October to December 2024</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-01-01-posts-from-october-to-december-2024.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024.gmi">Gemini</a>
</p>
@@ -349,11 +354,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-01-15-working-with-an-sre-interview.html b/gemfeed/2025-01-15-working-with-an-sre-interview.html
index 4658e48b..a7abd60e 100644
--- a/gemfeed/2025-01-15-working-with-an-sre-interview.html
+++ b/gemfeed/2025-01-15-working-with-an-sre-interview.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Working with an SRE Interview</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-01-15-working-with-an-sre-interview.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview.gmi">Gemini</a>
</p>
@@ -193,11 +198,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.html b/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.html
index 30252c8d..d9ff5126 100644
--- a/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.html
+++ b/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 3: Protecting from power cuts</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.gmi">Gemini</a>
</p>
@@ -62,11 +67,11 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0: ~ % doas freebsd-update fetch
-paul@f0: ~ % doas freebsd-update install
-paul@f0: ~ % doas freebsd-update -r <font color="#000000">14.2</font>-RELEASE upgrade
-paul@f0: ~ % doas freebsd-update install
-paul@f0: ~ % doas shutdown -r now
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update fetch</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update -r </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE upgrade</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas shutdown -r now</font>
</pre>
<br />
<span>And after rebooting, I ran:</span><br />
@@ -75,10 +80,10 @@ paul@f0: ~ % doas shutdown -r now
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0: ~ % doas freebsd-update install
-paul@f0: ~ % doas pkg update
-paul@f0: ~ % doas pkg upgrade
-paul@f0: ~ % doas shutdown -r now
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg update</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg upgrade</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas shutdown -r now</font>
</pre>
<br />
<span>And after another reboot, I was on 14.2:</span><br />
@@ -87,9 +92,9 @@ paul@f0: ~ % doas shutdown -r now
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % uname -a
-FreeBSD f0.lan.buetow.org <font color="#000000">14.2</font>-RELEASE FreeBSD <font color="#000000">14.2</font>-RELEASE
- releng/<font color="#000000">14.2</font>-n<font color="#000000">269506</font>-c8918d6c7412 GENERIC amd64
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> uname -a</font>
+<font color="#ff0000">FreeBSD f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE </font>
+<font color="#ff0000"> releng</font><font color="#F3E651">/</font><font color="#bb00ff">14.2</font><font color="#ff0000">-n</font><font color="#bb00ff">269506</font><font color="#ff0000">-c8918d6c7412 GENERIC amd64</font>
</pre>
<br />
<span>And, of course, I ran this on all 3 nodes!</span><br />
@@ -135,8 +140,8 @@ FreeBSD f0.lan.buetow.org <font color="#000000">14.2</font>-RELEASE FreeBSD <fon
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0: ~ % doas dmesg | grep UPS
-ugen0.<font color="#000000">2</font>: &lt;American Power Conversion Back-UPS BX750MI&gt; at usbus0
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas dmesg </font><font color="#F3E651">|</font><font color="#ff0000"> grep UPS</font>
+<font color="#ff0000">ugen0</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">American Power Conversion Back-UPS BX750MI</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at usbus0</font>
</pre>
<br />
<h3 style='display: inline' id='apcupsd-installation'><span class='inlinecode'>apcupsd</span> Installation</h3><br />
@@ -147,7 +152,7 @@ ugen0.<font color="#000000">2</font>: &lt;American Power Conversion Back-UPS BX7
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0: ~ % doas install apcupsd
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas install apcupsd</font>
</pre>
<br />
<span>I have made the following modifications to the configuration file so that the UPS can be used via the USB interface:</span><br />
@@ -156,29 +161,29 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/usr/local/etc/apcupsd % diff -u apcupsd.conf.sample apcupsd.conf
---- apcupsd.conf.sample <font color="#000000">2024</font>-<font color="#000000">11</font>-<font color="#000000">01</font> <font color="#000000">16</font>:<font color="#000000">40</font>:<font color="#000000">42.000000000</font> +<font color="#000000">0200</font>
-+++ apcupsd.conf <font color="#000000">2024</font>-<font color="#000000">12</font>-<font color="#000000">03</font> <font color="#000000">10</font>:<font color="#000000">58</font>:<font color="#000000">24.009501000</font> +<font color="#000000">0200</font>
-@@ -<font color="#000000">31</font>,<font color="#000000">7</font> +<font color="#000000">31</font>,<font color="#000000">7</font> @@
- <i><font color="silver"># 940-1524C, 940-0024G, 940-0095A, 940-0095B,</font></i>
- <i><font color="silver"># 940-0095C, 940-0625A, M-04-02-2000</font></i>
- <i><font color="silver">#</font></i>
--UPSCABLE smart
-+UPSCABLE usb
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> diff -u apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font><font color="#F3E651">.</font><font color="#ff0000">sample apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">--- apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font><font color="#F3E651">.</font><font color="#ff0000">sample </font><font color="#bb00ff">2024</font><font color="#ff0000">-</font><font color="#bb00ff">11</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000"> </font><font color="#bb00ff">16</font><font color="#F3E651">:</font><font color="#bb00ff">40</font><font color="#F3E651">:</font><font color="#bb00ff">42.000000000</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
+<font color="#F3E651">+++</font><font color="#ff0000"> apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf </font><font color="#bb00ff">2024</font><font color="#ff0000">-</font><font color="#bb00ff">12</font><font color="#ff0000">-</font><font color="#bb00ff">03</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">58</font><font color="#F3E651">:</font><font color="#bb00ff">24.009501000</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
+<font color="#ff0000">@@ -</font><font color="#bb00ff">31</font><font color="#F3E651">,</font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">31</font><font color="#F3E651">,</font><font color="#bb00ff">7</font><font color="#ff0000"> @@</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># 940-1524C, 940-0024G, 940-0095A, 940-0095B,</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># 940-0095C, 940-0625A, M-04-02-2000</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab">#</font></i>
+<font color="#ff0000">-UPSCABLE smart</font>
+<font color="#F3E651">+</font><font color="#ff0000">UPSCABLE usb</font>
- <i><font color="silver"># To get apcupsd to work, in addition to defining the cable</font></i>
- <i><font color="silver"># above, you must also define a UPSTYPE, which corresponds to</font></i>
-@@ -<font color="#000000">88</font>,<font color="#000000">8</font> +<font color="#000000">88</font>,<font color="#000000">10</font> @@
- <i><font color="silver"># that apcupsd binds to that particular unit</font></i>
- <i><font color="silver"># (helpful if you have more than one USB UPS).</font></i>
- <i><font color="silver">#</font></i>
--UPSTYPE apcsmart
--DEVICE /dev/usv
-+UPSTYPE usb
-+DEVICE
+<font color="#ff0000"> </font><i><font color="#ababab"># To get apcupsd to work, in addition to defining the cable</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># above, you must also define a UPSTYPE, which corresponds to</font></i>
+<font color="#ff0000">@@ -</font><font color="#bb00ff">88</font><font color="#F3E651">,</font><font color="#bb00ff">8</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">88</font><font color="#F3E651">,</font><font color="#bb00ff">10</font><font color="#ff0000"> @@</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># that apcupsd binds to that particular unit</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># (helpful if you have more than one USB UPS).</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab">#</font></i>
+<font color="#ff0000">-UPSTYPE apcsmart</font>
+<font color="#ff0000">-DEVICE /dev/usv</font>
+<font color="#F3E651">+</font><font color="#ff0000">UPSTYPE usb</font>
+<font color="#F3E651">+</font><font color="#ff0000">DEVICE</font>
- <i><font color="silver"># POLLTIME &lt;int&gt;</font></i>
- <i><font color="silver"># Interval (in seconds) at which apcupsd polls the UPS for status. This</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># POLLTIME &lt;int&gt;</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># Interval (in seconds) at which apcupsd polls the UPS for status. This</font></i>
</pre>
<br />
<span>I left the remaining settings as the default ones; for example, the following are of main interest:</span><br />
@@ -201,10 +206,10 @@ MINUTES 3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/usr/local/etc/apcupsd % doas sysrc apcupsd_enable=YES
-apcupsd_enable: -&gt; YES
-paul@f0:/usr/local/etc/apcupsd % doas service apcupsd start
-Starting apcupsd.
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">apcupsd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">apcupsd_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> doas service apcupsd start</font>
+<font color="#ff0000">Starting apcupsd</font><font color="#F3E651">.</font>
</pre>
<br />
<h3 style='display: inline' id='ups-connectivity-test'>UPS Connectivity Test</h3><br />
@@ -215,43 +220,43 @@ Starting apcupsd.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % apcaccess
-APC : <font color="#000000">001</font>,<font color="#000000">035</font>,<font color="#000000">0857</font>
-DATE : <font color="#000000">2025</font>-<font color="#000000">01</font>-<font color="#000000">26</font> <font color="#000000">14</font>:<font color="#000000">43</font>:<font color="#000000">27</font> +<font color="#000000">0200</font>
-HOSTNAME : f0.lan.buetow.org
-VERSION : <font color="#000000">3.14</font>.<font color="#000000">14</font> (<font color="#000000">31</font> May <font color="#000000">2016</font>) freebsd
-UPSNAME : f0.lan.buetow.org
-CABLE : USB Cable
-DRIVER : USB UPS Driver
-UPSMODE : Stand Alone
-STARTTIME: <font color="#000000">2025</font>-<font color="#000000">01</font>-<font color="#000000">26</font> <font color="#000000">14</font>:<font color="#000000">43</font>:<font color="#000000">25</font> +<font color="#000000">0200</font>
-MODEL : Back-UPS BX750MI
-STATUS : ONLINE
-LINEV : <font color="#000000">230.0</font> Volts
-LOADPCT : <font color="#000000">4.0</font> Percent
-BCHARGE : <font color="#000000">100.0</font> Percent
-TIMELEFT : <font color="#000000">65.3</font> Minutes
-MBATTCHG : <font color="#000000">5</font> Percent
-MINTIMEL : <font color="#000000">3</font> Minutes
-MAXTIME : <font color="#000000">0</font> Seconds
-SENSE : Medium
-LOTRANS : <font color="#000000">145.0</font> Volts
-HITRANS : <font color="#000000">295.0</font> Volts
-ALARMDEL : No alarm
-BATTV : <font color="#000000">13.6</font> Volts
-LASTXFER : Automatic or explicit self <b><u><font color="#000000">test</font></u></b>
-NUMXFERS : <font color="#000000">0</font>
-TONBATT : <font color="#000000">0</font> Seconds
-CUMONBATT: <font color="#000000">0</font> Seconds
-XOFFBATT : N/A
-SELFTEST : NG
-STATFLAG : <font color="#000000">0x05000008</font>
-SERIALNO : 9B2414A03599
-BATTDATE : <font color="#000000">2001</font>-<font color="#000000">01</font>-<font color="#000000">01</font>
-NOMINV : <font color="#000000">230</font> Volts
-NOMBATTV : <font color="#000000">12.0</font> Volts
-NOMPOWER : <font color="#000000">410</font> Watts
-END APC : <font color="#000000">2025</font>-<font color="#000000">01</font>-<font color="#000000">26</font> <font color="#000000">14</font>:<font color="#000000">44</font>:<font color="#000000">06</font> +<font color="#000000">0200</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> apcaccess</font>
+<font color="#ff0000">APC </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">001</font><font color="#F3E651">,</font><font color="#bb00ff">035</font><font color="#F3E651">,</font><font color="#bb00ff">0857</font>
+<font color="#ff0000">DATE </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000"> </font><font color="#bb00ff">14</font><font color="#F3E651">:</font><font color="#bb00ff">43</font><font color="#F3E651">:</font><font color="#bb00ff">27</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
+<font color="#ff0000">HOSTNAME </font><font color="#F3E651">:</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">VERSION </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">3.14</font><font color="#F3E651">.</font><font color="#bb00ff">14</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">31</font><font color="#ff0000"> May </font><font color="#bb00ff">2016</font><font color="#F3E651">)</font><font color="#ff0000"> freebsd</font>
+<font color="#ff0000">UPSNAME </font><font color="#F3E651">:</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">CABLE </font><font color="#F3E651">:</font><font color="#ff0000"> USB Cable</font>
+<font color="#ff0000">DRIVER </font><font color="#F3E651">:</font><font color="#ff0000"> USB UPS Driver</font>
+<font color="#ff0000">UPSMODE </font><font color="#F3E651">:</font><font color="#ff0000"> Stand Alone</font>
+<font color="#ff0000">STARTTIME</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000"> </font><font color="#bb00ff">14</font><font color="#F3E651">:</font><font color="#bb00ff">43</font><font color="#F3E651">:</font><font color="#bb00ff">25</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
+<font color="#ff0000">MODEL </font><font color="#F3E651">:</font><font color="#ff0000"> Back-UPS BX750MI</font>
+<font color="#ff0000">STATUS </font><font color="#F3E651">:</font><font color="#ff0000"> ONLINE</font>
+<font color="#ff0000">LINEV </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">230.0</font><font color="#ff0000"> Volts</font>
+<font color="#ff0000">LOADPCT </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">4.0</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">BCHARGE </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">100.0</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">TIMELEFT </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">65.3</font><font color="#ff0000"> Minutes</font>
+<font color="#ff0000">MBATTCHG </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">MINTIMEL </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> Minutes</font>
+<font color="#ff0000">MAXTIME </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> Seconds</font>
+<font color="#ff0000">SENSE </font><font color="#F3E651">:</font><font color="#ff0000"> Medium</font>
+<font color="#ff0000">LOTRANS </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">145.0</font><font color="#ff0000"> Volts</font>
+<font color="#ff0000">HITRANS </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">295.0</font><font color="#ff0000"> Volts</font>
+<font color="#ff0000">ALARMDEL </font><font color="#F3E651">:</font><font color="#ff0000"> No alarm</font>
+<font color="#ff0000">BATTV </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">13.6</font><font color="#ff0000"> Volts</font>
+<font color="#ff0000">LASTXFER </font><font color="#F3E651">:</font><font color="#ff0000"> Automatic or explicit self </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">NUMXFERS </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000">TONBATT </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> Seconds</font>
+<font color="#ff0000">CUMONBATT</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> Seconds</font>
+<font color="#ff0000">XOFFBATT </font><font color="#F3E651">:</font><font color="#ff0000"> N/A</font>
+<font color="#ff0000">SELFTEST </font><font color="#F3E651">:</font><font color="#ff0000"> NG</font>
+<font color="#ff0000">STATFLAG </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0x05000008</font>
+<font color="#ff0000">SERIALNO </font><font color="#F3E651">:</font><font color="#ff0000"> 9B2414A03599</font>
+<font color="#ff0000">BATTDATE </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2001</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000">-</font><font color="#bb00ff">01</font>
+<font color="#ff0000">NOMINV </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">230</font><font color="#ff0000"> Volts</font>
+<font color="#ff0000">NOMBATTV </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">12.0</font><font color="#ff0000"> Volts</font>
+<font color="#ff0000">NOMPOWER </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">410</font><font color="#ff0000"> Watts</font>
+<font color="#ff0000">END APC </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000"> </font><font color="#bb00ff">14</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#F3E651">:</font><font color="#bb00ff">06</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
</pre>
<br />
<h2 style='display: inline' id='apc-info-on-partner-nodes'>APC Info on Partner Nodes:</h2><br />
@@ -270,10 +275,10 @@ END APC : <font color="#000000">2025</font>-<font color="#000000">01</font>-<fo
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f1:~ % apcaccess -h f0.lan.buetow.org | grep Percent
-LOADPCT : <font color="#000000">12.0</font> Percent
-BCHARGE : <font color="#000000">94.0</font> Percent
-MBATTCHG : <font color="#000000">5</font> Percent
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> apcaccess -h f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org </font><font color="#F3E651">|</font><font color="#ff0000"> grep Percent</font>
+<font color="#ff0000">LOADPCT </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">12.0</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">BCHARGE </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">94.0</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">MBATTCHG </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> Percent</font>
</pre>
<br />
<span>But I want the daemon to be configured and enabled in such a way that it connects to the master UPS node (the one with the UPS connected via USB) so that it can also initiate a system shutdown when the UPS battery reaches low levels. For that, <span class='inlinecode'>apcupsd</span> itself needs to be aware of the UPS status.</span><br />
@@ -284,52 +289,52 @@ MBATTCHG : <font color="#000000">5</font> Percent
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f2:/usr/local/etc/apcupsd % diff -u apcupsd.conf.sample apcupsd.conf
---- apcupsd.conf.sample <font color="#000000">2024</font>-<font color="#000000">11</font>-<font color="#000000">01</font> <font color="#000000">16</font>:<font color="#000000">40</font>:<font color="#000000">42.000000000</font> +<font color="#000000">0200</font>
-+++ apcupsd.conf <font color="#000000">2025</font>-<font color="#000000">01</font>-<font color="#000000">26</font> <font color="#000000">15</font>:<font color="#000000">52</font>:<font color="#000000">45.108469000</font> +<font color="#000000">0200</font>
-@@ -<font color="#000000">31</font>,<font color="#000000">7</font> +<font color="#000000">31</font>,<font color="#000000">7</font> @@
- <i><font color="silver"># 940-1524C, 940-0024G, 940-0095A, 940-0095B,</font></i>
- <i><font color="silver"># 940-0095C, 940-0625A, M-04-02-2000</font></i>
- <i><font color="silver">#</font></i>
--UPSCABLE smart
-+UPSCABLE ether
+<pre><font color="#ff0000">paul@f2</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> diff -u apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font><font color="#F3E651">.</font><font color="#ff0000">sample apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">--- apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font><font color="#F3E651">.</font><font color="#ff0000">sample </font><font color="#bb00ff">2024</font><font color="#ff0000">-</font><font color="#bb00ff">11</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000"> </font><font color="#bb00ff">16</font><font color="#F3E651">:</font><font color="#bb00ff">40</font><font color="#F3E651">:</font><font color="#bb00ff">42.000000000</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
+<font color="#F3E651">+++</font><font color="#ff0000"> apcupsd</font><font color="#F3E651">.</font><font color="#ff0000">conf </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">01</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000"> </font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">52</font><font color="#F3E651">:</font><font color="#bb00ff">45.108469000</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">0200</font>
+<font color="#ff0000">@@ -</font><font color="#bb00ff">31</font><font color="#F3E651">,</font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">31</font><font color="#F3E651">,</font><font color="#bb00ff">7</font><font color="#ff0000"> @@</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># 940-1524C, 940-0024G, 940-0095A, 940-0095B,</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># 940-0095C, 940-0625A, M-04-02-2000</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab">#</font></i>
+<font color="#ff0000">-UPSCABLE smart</font>
+<font color="#F3E651">+</font><font color="#ff0000">UPSCABLE ether</font>
- <i><font color="silver"># To get apcupsd to work, in addition to defining the cable</font></i>
- <i><font color="silver"># above, you must also define a UPSTYPE, which corresponds to</font></i>
-@@ -<font color="#000000">52</font>,<font color="#000000">7</font> +<font color="#000000">52</font>,<font color="#000000">6</font> @@
- <i><font color="silver"># Network Information Server. This is used if the</font></i>
- <i><font color="silver"># UPS powering your computer is connected to a</font></i>
- <i><font color="silver"># different computer for monitoring.</font></i>
--<i><font color="silver">#</font></i>
- <i><font color="silver"># snmp hostname:port:vendor:community</font></i>
- <i><font color="silver"># SNMP network link to an SNMP-enabled UPS device.</font></i>
- <i><font color="silver"># Hostname is the ip address or hostname of the UPS</font></i>
-@@ -<font color="#000000">88</font>,<font color="#000000">8</font> +<font color="#000000">87</font>,<font color="#000000">8</font> @@
- <i><font color="silver"># that apcupsd binds to that particular unit</font></i>
- <i><font color="silver"># (helpful if you have more than one USB UPS).</font></i>
- <i><font color="silver">#</font></i>
--UPSTYPE apcsmart
--DEVICE /dev/usv
-+UPSTYPE net
-+DEVICE f0.lan.buetow.org:<font color="#000000">3551</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># To get apcupsd to work, in addition to defining the cable</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># above, you must also define a UPSTYPE, which corresponds to</font></i>
+<font color="#ff0000">@@ -</font><font color="#bb00ff">52</font><font color="#F3E651">,</font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">52</font><font color="#F3E651">,</font><font color="#bb00ff">6</font><font color="#ff0000"> @@</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Network Information Server. This is used if the</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># UPS powering your computer is connected to a</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># different computer for monitoring.</font></i>
+<font color="#ff0000">-</font><i><font color="#ababab">#</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># snmp hostname:port:vendor:community</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># SNMP network link to an SNMP-enabled UPS device.</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># Hostname is the ip address or hostname of the UPS</font></i>
+<font color="#ff0000">@@ -</font><font color="#bb00ff">88</font><font color="#F3E651">,</font><font color="#bb00ff">8</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">87</font><font color="#F3E651">,</font><font color="#bb00ff">8</font><font color="#ff0000"> @@</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># that apcupsd binds to that particular unit</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># (helpful if you have more than one USB UPS).</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab">#</font></i>
+<font color="#ff0000">-UPSTYPE apcsmart</font>
+<font color="#ff0000">-DEVICE /dev/usv</font>
+<font color="#F3E651">+</font><font color="#ff0000">UPSTYPE net</font>
+<font color="#F3E651">+</font><font color="#ff0000">DEVICE f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">3551</font>
- <i><font color="silver"># POLLTIME &lt;int&gt;</font></i>
- <i><font color="silver"># Interval (in seconds) at which apcupsd polls the UPS for status. This</font></i>
-@@ -<font color="#000000">147</font>,<font color="#000000">12</font> +<font color="#000000">146</font>,<font color="#000000">12</font> @@
- <i><font color="silver"># If during a power failure, the remaining battery percentage</font></i>
- <i><font color="silver"># (as reported by the UPS) is below or equal to BATTERYLEVEL,</font></i>
- <i><font color="silver"># apcupsd will initiate a system shutdown.</font></i>
--BATTERYLEVEL <font color="#000000">5</font>
-+BATTERYLEVEL <font color="#000000">10</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># POLLTIME &lt;int&gt;</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># Interval (in seconds) at which apcupsd polls the UPS for status. This</font></i>
+<font color="#ff0000">@@ -</font><font color="#bb00ff">147</font><font color="#F3E651">,</font><font color="#bb00ff">12</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#bb00ff">146</font><font color="#F3E651">,</font><font color="#bb00ff">12</font><font color="#ff0000"> @@</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># If during a power failure, the remaining battery percentage</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># (as reported by the UPS) is below or equal to BATTERYLEVEL,</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># apcupsd will initiate a system shutdown.</font></i>
+<font color="#ff0000">-BATTERYLEVEL </font><font color="#bb00ff">5</font>
+<font color="#F3E651">+</font><font color="#ff0000">BATTERYLEVEL </font><font color="#bb00ff">10</font>
- <i><font color="silver"># If during a power failure, the remaining runtime in minutes</font></i>
- <i><font color="silver"># (as calculated internally by the UPS) is below or equal to MINUTES,</font></i>
- <i><font color="silver"># apcupsd, will initiate a system shutdown.</font></i>
--MINUTES <font color="#000000">3</font>
-+MINUTES <font color="#000000">6</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># If during a power failure, the remaining runtime in minutes</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># (as calculated internally by the UPS) is below or equal to MINUTES,</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># apcupsd, will initiate a system shutdown.</font></i>
+<font color="#ff0000">-MINUTES </font><font color="#bb00ff">3</font>
+<font color="#F3E651">+</font><font color="#ff0000">MINUTES </font><font color="#bb00ff">6</font>
- <i><font color="silver"># If during a power failure, the UPS has run on batteries for TIMEOUT</font></i>
- <i><font color="silver"># many seconds or longer, apcupsd will initiate a system shutdown.</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># If during a power failure, the UPS has run on batteries for TIMEOUT</font></i>
+<font color="#ff0000"> </font><i><font color="#ababab"># many seconds or longer, apcupsd will initiate a system shutdown.</font></i>
</pre>
<span>So I also ran the following commands on <span class='inlinecode'>f1</span> and <span class='inlinecode'>f2</span>:</span><br />
@@ -338,10 +343,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f1:/usr/local/etc/apcupsd % doas sysrc apcupsd_enable=YES
-apcupsd_enable: -&gt; YES
-paul@f1:/usr/local/etc/apcupsd % doas service apcupsd start
-Starting apcupsd.
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">apcupsd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">apcupsd_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> doas service apcupsd start</font>
+<font color="#ff0000">Starting apcupsd</font><font color="#F3E651">.</font>
</pre>
<br />
<span>And then I was able to connect to localhost via the <span class='inlinecode'>apcaccess</span> command:</span><br />
@@ -350,10 +355,10 @@ Starting apcupsd.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f1:~ % doas apcaccess | grep Percent
-LOADPCT : <font color="#000000">5.0</font> Percent
-BCHARGE : <font color="#000000">95.0</font> Percent
-MBATTCHG : <font color="#000000">5</font> Percent
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas apcaccess </font><font color="#F3E651">|</font><font color="#ff0000"> grep Percent</font>
+<font color="#ff0000">LOADPCT </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5.0</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">BCHARGE </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">95.0</font><font color="#ff0000"> Percent</font>
+<font color="#ff0000">MBATTCHG </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> Percent</font>
</pre>
<br />
<h2 style='display: inline' id='power-outage-simulation'>Power outage simulation</h2><br />
@@ -375,8 +380,8 @@ Power failure. Running on UPS batteries.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/usr/local/etc/apcupsd % apcaccess -p TIMELEFT
-<font color="#000000">63.9</font> Minutes
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/usr/local/etc/apcupsd </font><font color="#F3E651">%</font><font color="#ff0000"> apcaccess -p TIMELEFT</font>
+<font color="#bb00ff">63.9</font><font color="#ff0000"> Minutes</font>
</pre>
<br />
<span>And after around one hour (<span class='inlinecode'>f1</span> and <span class='inlinecode'>f2</span> a bit earlier, <span class='inlinecode'>f0</span> a bit later due to the different <span class='inlinecode'>BATTERYLEVEL</span> and <span class='inlinecode'>MINUTES</span> settings outlined earlier), the following broadcast was sent out:</span><br />
@@ -438,11 +443,12 @@ Jan 26 17:36:32 f2 apcupsd[2159]: apcupsd shutdown succeeded
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-02-08-random-weird-things-ii.html b/gemfeed/2025-02-08-random-weird-things-ii.html
index 64a37731..6214f252 100644
--- a/gemfeed/2025-02-08-random-weird-things-ii.html
+++ b/gemfeed/2025-02-08-random-weird-things-ii.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Random Weird Things - Part Ⅱ</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-02-08-random-weird-things-ii.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-02-08-random-weird-things-ii.gmi">Gemini</a>
</p>
@@ -80,25 +85,25 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> main
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> main</font>
-<b><u><font color="#000000">import</font></u></b> <font color="#808080">"log"</font>
+<b><font color="#ffffff">import</font></b><font color="#ff0000"> </font><font color="#bb00ff">"log"</font>
-<b><u><font color="#000000">type</font></u></b> fun <b><u><font color="#000000">func</font></u></b>() <b><font color="#000000">string</font></b>
+<b><font color="#ffffff">type</font></b><font color="#ff0000"> fun </font><b><font color="#ffffff">func</font></b><font color="#F3E651">()</font><font color="#ff0000"> </font><b><font color="#F35E1E">string</font></b>
-<b><u><font color="#000000">func</font></u></b> (f fun) Bar() <b><font color="#000000">string</font></b> {
- <b><u><font color="#000000">return</font></u></b> <font color="#808080">"Bar"</font>
-}
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">f fun</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#7bc710">Bar</font><font color="#F3E651">()</font><font color="#ff0000"> </font><b><font color="#F35E1E">string</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Bar"</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">func</font></u></b> main() {
- <b><u><font color="#000000">var</font></u></b> f fun = <b><u><font color="#000000">func</font></u></b>() <b><font color="#000000">string</font></b> {
- <b><u><font color="#000000">return</font></u></b> <font color="#808080">"Foo"</font>
- }
- log.Println(<font color="#808080">"Example 1: "</font>, f())
- log.Println(<font color="#808080">"Example 2: "</font>, f.Bar())
- log.Println(<font color="#808080">"Example 3: "</font>, fun(f.Bar).Bar())
- log.Println(<font color="#808080">"Example 4: "</font>, fun(fun(f.Bar).Bar).Bar())
-}
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">var</font></b><font color="#ff0000"> f fun </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">func</font></b><font color="#F3E651">()</font><font color="#ff0000"> </font><b><font color="#F35E1E">string</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Foo"</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> log</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#bb00ff">"Example 1: "</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#7bc710">f</font><font color="#F3E651">())</font>
+<font color="#ff0000"> log</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#bb00ff">"Example 2: "</font><font color="#F3E651">,</font><font color="#ff0000"> f</font><font color="#F3E651">.</font><font color="#7bc710">Bar</font><font color="#F3E651">())</font>
+<font color="#ff0000"> log</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#bb00ff">"Example 3: "</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#7bc710">fun</font><font color="#F3E651">(</font><font color="#ff0000">f</font><font color="#F3E651">.</font><font color="#ff0000">Bar</font><font color="#F3E651">).</font><font color="#7bc710">Bar</font><font color="#F3E651">())</font>
+<font color="#ff0000"> log</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#bb00ff">"Example 4: "</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#7bc710">fun</font><font color="#F3E651">(</font><font color="#7bc710">fun</font><font color="#F3E651">(</font><font color="#ff0000">f</font><font color="#F3E651">.</font><font color="#ff0000">Bar</font><font color="#F3E651">).</font><font color="#ff0000">Bar</font><font color="#F3E651">).</font><font color="#7bc710">Bar</font><font color="#F3E651">())</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>It runs just fine:</span><br />
@@ -107,11 +112,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>❯ go run main.go
-<font color="#000000">2025</font>/<font color="#000000">02</font>/<font color="#000000">07</font> <font color="#000000">22</font>:<font color="#000000">56</font>:<font color="#000000">14</font> Example <font color="#000000">1</font>: Foo
-<font color="#000000">2025</font>/<font color="#000000">02</font>/<font color="#000000">07</font> <font color="#000000">22</font>:<font color="#000000">56</font>:<font color="#000000">14</font> Example <font color="#000000">2</font>: Bar
-<font color="#000000">2025</font>/<font color="#000000">02</font>/<font color="#000000">07</font> <font color="#000000">22</font>:<font color="#000000">56</font>:<font color="#000000">14</font> Example <font color="#000000">3</font>: Bar
-<font color="#000000">2025</font>/<font color="#000000">02</font>/<font color="#000000">07</font> <font color="#000000">22</font>:<font color="#000000">56</font>:<font color="#000000">14</font> Example <font color="#000000">4</font>: Bar
+<pre><font color="#ff0000">❯ go run main</font><font color="#F3E651">.</font><font color="#ff0000">go</font>
+<font color="#bb00ff">2025</font><font color="#F3E651">/</font><font color="#bb00ff">02</font><font color="#F3E651">/</font><font color="#bb00ff">07</font><font color="#ff0000"> </font><font color="#bb00ff">22</font><font color="#F3E651">:</font><font color="#bb00ff">56</font><font color="#F3E651">:</font><font color="#bb00ff">14</font><font color="#ff0000"> Example </font><font color="#bb00ff">1</font><font color="#F3E651">:</font><font color="#ff0000"> Foo</font>
+<font color="#bb00ff">2025</font><font color="#F3E651">/</font><font color="#bb00ff">02</font><font color="#F3E651">/</font><font color="#bb00ff">07</font><font color="#ff0000"> </font><font color="#bb00ff">22</font><font color="#F3E651">:</font><font color="#bb00ff">56</font><font color="#F3E651">:</font><font color="#bb00ff">14</font><font color="#ff0000"> Example </font><font color="#bb00ff">2</font><font color="#F3E651">:</font><font color="#ff0000"> Bar</font>
+<font color="#bb00ff">2025</font><font color="#F3E651">/</font><font color="#bb00ff">02</font><font color="#F3E651">/</font><font color="#bb00ff">07</font><font color="#ff0000"> </font><font color="#bb00ff">22</font><font color="#F3E651">:</font><font color="#bb00ff">56</font><font color="#F3E651">:</font><font color="#bb00ff">14</font><font color="#ff0000"> Example </font><font color="#bb00ff">3</font><font color="#F3E651">:</font><font color="#ff0000"> Bar</font>
+<font color="#bb00ff">2025</font><font color="#F3E651">/</font><font color="#bb00ff">02</font><font color="#F3E651">/</font><font color="#bb00ff">07</font><font color="#ff0000"> </font><font color="#bb00ff">22</font><font color="#F3E651">:</font><font color="#bb00ff">56</font><font color="#F3E651">:</font><font color="#bb00ff">14</font><font color="#ff0000"> Example </font><font color="#bb00ff">4</font><font color="#F3E651">:</font><font color="#ff0000"> Bar</font>
</pre>
<br />
<h2 style='display: inline' id='macos'>macOS</h2><br />
@@ -130,20 +135,20 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>❯ touch Maß
-❯ ls -l
--rw-r--r--@ <font color="#000000">1</font> paul wheel <font color="#000000">0</font> Feb <font color="#000000">7</font> <font color="#000000">23</font>:<font color="#000000">02</font> Maß
-❯ touch Mass
-❯ ls -l
--rw-r--r--@ <font color="#000000">1</font> paul wheel <font color="#000000">0</font> Feb <font color="#000000">7</font> <font color="#000000">23</font>:<font color="#000000">02</font> Maß
-❯ rm Mass
-❯ ls -l
+<pre><font color="#ff0000">❯ touch Maß</font>
+<font color="#ff0000">❯ ls -l</font>
+<font color="#ff0000">-rw-r--r--@ </font><font color="#bb00ff">1</font><font color="#ff0000"> paul wheel </font><font color="#bb00ff">0</font><font color="#ff0000"> Feb </font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#ff0000"> Maß</font>
+<font color="#ff0000">❯ touch Mass</font>
+<font color="#ff0000">❯ ls -l</font>
+<font color="#ff0000">-rw-r--r--@ </font><font color="#bb00ff">1</font><font color="#ff0000"> paul wheel </font><font color="#bb00ff">0</font><font color="#ff0000"> Feb </font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#ff0000"> Maß</font>
+<font color="#ff0000">❯ rm Mass</font>
+<font color="#ff0000">❯ ls -l</font>
-❯ touch Mass
-❯ ls -ltr
--rw-r--r--@ <font color="#000000">1</font> paul wheel <font color="#000000">0</font> Feb <font color="#000000">7</font> <font color="#000000">23</font>:<font color="#000000">02</font> Mass
-❯ rm Maß
-❯ ls -l
+<font color="#ff0000">❯ touch Mass</font>
+<font color="#ff0000">❯ ls -ltr</font>
+<font color="#ff0000">-rw-r--r--@ </font><font color="#bb00ff">1</font><font color="#ff0000"> paul wheel </font><font color="#bb00ff">0</font><font color="#ff0000"> Feb </font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#ff0000"> Mass</font>
+<font color="#ff0000">❯ rm Maß</font>
+<font color="#ff0000">❯ ls -l</font>
</pre>
<br />
@@ -187,16 +192,16 @@ ADFS::4.$.Documents.Techwriter.Myfile
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>arr = {<font color="#000000">10</font>, <font color="#000000">20</font>, <font color="#000000">30</font>, <font color="#000000">40</font>, <font color="#000000">50</font>}
-print(arr[<font color="#000000">1</font>]) <i><font color="silver">-- Accessing the first element</font></i>
+<pre><font color="#ff0000">arr </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#bb00ff">10</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">20</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">30</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">40</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">50</font><font color="#F3E651">}</font>
+<font color="#7bc710">print</font><font color="#F3E651">(</font><font color="#ff0000">arr</font><font color="#F3E651">[</font><font color="#bb00ff">1</font><font color="#F3E651">])</font><font color="#ff0000"> </font><i><font color="#ababab">-- Accessing the first element</font></i>
</pre>
<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>❯ lua foo.lua
-<font color="#000000">10</font>
+<pre><font color="#ff0000">❯ lua foo</font><font color="#F3E651">.</font><font color="#ff0000">lua</font>
+<font color="#bb00ff">10</font>
</pre>
<br />
<span>One-based indexing is more natural for human-readable, mathematical, and theoretical contexts, where counting traditionally starts from one.</span><br />
@@ -211,45 +216,45 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># (C) 2006 by Paul C. Buetow</font></i>
+<pre><i><font color="#ababab"># (C) 2006 by Paul C. Buetow</font></i>
-Christmas:{time;<i><font color="silver">#!!!</font></i>
+<font color="#ff0000">Christmas</font><font color="#F3E651">:</font><font color="#F3E651">{</font><font color="#ff0000">time</font><font color="#F3E651">;</font><i><font color="#ababab">#!!!</font></i>
-Children: <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">tell</font></u></b> $wishes;
+<font color="#ff0000">Children</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">tell</font></b><font color="#ff0000"> </font><font color="#ff0000">$wishes</font><font color="#F3E651">;</font>
-Santa: <b><u><font color="#000000">for</font></u></b> $each (@children) {
-BEGIN { <b><u><font color="#000000">read</font></u></b> $each, $their, wishes <b><u><font color="#000000">and</font></u></b> study them; <b><u><font color="#000000">use</font></u></b> Memoize<i><font color="silver">#ing</font></i>
+<font color="#ff0000">Santa</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@children</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font>
+<font color="#ff0000">BEGIN </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$their</font><font color="#F3E651">,</font><font color="#ff0000"> wishes </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> study them</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">use</font></b><font color="#ff0000"> Memoize</font><i><font color="#ababab">#ing</font></i>
-} <b><u><font color="#000000">use</font></u></b> constant gift, <font color="#808080">'wrapping'</font>;
-<b><u><font color="#000000">package</font></u></b> Gifts; <b><u><font color="#000000">pack</font></u></b> $each, gift <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">bless</font></u></b> $each <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">goto</font></u></b> deliver
-or <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">import</font></u></b> <b><u><font color="#000000">if</font></u></b> not <b><u><font color="#000000">local</font></u></b> $available,!!! HO, HO, HO;
+<font color="#F3E651">}</font><font color="#ff0000"> </font><b><font color="#ffffff">use</font></b><font color="#ff0000"> constant gift</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'wrapping'</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">package</font></b><font color="#ff0000"> Gifts</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">pack</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#F3E651">,</font><font color="#ff0000"> gift </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">bless</font></b><font color="#ff0000"> </font><font color="#ff0000">$each</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">goto</font></b><font color="#ff0000"> deliver</font>
+<font color="#ff0000">or </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#ababab">import</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">$available</font><font color="#F3E651">,!!!</font><font color="#ff0000"> HO</font><font color="#F3E651">,</font><font color="#ff0000"> HO</font><font color="#F3E651">,</font><font color="#ff0000"> HO</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">redo</font></u></b> Santa, <b><u><font color="#000000">pipe</font></u></b> $gifts, to_childs;
-<b><u><font color="#000000">redo</font></u></b> Santa <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">return</font></u></b> <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">last</font></u></b> one, is, delivered;
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">pipe</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">,</font><font color="#ff0000"> to_childs</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">last</font></b><font color="#ff0000"> one</font><font color="#F3E651">,</font><font color="#ff0000"> is</font><font color="#F3E651">,</font><font color="#ff0000"> delivered</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
-deliver: gift <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">require</font></u></b> diagnostics <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">our</font></u></b> $gifts ,not break;
-<b><u><font color="#000000">do</font></u></b>{ <b><u><font color="#000000">use</font></u></b> NEXT; time; <b><u><font color="#000000">tied</font></u></b> $gifts} <b><u><font color="#000000">if</font></u></b> broken <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">dump</font></u></b> the, broken, ones;
-The_children: <b><u><font color="#000000">sleep</font></u></b> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">wait</font></u></b> <b><u><font color="#000000">for</font></u></b> (<b><u><font color="#000000">each</font></u></b> %gift) <b><u><font color="#000000">and</font></u></b> try { to =&gt; <b><u><font color="#000000">untie</font></u></b> $gifts };
+<font color="#ff0000">deliver</font><font color="#F3E651">:</font><font color="#ff0000"> gift </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">require</font></b><font color="#ff0000"> diagnostics </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#ff0000"> </font><font color="#F3E651">,</font><font color="#ff0000">not break</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">do</font></b><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">use</font></b><font color="#ff0000"> NEXT</font><font color="#F3E651">;</font><font color="#ff0000"> time</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">tied</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">}</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> broken </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">dump</font></b><font color="#ff0000"> the</font><font color="#F3E651">,</font><font color="#ff0000"> broken</font><font color="#F3E651">,</font><font color="#ff0000"> ones</font><font color="#F3E651">;</font>
+<font color="#ff0000">The_children</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">sleep</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">wait</font></b><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#ffffff">each</font></b><font color="#ff0000"> </font><font color="#ff0000">%gift</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> try </font><font color="#F3E651">{</font><font color="#ff0000"> to </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><b><font color="#ffffff">untie</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">redo</font></u></b> Santa, <b><u><font color="#000000">pipe</font></u></b> $gifts, to_childs;
-<b><u><font color="#000000">redo</font></u></b> Santa <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">return</font></u></b> <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">last</font></u></b> one, is, delivered;
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">pipe</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">,</font><font color="#ff0000"> to_childs</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">last</font></b><font color="#ff0000"> one</font><font color="#F3E651">,</font><font color="#ff0000"> is</font><font color="#F3E651">,</font><font color="#ff0000"> delivered</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
-The_christmas_tree: formline <b><u><font color="#000000">s</font></u></b><font color="#808080">/ /childrens/</font>, $gifts;
-<b><u><font color="#000000">alarm</font></u></b> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">warn</font></u></b> <b><u><font color="#000000">if</font></u></b> not <b><u><font color="#000000">exists</font></u></b> $Christmas{ tree}, @t, $ENV{HOME};
-<b><u><font color="#000000">write</font></u></b> &lt;&lt;EMail
- to the parents to buy a new christmas tree!!!!<font color="#000000">111</font>
- <b><u><font color="#000000">and</font></u></b> send the
-EMail
-;<b><u><font color="#000000">wait</font></u></b> <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">redo</font></u></b> deliver until <b><u><font color="#000000">defined</font></u></b> <b><u><font color="#000000">local</font></u></b> $tree;
+<font color="#ff0000">The_christmas_tree</font><font color="#F3E651">:</font><font color="#ff0000"> formline </font><b><font color="#ffffff">s</font></b><font color="#bb00ff">/ /childrens/</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">alarm</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">warn</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> not </font><b><font color="#ffffff">exists</font></b><font color="#ff0000"> </font><font color="#ff0000">$Christmas</font><font color="#F3E651">{</font><font color="#ff0000"> tree</font><font color="#F3E651">}</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">@t</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$ENV</font><font color="#F3E651">{</font><font color="#ff0000">HOME</font><font color="#F3E651">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font>
+<b><font color="#ffffff">write</font></b><font color="#ff0000"> </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">EMail</font>
+<font color="#ff0000"> to the parents to buy a new christmas tree</font><font color="#F3E651">!!!!</font><font color="#bb00ff">111</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> send the</font>
+<font color="#ff0000">EMail</font>
+<font color="#F3E651">;</font><b><font color="#ffffff">wait</font></b><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">redo</font></b><font color="#ff0000"> deliver until </font><b><font color="#ffffff">defined</font></b><font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">$tree</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">redo</font></u></b> Santa, <b><u><font color="#000000">pipe</font></u></b> $gifts, to_childs;
-<b><u><font color="#000000">redo</font></u></b> Santa <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">return</font></u></b> <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">last</font></u></b> one, is, delivered ;}
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa</font><font color="#F3E651">,</font><font color="#ff0000"> </font><b><font color="#ffffff">pipe</font></b><font color="#ff0000"> </font><font color="#ff0000">$gifts</font><font color="#F3E651">,</font><font color="#ff0000"> to_childs</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">redo</font></b><font color="#ff0000"> Santa </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">last</font></b><font color="#ff0000"> one</font><font color="#F3E651">,</font><font color="#ff0000"> is</font><font color="#F3E651">,</font><font color="#ff0000"> delivered </font><font color="#F3E651">;</font><font color="#F3E651">}</font>
-END {} <b><u><font color="#000000">our</font></u></b> $mission <b><u><font color="#000000">and</font></u></b> <b><u><font color="#000000">do</font></u></b> <b><u><font color="#000000">sleep</font></u></b> until <b><u><font color="#000000">next</font></u></b> Christmas ;}
+<font color="#ff0000">END </font><font color="#F3E651">{}</font><font color="#ff0000"> </font><b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">$mission</font><font color="#ff0000"> </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><b><font color="#ffffff">sleep</font></b><font color="#ff0000"> until </font><b><font color="#ffffff">next</font></b><font color="#ff0000"> Christmas </font><font color="#F3E651">;</font><font color="#F3E651">}</font>
-__END__
+<font color="#ff0000">__END__</font>
-This is perl, v5.<font color="#000000">8.8</font> built <b><u><font color="#000000">for</font></u></b> i386-freebsd-64int
+<font color="#ff0000">This is perl</font><font color="#F3E651">,</font><font color="#ff0000"> v5</font><font color="#F3E651">.</font><font color="#bb00ff">8.8</font><font color="#ff0000"> built </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i386</font><font color="#F3E651">-</font><font color="#ff0000">freebsd</font><font color="#F3E651">-</font><font color="#ff0000">64int</font>
</pre>
<br />
<a class='textlink' href='./2008-06-26-perl-poetry.html'>More Perl Poetry of mine</a><br />
@@ -284,11 +289,12 @@ This is perl, v5.<font color="#000000">8.8</font> built <b><u><font color="#0000
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-03-05-sharing-on-social-media-with-gos.html b/gemfeed/2025-03-05-sharing-on-social-media-with-gos.html
index 2fe45356..902bbc78 100644
--- a/gemfeed/2025-03-05-sharing-on-social-media-with-gos.html
+++ b/gemfeed/2025-03-05-sharing-on-social-media-with-gos.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sharing on Social Media with Gos v1.0.0</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-03-05-sharing-on-social-media-with-gos.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos.gmi">Gemini</a>
</p>
@@ -84,8 +89,8 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>git clone https://codeberg.org/snonux/gos.git
-cd gos
+<pre><font color="#ff0000">git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/gos</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">cd gos</font>
</pre>
<br />
<span>Build the binaries:</span><br />
@@ -94,10 +99,10 @@ cd gos
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>go build -o gos ./cmd/gos
-go build -o gosc ./cmd/gosc
-sudo mv gos ~/go/bin
-sudo mv gosc ~/go/bin
+<pre><font color="#ff0000">go build -o gos </font><font color="#F3E651">.</font><font color="#ff0000">/cmd/gos</font>
+<font color="#ff0000">go build -o gosc </font><font color="#F3E651">.</font><font color="#ff0000">/cmd/gosc</font>
+<font color="#ff0000">sudo mv gos </font><font color="#F3E651">~</font><font color="#ff0000">/go/bin</font>
+<font color="#ff0000">sudo mv gosc </font><font color="#F3E651">~</font><font color="#ff0000">/go/bin</font>
</pre>
<br />
<span>Or, if you want to use the <span class='inlinecode'>Taskfile</span>:</span><br />
@@ -106,7 +111,7 @@ sudo mv gosc ~/go/bin
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>go-task install
+<pre><font color="#ff0000">go-task install</font>
</pre>
<br />
<h2 style='display: inline' id='configuration'>Configuration</h2><br />
@@ -119,13 +124,13 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>{
- "MastodonURL": "<font color="#808080">https://mastodon.example.com</font>",
- "MastodonAccessToken": "<font color="#808080">your-mastodon-access-token</font>",
- "LinkedInClientID": "<font color="#808080">your-linkedin-client-id</font>",
- "LinkedInSecret": "<font color="#808080">your-linkedin-client-secret</font>",
- "LinkedInRedirectURL": "<font color="#808080">http://localhost:8080/callback</font>",
-}
+<pre><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">MastodonURL</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">https://mastodon.example.com</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">MastodonAccessToken</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">your-mastodon-access-token</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">LinkedInClientID</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">your-linkedin-client-id</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">LinkedInSecret</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">your-linkedin-client-secret</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">LinkedInRedirectURL</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">http://localhost:8080/callback</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<h3 style='display: inline' id='configuration-fields'>Configuration fields</h3><br />
@@ -181,7 +186,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>./gos --dry
+<pre><font color="#F3E651">.</font><font color="#ff0000">/gos --dry</font>
</pre>
<br />
<span>*Normal run*</span><br />
@@ -192,7 +197,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>./gos
+<pre><font color="#F3E651">.</font><font color="#ff0000">/gos </font>
</pre>
<br />
<span>:-)</span><br />
@@ -357,7 +362,7 @@ Hello World :-)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>gos --geminiSummaryFor <font color="#000000">202410</font>,<font color="#000000">202411</font>,<font color="#000000">202412</font>
+<pre><font color="#ff0000">gos --geminiSummaryFor </font><font color="#bb00ff">202410</font><font color="#F3E651">,</font><font color="#bb00ff">202411</font><font color="#F3E651">,</font><font color="#bb00ff">202412</font>
</pre>
<br />
<span>This outputs the summary for the three specified months, as shown in the example. The summary includes posts from all social media networks but removes duplicates.</span><br />
@@ -369,7 +374,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>gos --gemtexterEnable --geminiSummaryFor <font color="#000000">202410</font>,<font color="#000000">202411</font>,<font color="#000000">202412</font>
+<pre><font color="#ff0000">gos --gemtexterEnable --geminiSummaryFor </font><font color="#bb00ff">202410</font><font color="#F3E651">,</font><font color="#bb00ff">202411</font><font color="#F3E651">,</font><font color="#bb00ff">202412</font>
</pre>
<br />
<a class='textlink' href='https://codeberg.org/snonux/gemtexter'>Gemtexter</a><br />
@@ -380,7 +385,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>gos --gemtexterEnable --geminiSummaryFor <font color="#000000">202410</font>,<font color="#000000">202411</font>,<font color="#000000">202412</font> --geminiCapsules <font color="#808080">"foo.zone,paul.buetow.org"</font>
+<pre><font color="#ff0000">gos --gemtexterEnable --geminiSummaryFor </font><font color="#bb00ff">202410</font><font color="#F3E651">,</font><font color="#bb00ff">202411</font><font color="#F3E651">,</font><font color="#bb00ff">202412</font><font color="#ff0000"> --geminiCapsules </font><font color="#bb00ff">"foo.zone,paul.buetow.org"</font>
</pre>
<br />
<span>It will then also generate Gemini Gemtext links in the summary page and flag them with <span class='inlinecode'>(Gemini)</span>.</span><br />
@@ -393,11 +398,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.html b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.html
index 0a87081a..5e06dc03 100644
--- a/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.html
+++ b/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 4: Rocky Linux Bhyve VMs</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4.gmi">Gemini</a>
</p>
@@ -83,10 +88,10 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % dmesg | grep <font color="#808080">'Features2=.*POPCNT'</font>
- Features2=<font color="#000000">0x7ffafbbf</font>&lt;SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,EST,TM2,SSSE3,SDBG,
- FMA,CX16,xTPR,PDCM,PCID,SSE4.<font color="#000000">1</font>,SSE4.<font color="#000000">2</font>,x2APIC,MOVBE,POPCNT,TSCDLT,AESNI,XSAVE,
- OSXSAVE,AVX,F16C,RDRAND&gt;
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> dmesg </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">'Features2=.*POPCNT'</font>
+<font color="#ff0000"> </font><font color="#ff0000">Features2</font><font color="#F3E651">=</font><font color="#bb00ff">0x7ffafbbf</font><font color="#F3E651">&lt;</font><font color="#ff0000">SSE3</font><font color="#F3E651">,</font><font color="#ff0000">PCLMULQDQ</font><font color="#F3E651">,</font><font color="#ff0000">DTES64</font><font color="#F3E651">,</font><font color="#ff0000">MON</font><font color="#F3E651">,</font><font color="#ff0000">DS_CPL</font><font color="#F3E651">,</font><font color="#ff0000">VMX</font><font color="#F3E651">,</font><font color="#ff0000">EST</font><font color="#F3E651">,</font><font color="#ff0000">TM2</font><font color="#F3E651">,</font><font color="#ff0000">SSSE3</font><font color="#F3E651">,</font><font color="#ff0000">SDBG</font><font color="#F3E651">,</font>
+<font color="#ff0000"> FMA</font><font color="#F3E651">,</font><font color="#ff0000">CX16</font><font color="#F3E651">,</font><font color="#ff0000">xTPR</font><font color="#F3E651">,</font><font color="#ff0000">PDCM</font><font color="#F3E651">,</font><font color="#ff0000">PCID</font><font color="#F3E651">,</font><font color="#ff0000">SSE4</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000">SSE4</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000">x2APIC</font><font color="#F3E651">,</font><font color="#ff0000">MOVBE</font><font color="#F3E651">,</font><font color="#ff0000">POPCNT</font><font color="#F3E651">,</font><font color="#ff0000">TSCDLT</font><font color="#F3E651">,</font><font color="#ff0000">AESNI</font><font color="#F3E651">,</font><font color="#ff0000">XSAVE</font><font color="#F3E651">,</font>
+<font color="#ff0000"> OSXSAVE</font><font color="#F3E651">,</font><font color="#ff0000">AVX</font><font color="#F3E651">,</font><font color="#ff0000">F16C</font><font color="#F3E651">,</font><font color="#ff0000">RDRAND</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<span>So it&#39;s there! All good.</span><br />
@@ -103,15 +108,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install vm-bhyve bhyve-firmware
-paul@f0:~ % doas sysrc vm_enable=YES
-vm_enable: -&gt; YES
-paul@f0:~ % doas sysrc vm_dir=zfs:zroot/bhyve
-vm_dir: -&gt; zfs:zroot/bhyve
-paul@f0:~ % doas zfs create zroot/bhyve
-paul@f0:~ % doas vm init
-paul@f0:~ % doas vm switch create public
-paul@f0:~ % doas vm switch add public re0
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install vm-bhyve bhyve-firmware</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">vm_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">vm_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">vm_dir</font><font color="#F3E651">=</font><font color="#ff0000">zfs</font><font color="#F3E651">:</font><font color="#ff0000">zroot/bhyve</font>
+<font color="#ff0000">vm_dir</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zfs</font><font color="#F3E651">:</font><font color="#ff0000">zroot/bhyve</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs create zroot/bhyve</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm init</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm switch create public</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm switch add public re0</font>
</pre>
<br />
<span>Bhyve stores all its data in the <span class='inlinecode'>/bhyve</span> of the <span class='inlinecode'>zroot</span> ZFS pool:</span><br />
@@ -120,8 +125,8 @@ paul@f0:~ % doas vm switch add public re0
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % zfs list | grep bhyve
-zroot/bhyve <font color="#000000">1</font>.74M 453G <font color="#000000">1</font>.74M /zroot/bhyve
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> zfs list </font><font color="#F3E651">|</font><font color="#ff0000"> grep bhyve</font>
+<font color="#ff0000">zroot/bhyve </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">74M 453G </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">74M /zroot/bhyve</font>
</pre>
<br />
<span>For convenience, we also create this symlink:</span><br />
@@ -130,7 +135,7 @@ zroot/bhyve <font color="#000000">1</font>.74M
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas ln -s /zroot/bhyve/ /bhyve
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas ln -s /zroot/bhyve</font><font color="#F3E651">/</font><font color="#ff0000"> /bhyve</font>
</pre>
<br />
@@ -140,8 +145,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas vm list
-NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm list</font>
+<font color="#ff0000">NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE</font>
</pre>
<br />
<h2 style='display: inline' id='rocky-linux-vms'>Rocky Linux VMs</h2><br />
@@ -162,10 +167,10 @@ NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas vm iso \
- https://download.rockylinux.org/pub/rocky/<font color="#000000">9</font>/isos/x86_64/Rocky-<font color="#000000">9.5</font>-x86_64-minimal.iso
-/zroot/bhyve/.iso/Rocky-<font color="#000000">9.5</font>-x86_64-minimal.iso <font color="#000000">1808</font> MB <font color="#000000">4780</font> kBps 06m28s
-paul@f0:/bhyve % doas vm create rocky
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm iso </font><font color="#F3E651">\</font>
+<font color="#ff0000"> https</font><font color="#F3E651">:</font><font color="#ff0000">//download</font><font color="#F3E651">.</font><font color="#ff0000">rockylinux</font><font color="#F3E651">.</font><font color="#ff0000">org/pub/rocky</font><font color="#F3E651">/</font><font color="#bb00ff">9</font><font color="#ff0000">/isos/x86_64/Rocky-</font><font color="#bb00ff">9.5</font><font color="#ff0000">-x86_64-minimal</font><font color="#F3E651">.</font><font color="#ff0000">iso</font>
+<font color="#ff0000">/zroot/bhyve</font><font color="#F3E651">/.</font><font color="#ff0000">iso/Rocky-</font><font color="#bb00ff">9.5</font><font color="#ff0000">-x86_64-minimal</font><font color="#F3E651">.</font><font color="#ff0000">iso </font><font color="#bb00ff">1808</font><font color="#ff0000"> MB </font><font color="#bb00ff">4780</font><font color="#ff0000"> kBps 06m28s</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm create rocky</font>
</pre>
<br />
<h3 style='display: inline' id='vm-configuration'>VM configuration</h3><br />
@@ -176,16 +181,16 @@ paul@f0:/bhyve % doas vm create rocky
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/bhyve/rocky % cat rocky.conf
-loader=<font color="#808080">"bhyveload"</font>
-cpu=<font color="#000000">1</font>
-memory=256M
-network0_type=<font color="#808080">"virtio-net"</font>
-network0_switch=<font color="#808080">"public"</font>
-disk0_type=<font color="#808080">"virtio-blk"</font>
-disk0_name=<font color="#808080">"disk0.img"</font>
-uuid=<font color="#808080">"1c4655ac-c828-11ef-a920-e8ff1ed71ca0"</font>
-network0_mac=<font color="#808080">"58:9c:fc:0d:13:3f"</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> cat rocky</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">loader</font><font color="#F3E651">=</font><font color="#bb00ff">"bhyveload"</font>
+<font color="#ff0000">cpu</font><font color="#F3E651">=</font><font color="#bb00ff">1</font>
+<font color="#ff0000">memory</font><font color="#F3E651">=</font><font color="#ff0000">256M</font>
+<font color="#ff0000">network0_type</font><font color="#F3E651">=</font><font color="#bb00ff">"virtio-net"</font>
+<font color="#ff0000">network0_switch</font><font color="#F3E651">=</font><font color="#bb00ff">"public"</font>
+<font color="#ff0000">disk0_type</font><font color="#F3E651">=</font><font color="#bb00ff">"virtio-blk"</font>
+<font color="#ff0000">disk0_name</font><font color="#F3E651">=</font><font color="#bb00ff">"disk0.img"</font>
+<font color="#ff0000">uuid</font><font color="#F3E651">=</font><font color="#bb00ff">"1c4655ac-c828-11ef-a920-e8ff1ed71ca0"</font>
+<font color="#ff0000">network0_mac</font><font color="#F3E651">=</font><font color="#bb00ff">"58:9c:fc:0d:13:3f"</font>
</pre>
<br />
<span>The <span class='inlinecode'>uuid</span> and the <span class='inlinecode'>network0_mac</span> differ for each of the three VMs (the ones being installed on <span class='inlinecode'>f0</span>, <span class='inlinecode'>f1</span> and <span class='inlinecode'>f2</span>).</span><br />
@@ -216,17 +221,17 @@ network0_mac="58:9c:fc:0d:13:3f"
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas vm install rocky Rocky-<font color="#000000">9.5</font>-x86_64-minimal.iso
-Starting rocky
- * found guest <b><u><font color="#000000">in</font></u></b> /zroot/bhyve/rocky
- * booting...
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm install rocky Rocky-</font><font color="#bb00ff">9.5</font><font color="#ff0000">-x86_64-minimal</font><font color="#F3E651">.</font><font color="#ff0000">iso</font>
+<font color="#ff0000">Starting rocky</font>
+<font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> found guest </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> /zroot/bhyve/rocky</font>
+<font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> booting</font><font color="#F3E651">...</font>
-paul@f0:/bhyve/rocky % doas vm list
-NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
-rocky default uefi <font color="#000000">4</font> 14G <font color="#000000">0.0</font>.<font color="#000000">0.0</font>:<font color="#000000">5900</font> No Locked (f0.lan.buetow.org)
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm list</font>
+<font color="#ff0000">NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE</font>
+<font color="#ff0000">rocky default uefi </font><font color="#bb00ff">4</font><font color="#ff0000"> 14G </font><font color="#bb00ff">0.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.0</font><font color="#F3E651">:</font><font color="#bb00ff">5900</font><font color="#ff0000"> No Locked </font><font color="#F3E651">(</font><font color="#ff0000">f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">)</font>
-paul@f0:/bhyve/rocky % doas sockstat -<font color="#000000">4</font> | grep <font color="#000000">5900</font>
-root bhyve <font color="#000000">6079</font> <font color="#000000">8</font> tcp4 *:<font color="#000000">5900</font> *:*
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> doas sockstat -</font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">5900</font>
+<font color="#ff0000">root bhyve </font><font color="#bb00ff">6079</font><font color="#ff0000"> </font><font color="#bb00ff">8</font><font color="#ff0000"> tcp4 </font><font color="#F3E651">*:</font><font color="#bb00ff">5900</font><font color="#ff0000"> </font><font color="#F3E651">*:*</font>
</pre>
<br />
<span>Port 5900 now also opens for VNC connections, so I connected it with a VNC client and ran through the installation dialogues. This could be done unattended or more automated, but there are only three VMs to install, and the automation doesn&#39;t seem worth it as we do it only once a year or less often.</span><br />
@@ -239,9 +244,9 @@ root bhyve <font color="#000000">6079</font> <font color="#000000">8</
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/bhyve/rocky % doas vm stop rocky
-paul@f0:/bhyve/rocky % doas truncate -s 100G disk0.img
-paul@f0:/bhyve/rocky % doas vm install rocky Rocky-<font color="#000000">9.5</font>-x86_64-minimal.iso
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm stop rocky</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> doas truncate -s 100G disk0</font><font color="#F3E651">.</font><font color="#ff0000">img</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm install rocky Rocky-</font><font color="#bb00ff">9.5</font><font color="#ff0000">-x86_64-minimal</font><font color="#F3E651">.</font><font color="#ff0000">iso</font>
</pre>
<br />
<h3 style='display: inline' id='connect-to-vnc'>Connect to VNC</h3><br />
@@ -270,9 +275,9 @@ paul@f0:/bhyve/rocky % doas vm install rocky Rocky-<font color="#000000">9.5</fo
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/bhyve/rocky % cat &lt;&lt;END | doas tee -a /etc/rc.conf
-vm_list=<font color="#808080">"rocky"</font>
-vm_delay=<font color="#808080">"5"</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /etc/rc</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">vm_list</font><font color="#F3E651">=</font><font color="#bb00ff">"rocky"</font>
+<font color="#ff0000">vm_delay</font><font color="#F3E651">=</font><font color="#bb00ff">"5"</font>
</pre>
<br />
<span>The <span class='inlinecode'>vm_delay</span> isn&#39;t really required. It is used to wait 5 seconds before starting each VM, but there is currently only one VM per host. Maybe later, when there are more, this will be useful. After adding, there&#39;s now a <span class='inlinecode'>Yes</span> indicator in the <span class='inlinecode'>AUTO</span> column.</span><br />
@@ -281,9 +286,9 @@ vm_delay=<font color="#808080">"5"</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas vm list
-NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
-rocky default uefi <font color="#000000">4</font> 14G <font color="#000000">0.0</font>.<font color="#000000">0.0</font>:<font color="#000000">5900</font> Yes [<font color="#000000">1</font>] Running (<font color="#000000">2063</font>)
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm list</font>
+<font color="#ff0000">NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE</font>
+<font color="#ff0000">rocky default uefi </font><font color="#bb00ff">4</font><font color="#ff0000"> 14G </font><font color="#bb00ff">0.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.0</font><font color="#F3E651">:</font><font color="#bb00ff">5900</font><font color="#ff0000"> Yes </font><font color="#F3E651">[</font><font color="#bb00ff">1</font><font color="#F3E651">]</font><font color="#ff0000"> Running </font><font color="#F3E651">(</font><font color="#bb00ff">2063</font><font color="#F3E651">)</font>
</pre>
<br />
<h3 style='display: inline' id='static-ip-configuration'>Static IP configuration</h3><br />
@@ -302,11 +307,11 @@ rocky default uefi <font color="#000000">4</font> 14G <font color=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/bhyve/rocky % cat &lt;&lt;END | doas tee -a /etc/hosts
-<font color="#000000">192.168</font>.<font color="#000000">1.120</font> r0 r0.lan r0.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.121</font> r1 r1.lan r1.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.122</font> r2 r2.lan r2.lan.buetow.org
-END
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/bhyve/rocky </font><font color="#F3E651">%</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /etc/hosts</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.120</font><font color="#ff0000"> r0 r0</font><font color="#F3E651">.</font><font color="#ff0000">lan r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.121</font><font color="#ff0000"> r1 r1</font><font color="#F3E651">.</font><font color="#ff0000">lan r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.122</font><font color="#ff0000"> r2 r2</font><font color="#F3E651">.</font><font color="#ff0000">lan r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>And we configure the IPs accordingly on the VMs themselves by opening a root shell via SSH to the VMs and entering the following commands on each of the VMs:</span><br />
@@ -315,18 +320,18 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~] % nmcli connection modify enp0s5 ipv4.address <font color="#000000">192.168</font>.<font color="#000000">1.120</font>/<font color="#000000">24</font>
-[root@r0 ~] % nmcli connection modify enp0s5 ipv4.gateway <font color="#000000">192.168</font>.<font color="#000000">1.1</font>
-[root@r0 ~] % nmcli connection modify enp0s5 ipv4.DNS <font color="#000000">192.168</font>.<font color="#000000">1.1</font>
-[root@r0 ~] % nmcli connection modify enp0s5 ipv4.method manual
-[root@r0 ~] % nmcli connection down enp0s5
-[root@r0 ~] % nmcli connection up enp0s5
-[root@r0 ~] % hostnamectl set-hostname r0.lan.buetow.org
-[root@r0 ~] % cat &lt;&lt;END &gt;&gt;/etc/hosts
-<font color="#000000">192.168</font>.<font color="#000000">1.120</font> r0 r0.lan r0.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.121</font> r1 r1.lan r1.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.122</font> r2 r2.lan r2.lan.buetow.org
-END
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nmcli connection modify enp0s5 ipv4</font><font color="#F3E651">.</font><font color="#ff0000">address </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.120</font><font color="#F3E651">/</font><font color="#bb00ff">24</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nmcli connection modify enp0s5 ipv4</font><font color="#F3E651">.</font><font color="#ff0000">gateway </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.1</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nmcli connection modify enp0s5 ipv4</font><font color="#F3E651">.</font><font color="#ff0000">DNS </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.1</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nmcli connection modify enp0s5 ipv4</font><font color="#F3E651">.</font><font color="#ff0000">method manual</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nmcli connection down enp0s5</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nmcli connection up enp0s5</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> hostnamectl set-hostname r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;&gt;</font><font color="#ff0000">/etc/hosts</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.120</font><font color="#ff0000"> r0 r0</font><font color="#F3E651">.</font><font color="#ff0000">lan r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.121</font><font color="#ff0000"> r1 r1</font><font color="#F3E651">.</font><font color="#ff0000">lan r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.122</font><font color="#ff0000"> r2 r2</font><font color="#F3E651">.</font><font color="#ff0000">lan r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>Whereas:</span><br />
@@ -347,7 +352,7 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% <b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> <font color="#000000">0</font> <font color="#000000">1</font> <font color="#000000">2</font>; <b><u><font color="#000000">do</font></u></b> ssh-copy-id root@r$i.lan.buetow.org; <b><u><font color="#000000">done</font></u></b>
+<pre><font color="#F3E651">%</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> ssh-copy-id root@r</font><font color="#ff0000">$i</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
</pre>
<br />
<span>Then, we edit the <span class='inlinecode'>/etc/ssh/sshd_config</span> file again on all three VMs and configure <span class='inlinecode'>PasswordAuthentication no</span> to only allow SSH key authentication from now on.</span><br />
@@ -358,8 +363,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~] % dnf update
-[root@r0 ~] % reboot
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> dnf update</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> reboot</font>
</pre>
<br />
<h2 style='display: inline' id='stress-testing-cpu'>Stress testing CPU</h2><br />
@@ -370,28 +375,28 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> main
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> main</font>
-<b><u><font color="#000000">import</font></u></b> <font color="#808080">"testing"</font>
+<b><font color="#ffffff">import</font></b><font color="#ff0000"> </font><font color="#bb00ff">"testing"</font>
-<b><u><font color="#000000">func</font></u></b> BenchmarkCPUSilly1(b *testing.B) {
- <b><u><font color="#000000">for</font></u></b> i := <font color="#000000">0</font>; i &lt; b.N; i++ {
- _ = i * i
- }
-}
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">BenchmarkCPUSilly1</font><font color="#F3E651">(</font><font color="#ff0000">b </font><font color="#F3E651">*</font><font color="#ff0000">testing</font><font color="#F3E651">.</font><font color="#ff0000">B</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> b</font><font color="#F3E651">.</font><font color="#ff0000">N</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> _ </font><font color="#F3E651">=</font><font color="#ff0000"> i </font><font color="#F3E651">*</font><font color="#ff0000"> i</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">func</font></u></b> BenchmarkCPUSilly2(b *testing.B) {
- <b><u><font color="#000000">var</font></u></b> sillyResult <b><font color="#000000">float64</font></b>
- <b><u><font color="#000000">for</font></u></b> i := <font color="#000000">0</font>; i &lt; b.N; i++ {
- sillyResult += <b><font color="#000000">float64</font></b>(i)
- sillyResult *= <b><font color="#000000">float64</font></b>(i)
- divisor := <b><font color="#000000">float64</font></b>(i) + <font color="#000000">1</font>
- <b><u><font color="#000000">if</font></u></b> divisor &gt; <font color="#000000">0</font> {
- sillyResult /= divisor
- }
- }
- _ = sillyResult <i><font color="silver">// to avoid compiler optimization</font></i>
-}
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">BenchmarkCPUSilly2</font><font color="#F3E651">(</font><font color="#ff0000">b </font><font color="#F3E651">*</font><font color="#ff0000">testing</font><font color="#F3E651">.</font><font color="#ff0000">B</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">var</font></b><font color="#ff0000"> sillyResult </font><b><font color="#F35E1E">float64</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651">&lt;</font><font color="#ff0000"> b</font><font color="#F3E651">.</font><font color="#ff0000">N</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> sillyResult </font><font color="#F3E651">+=</font><font color="#ff0000"> </font><b><font color="#F35E1E">float64</font></b><font color="#F3E651">(</font><font color="#ff0000">i</font><font color="#F3E651">)</font>
+<font color="#ff0000"> sillyResult </font><font color="#F3E651">*=</font><font color="#ff0000"> </font><b><font color="#F35E1E">float64</font></b><font color="#F3E651">(</font><font color="#ff0000">i</font><font color="#F3E651">)</font>
+<font color="#ff0000"> divisor </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><b><font color="#F35E1E">float64</font></b><font color="#F3E651">(</font><font color="#ff0000">i</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> divisor </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> sillyResult </font><font color="#F3E651">/=</font><font color="#ff0000"> divisor</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> _ </font><font color="#F3E651">=</font><font color="#ff0000"> sillyResult </font><i><font color="#ababab">// to avoid compiler optimization</font></i>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>You can find the repository here:</span><br />
@@ -406,10 +411,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install git go
-paul@f0:~ % mkdir ~/git &amp;&amp; cd ~/git &amp;&amp; \
- git clone https://codeberg.org/snonux/sillybench &amp;&amp; \
- cd sillybench
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install git go</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> mkdir </font><font color="#F3E651">~</font><font color="#ff0000">/git </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> cd </font><font color="#F3E651">~</font><font color="#ff0000">/git </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> cd sillybench</font>
</pre>
<br />
<span>And to run it:</span><br />
@@ -418,18 +423,18 @@ paul@f0:~ % mkdir ~/git &amp;&amp; cd ~/git &amp;&amp; \
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~/git/sillybench % go version
-go version go1.<font color="#000000">24.1</font> freebsd/amd<font color="#000000">64</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000">/git/sillybench </font><font color="#F3E651">%</font><font color="#ff0000"> go version</font>
+<font color="#ff0000">go version go1</font><font color="#F3E651">.</font><font color="#bb00ff">24.1</font><font color="#ff0000"> freebsd/amd</font><font color="#bb00ff">64</font>
-paul@f0:~/git/sillybench % go <b><u><font color="#000000">test</font></u></b> -bench=.
-goos: freebsd
-goarch: amd64
-pkg: codeberg.org/snonux/sillybench
-cpu: Intel(R) N100
-BenchmarkCPUSilly1-<font color="#000000">4</font> <font color="#000000">1000000000</font> <font color="#000000">0.4022</font> ns/op
-BenchmarkCPUSilly2-<font color="#000000">4</font> <font color="#000000">1000000000</font> <font color="#000000">0.4027</font> ns/op
-PASS
-ok codeberg.org/snonux/sillybench <font color="#000000">0</font>.891s
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000">/git/sillybench </font><font color="#F3E651">%</font><font color="#ff0000"> go </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> -bench</font><font color="#F3E651">=.</font>
+<font color="#ff0000">goos</font><font color="#F3E651">:</font><font color="#ff0000"> freebsd</font>
+<font color="#ff0000">goarch</font><font color="#F3E651">:</font><font color="#ff0000"> amd64</font>
+<font color="#ff0000">pkg</font><font color="#F3E651">:</font><font color="#ff0000"> codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench</font>
+<font color="#ff0000">cpu</font><font color="#F3E651">:</font><font color="#ff0000"> Intel</font><font color="#F3E651">(</font><font color="#ff0000">R</font><font color="#F3E651">)</font><font color="#ff0000"> N100</font>
+<font color="#ff0000">BenchmarkCPUSilly1-</font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">1000000000</font><font color="#ff0000"> </font><font color="#bb00ff">0.4022</font><font color="#ff0000"> ns/op</font>
+<font color="#ff0000">BenchmarkCPUSilly2-</font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">1000000000</font><font color="#ff0000"> </font><font color="#bb00ff">0.4027</font><font color="#ff0000"> ns/op</font>
+<font color="#ff0000">PASS</font>
+<font color="#ff0000">ok codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench </font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">891s</font>
</pre>
<br />
<h3 style='display: inline' id='silly-rocky-linux-vm--bhyve-benchmark'>Silly Rocky Linux VM @ Bhyve benchmark</h3><br />
@@ -440,10 +445,10 @@ ok codeberg.org/snonux/sillybench <font color="#000000">0</font>.891s
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># dnf install golang git</font></i>
-[root@r0 ~]<i><font color="silver"># mkdir ~/git &amp;&amp; cd ~/git &amp;&amp; \</font></i>
- git clone https://codeberg.org/snonux/sillybench &amp;&amp; \
- cd sillybench
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># dnf install golang git</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir ~/git &amp;&amp; cd ~/git &amp;&amp; \</font></i>
+<font color="#ff0000"> git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> cd sillybench</font>
</pre>
<br />
<span>And to run it:</span><br />
@@ -452,15 +457,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 sillybench]<i><font color="silver"># go version</font></i>
-go version go1.<font color="#000000">22.9</font> (Red Hat <font color="#000000">1.22</font>.<font color="#000000">9</font>-<font color="#000000">2</font>.el9_5) linux/amd<font color="#000000">64</font>
-[root@r0 sillybench]<i><font color="silver"># go test -bench=.</font></i>
-goos: linux
-goarch: amd64
-pkg: codeberg.org/snonux/sillybench
-cpu: Intel(R) N100
-BenchmarkCPUSilly1-<font color="#000000">4</font> <font color="#000000">1000000000</font> <font color="#000000">0.4347</font> ns/op
-BenchmarkCPUSilly2-<font color="#000000">4</font> <font color="#000000">1000000000</font> <font color="#000000">0.4345</font> ns/op
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 sillybench</font><font color="#F3E651">]</font><i><font color="#ababab"># go version</font></i>
+<font color="#ff0000">go version go1</font><font color="#F3E651">.</font><font color="#bb00ff">22.9</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">Red Hat </font><font color="#bb00ff">1.22</font><font color="#F3E651">.</font><font color="#bb00ff">9</font><font color="#ff0000">-</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">el9_5</font><font color="#F3E651">)</font><font color="#ff0000"> linux/amd</font><font color="#bb00ff">64</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 sillybench</font><font color="#F3E651">]</font><i><font color="#ababab"># go test -bench=.</font></i>
+<font color="#ff0000">goos</font><font color="#F3E651">:</font><font color="#ff0000"> linux</font>
+<font color="#ff0000">goarch</font><font color="#F3E651">:</font><font color="#ff0000"> amd64</font>
+<font color="#ff0000">pkg</font><font color="#F3E651">:</font><font color="#ff0000"> codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench</font>
+<font color="#ff0000">cpu</font><font color="#F3E651">:</font><font color="#ff0000"> Intel</font><font color="#F3E651">(</font><font color="#ff0000">R</font><font color="#F3E651">)</font><font color="#ff0000"> N100</font>
+<font color="#ff0000">BenchmarkCPUSilly1-</font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">1000000000</font><font color="#ff0000"> </font><font color="#bb00ff">0.4347</font><font color="#ff0000"> ns/op</font>
+<font color="#ff0000">BenchmarkCPUSilly2-</font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">1000000000</font><font color="#ff0000"> </font><font color="#bb00ff">0.4345</font><font color="#ff0000"> ns/op</font>
</pre>
<br />
<span>The Linux benchmark is slightly slower than the FreeBSD one. The Go version is also a bit older. I tried the same with the up-to-date version of Go (1.24.x) with similar results. There could be a slight Bhyve overhead, or FreeBSD is just slightly more efficient in this benchmark. Overall, this shows that Bhyve performs excellently.</span><br />
@@ -475,15 +480,15 @@ BenchmarkCPUSilly2-<font color="#000000">4</font> <font color="#000000">10000
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@freebsd:~/git/sillybench <i><font color="silver"># go test -bench=.</font></i>
-goos: freebsd
-goarch: amd64
-pkg: codeberg.org/snonux/sillybench
-cpu: Intel(R) N100
-BenchmarkCPUSilly1 <font color="#000000">1000000000</font> <font color="#000000">0.4273</font> ns/op
-BenchmarkCPUSilly2 <font color="#000000">1000000000</font> <font color="#000000">0.4286</font> ns/op
-PASS
-ok codeberg.org/snonux/sillybench <font color="#000000">0</font>.949s
+<pre><font color="#ff0000">root@freebsd</font><font color="#F3E651">:~</font><font color="#ff0000">/git/sillybench </font><i><font color="#ababab"># go test -bench=.</font></i>
+<font color="#ff0000">goos</font><font color="#F3E651">:</font><font color="#ff0000"> freebsd</font>
+<font color="#ff0000">goarch</font><font color="#F3E651">:</font><font color="#ff0000"> amd64</font>
+<font color="#ff0000">pkg</font><font color="#F3E651">:</font><font color="#ff0000"> codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench</font>
+<font color="#ff0000">cpu</font><font color="#F3E651">:</font><font color="#ff0000"> Intel</font><font color="#F3E651">(</font><font color="#ff0000">R</font><font color="#F3E651">)</font><font color="#ff0000"> N100</font>
+<font color="#ff0000">BenchmarkCPUSilly1 </font><font color="#bb00ff">1000000000</font><font color="#ff0000"> </font><font color="#bb00ff">0.4273</font><font color="#ff0000"> ns/op</font>
+<font color="#ff0000">BenchmarkCPUSilly2 </font><font color="#bb00ff">1000000000</font><font color="#ff0000"> </font><font color="#bb00ff">0.4286</font><font color="#ff0000"> ns/op</font>
+<font color="#ff0000">PASS</font>
+<font color="#ff0000">ok codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/sillybench </font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">949s</font>
</pre>
<br />
<span>It&#39;s a bit better than Linux! I am sure that this is not really a scientific benchmark, so take the results with a grain of salt!</span><br />
@@ -500,16 +505,16 @@ ok codeberg.org/snonux/sillybench <font color="#000000">0</font>.949s
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas ubench -s <font color="#000000">1</font>
-Unix Benchmark Utility v.<font color="#000000">0.3</font>
-Copyright (C) July, <font color="#000000">1999</font> PhysTech, Inc.
-Author: Sergei Viznyuk &lt;sv@phystech.com&gt;
-http://www.phystech.com/download/ubench.html
-FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> GENERIC amd64
-Ubench Single CPU: <font color="#000000">671010</font> (<font color="#000000">0</font>.40s)
-Ubench Single MEM: <font color="#000000">1705237</font> (<font color="#000000">0</font>.48s)
------------------------------------
-Ubench Single AVG: <font color="#000000">1188123</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas ubench -s </font><font color="#bb00ff">1</font>
+<font color="#ff0000">Unix Benchmark Utility v</font><font color="#F3E651">.</font><font color="#bb00ff">0.3</font>
+<font color="#ff0000">Copyright </font><font color="#F3E651">(</font><font color="#ff0000">C</font><font color="#F3E651">)</font><font color="#ff0000"> July</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1999</font><font color="#ff0000"> PhysTech</font><font color="#F3E651">,</font><font color="#ff0000"> Inc</font><font color="#F3E651">.</font>
+<font color="#ff0000">Author</font><font color="#F3E651">:</font><font color="#ff0000"> Sergei Viznyuk </font><font color="#F3E651">&lt;</font><font color="#ff0000">sv@phystech</font><font color="#F3E651">.</font><font color="#ff0000">com</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">http</font><font color="#F3E651">:</font><font color="#ff0000">//www</font><font color="#F3E651">.</font><font color="#ff0000">phystech</font><font color="#F3E651">.</font><font color="#ff0000">com/download/ubench</font><font color="#F3E651">.</font><font color="#ff0000">html</font>
+<font color="#ff0000">FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> GENERIC amd64</font>
+<font color="#ff0000">Ubench Single CPU</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">671010</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">40s</font><font color="#F3E651">)</font>
+<font color="#ff0000">Ubench Single MEM</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1705237</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">48s</font><font color="#F3E651">)</font>
+<font color="#ff0000">-----------------------------------</font>
+<font color="#ff0000">Ubench Single AVG</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1188123</font>
</pre>
<br />
@@ -519,16 +524,16 @@ Ubench Single AVG: <font color="#000000">1188123</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas ubench
-Unix Benchmark Utility v.<font color="#000000">0.3</font>
-Copyright (C) July, <font color="#000000">1999</font> PhysTech, Inc.
-Author: Sergei Viznyuk &lt;sv@phystech.com&gt;
-http://www.phystech.com/download/ubench.html
-FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> GENERIC amd64
-Ubench CPU: <font color="#000000">2660220</font>
-Ubench MEM: <font color="#000000">3095182</font>
---------------------
-Ubench AVG: <font color="#000000">2877701</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas ubench</font>
+<font color="#ff0000">Unix Benchmark Utility v</font><font color="#F3E651">.</font><font color="#bb00ff">0.3</font>
+<font color="#ff0000">Copyright </font><font color="#F3E651">(</font><font color="#ff0000">C</font><font color="#F3E651">)</font><font color="#ff0000"> July</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1999</font><font color="#ff0000"> PhysTech</font><font color="#F3E651">,</font><font color="#ff0000"> Inc</font><font color="#F3E651">.</font>
+<font color="#ff0000">Author</font><font color="#F3E651">:</font><font color="#ff0000"> Sergei Viznyuk </font><font color="#F3E651">&lt;</font><font color="#ff0000">sv@phystech</font><font color="#F3E651">.</font><font color="#ff0000">com</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">http</font><font color="#F3E651">:</font><font color="#ff0000">//www</font><font color="#F3E651">.</font><font color="#ff0000">phystech</font><font color="#F3E651">.</font><font color="#ff0000">com/download/ubench</font><font color="#F3E651">.</font><font color="#ff0000">html</font>
+<font color="#ff0000">FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> GENERIC amd64</font>
+<font color="#ff0000">Ubench CPU</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2660220</font>
+<font color="#ff0000">Ubench MEM</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">3095182</font>
+<font color="#ff0000">--------------------</font>
+<font color="#ff0000">Ubench AVG</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2877701</font>
</pre>
<br />
<h3 style='display: inline' id='freebsd-vm--bhyve-ubench-benchmark'>FreeBSD VM @ Bhyve <span class='inlinecode'>ubench</span> benchmark</h3><br />
@@ -539,16 +544,16 @@ Ubench AVG: <font color="#000000">2877701</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@freebsd:~ <i><font color="silver"># ubench -s 1</font></i>
-Unix Benchmark Utility v.<font color="#000000">0.3</font>
-Copyright (C) July, <font color="#000000">1999</font> PhysTech, Inc.
-Author: Sergei Viznyuk &lt;sv@phystech.com&gt;
-http://www.phystech.com/download/ubench.html
-FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> GENERIC amd64
-Ubench Single CPU: <font color="#000000">672792</font> (<font color="#000000">0</font>.40s)
-Ubench Single MEM: <font color="#000000">852757</font> (<font color="#000000">0</font>.48s)
------------------------------------
-Ubench Single AVG: <font color="#000000">762774</font>
+<pre><font color="#ff0000">root@freebsd</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># ubench -s 1</font></i>
+<font color="#ff0000">Unix Benchmark Utility v</font><font color="#F3E651">.</font><font color="#bb00ff">0.3</font>
+<font color="#ff0000">Copyright </font><font color="#F3E651">(</font><font color="#ff0000">C</font><font color="#F3E651">)</font><font color="#ff0000"> July</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1999</font><font color="#ff0000"> PhysTech</font><font color="#F3E651">,</font><font color="#ff0000"> Inc</font><font color="#F3E651">.</font>
+<font color="#ff0000">Author</font><font color="#F3E651">:</font><font color="#ff0000"> Sergei Viznyuk </font><font color="#F3E651">&lt;</font><font color="#ff0000">sv@phystech</font><font color="#F3E651">.</font><font color="#ff0000">com</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">http</font><font color="#F3E651">:</font><font color="#ff0000">//www</font><font color="#F3E651">.</font><font color="#ff0000">phystech</font><font color="#F3E651">.</font><font color="#ff0000">com/download/ubench</font><font color="#F3E651">.</font><font color="#ff0000">html</font>
+<font color="#ff0000">FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> GENERIC amd64</font>
+<font color="#ff0000">Ubench Single CPU</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">672792</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">40s</font><font color="#F3E651">)</font>
+<font color="#ff0000">Ubench Single MEM</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">852757</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">48s</font><font color="#F3E651">)</font>
+<font color="#ff0000">-----------------------------------</font>
+<font color="#ff0000">Ubench Single AVG</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">762774</font>
</pre>
<br />
<span>Wow, the CPU in the VM was a tiny bit faster than on the host! So this was probably just a glitch in the matrix. Memory seems slower, though.</span><br />
@@ -559,24 +564,24 @@ Ubench Single AVG: <font color="#000000">762774</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>root@freebsd:~ <i><font color="silver"># ubench</font></i>
-Unix Benchmark Utility v.<font color="#000000">0.3</font>
-Copyright (C) July, <font color="#000000">1999</font> PhysTech, Inc.
-Author: Sergei Viznyuk &lt;sv@phystech.com&gt;
-http://www.phystech.com/download/ubench.html
-FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> FreeBSD <font color="#000000">14.2</font>-RELEASE-p<font color="#000000">1</font> GENERIC amd64
-Ubench CPU: <font color="#000000">2652857</font>
-swap_pager: out of swap space
-swp_pager_getswapspace(<font color="#000000">27</font>): failed
-swap_pager: out of swap space
-swp_pager_getswapspace(<font color="#000000">18</font>): failed
-Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color="#000000">02</font>:<font color="#000000">43</font> freebsd kernel: pid <font color="#000000">862</font> (ubench), jid <font color="#000000">0</font>, uid <font color="#000000">0</font>, was killed: failed to reclaim memory
-swp_pager_getswapspace(<font color="#000000">6</font>): failed
-Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color="#000000">02</font>:<font color="#000000">46</font> freebsd kernel: pid <font color="#000000">863</font> (ubench), jid <font color="#000000">0</font>, uid <font color="#000000">0</font>, was killed: failed to reclaim memory
-Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color="#000000">02</font>:<font color="#000000">47</font> freebsd kernel: pid <font color="#000000">864</font> (ubench), jid <font color="#000000">0</font>, uid <font color="#000000">0</font>, was killed: failed to reclaim memory
-Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color="#000000">02</font>:<font color="#000000">48</font> freebsd kernel: pid <font color="#000000">865</font> (ubench), jid <font color="#000000">0</font>, uid <font color="#000000">0</font>, was killed: failed to reclaim memory
-Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color="#000000">02</font>:<font color="#000000">49</font> freebsd kernel: pid <font color="#000000">861</font> (ubench), jid <font color="#000000">0</font>, uid <font color="#000000">0</font>, was killed: failed to reclaim memory
-Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color="#000000">02</font>:<font color="#000000">51</font> freebsd kernel: pid <font color="#000000">839</font> (ubench), jid <font color="#000000">0</font>, uid <font color="#000000">0</font>, was killed: failed to reclaim memory
+<pre><font color="#ff0000">root@freebsd</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># ubench</font></i>
+<font color="#ff0000">Unix Benchmark Utility v</font><font color="#F3E651">.</font><font color="#bb00ff">0.3</font>
+<font color="#ff0000">Copyright </font><font color="#F3E651">(</font><font color="#ff0000">C</font><font color="#F3E651">)</font><font color="#ff0000"> July</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1999</font><font color="#ff0000"> PhysTech</font><font color="#F3E651">,</font><font color="#ff0000"> Inc</font><font color="#F3E651">.</font>
+<font color="#ff0000">Author</font><font color="#F3E651">:</font><font color="#ff0000"> Sergei Viznyuk </font><font color="#F3E651">&lt;</font><font color="#ff0000">sv@phystech</font><font color="#F3E651">.</font><font color="#ff0000">com</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">http</font><font color="#F3E651">:</font><font color="#ff0000">//www</font><font color="#F3E651">.</font><font color="#ff0000">phystech</font><font color="#F3E651">.</font><font color="#ff0000">com/download/ubench</font><font color="#F3E651">.</font><font color="#ff0000">html</font>
+<font color="#ff0000">FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.2</font><font color="#ff0000">-RELEASE-p</font><font color="#bb00ff">1</font><font color="#ff0000"> GENERIC amd64</font>
+<font color="#ff0000">Ubench CPU</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2652857</font>
+<font color="#ff0000">swap_pager</font><font color="#F3E651">:</font><font color="#ff0000"> out of swap space</font>
+<font color="#ff0000">swp_pager_getswapspace</font><font color="#F3E651">(</font><font color="#bb00ff">27</font><font color="#F3E651">):</font><font color="#ff0000"> failed</font>
+<font color="#ff0000">swap_pager</font><font color="#F3E651">:</font><font color="#ff0000"> out of swap space</font>
+<font color="#ff0000">swp_pager_getswapspace</font><font color="#F3E651">(</font><font color="#bb00ff">18</font><font color="#F3E651">):</font><font color="#ff0000"> failed</font>
+<font color="#ff0000">Apr </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#F3E651">:</font><font color="#bb00ff">43</font><font color="#ff0000"> freebsd kernel</font><font color="#F3E651">:</font><font color="#ff0000"> pid </font><font color="#bb00ff">862</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ubench</font><font color="#F3E651">),</font><font color="#ff0000"> jid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> uid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> was killed</font><font color="#F3E651">:</font><font color="#ff0000"> failed to reclaim memory</font>
+<font color="#ff0000">swp_pager_getswapspace</font><font color="#F3E651">(</font><font color="#bb00ff">6</font><font color="#F3E651">):</font><font color="#ff0000"> failed</font>
+<font color="#ff0000">Apr </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#F3E651">:</font><font color="#bb00ff">46</font><font color="#ff0000"> freebsd kernel</font><font color="#F3E651">:</font><font color="#ff0000"> pid </font><font color="#bb00ff">863</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ubench</font><font color="#F3E651">),</font><font color="#ff0000"> jid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> uid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> was killed</font><font color="#F3E651">:</font><font color="#ff0000"> failed to reclaim memory</font>
+<font color="#ff0000">Apr </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#F3E651">:</font><font color="#bb00ff">47</font><font color="#ff0000"> freebsd kernel</font><font color="#F3E651">:</font><font color="#ff0000"> pid </font><font color="#bb00ff">864</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ubench</font><font color="#F3E651">),</font><font color="#ff0000"> jid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> uid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> was killed</font><font color="#F3E651">:</font><font color="#ff0000"> failed to reclaim memory</font>
+<font color="#ff0000">Apr </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#F3E651">:</font><font color="#bb00ff">48</font><font color="#ff0000"> freebsd kernel</font><font color="#F3E651">:</font><font color="#ff0000"> pid </font><font color="#bb00ff">865</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ubench</font><font color="#F3E651">),</font><font color="#ff0000"> jid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> uid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> was killed</font><font color="#F3E651">:</font><font color="#ff0000"> failed to reclaim memory</font>
+<font color="#ff0000">Apr </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#F3E651">:</font><font color="#bb00ff">49</font><font color="#ff0000"> freebsd kernel</font><font color="#F3E651">:</font><font color="#ff0000"> pid </font><font color="#bb00ff">861</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ubench</font><font color="#F3E651">),</font><font color="#ff0000"> jid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> uid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> was killed</font><font color="#F3E651">:</font><font color="#ff0000"> failed to reclaim memory</font>
+<font color="#ff0000">Apr </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#bb00ff">23</font><font color="#F3E651">:</font><font color="#bb00ff">02</font><font color="#F3E651">:</font><font color="#bb00ff">51</font><font color="#ff0000"> freebsd kernel</font><font color="#F3E651">:</font><font color="#ff0000"> pid </font><font color="#bb00ff">839</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">ubench</font><font color="#F3E651">),</font><font color="#ff0000"> jid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> uid </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> was killed</font><font color="#F3E651">:</font><font color="#ff0000"> failed to reclaim memory</font>
</pre>
<br />
<span>The multi-CPU benchmark in the Bhyve VM ran with almost identical results to the FreeBSD host system. However, the memory benchmark failed with out-of-swap space errors. I am unsure why, as the VM has 14GB RAM, but I am not investigating further.</span><br />
@@ -615,8 +620,8 @@ Apr <font color="#000000">4</font> <font color="#000000">23</font>:<font color=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># dd if=/dev/zero of=/tmp/test bs=4k count=2000 oflag=dsync</font></i>
-<font color="#000000">8192000</font> bytes copied, <font color="#000000">31.7058</font> s, <font color="#000000">258</font> kB/s
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># dd if=/dev/zero of=/tmp/test bs=4k count=2000 oflag=dsync</font></i>
+<font color="#bb00ff">8192000</font><font color="#ff0000"> bytes copied</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">31.7058</font><font color="#ff0000"> s</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">258</font><font color="#ff0000"> kB/s</font>
</pre>
<br />
<h3 style='display: inline' id='the-solution-switch-to-nvme-emulation'>The Solution: Switch to NVMe Emulation</h3><br />
@@ -631,14 +636,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># cat &gt; /etc/dracut.conf.d/nvme.conf &lt;&lt; EOF</font></i>
-add_drivers+=<font color="#808080">" nvme nvme_core "</font>
-hostonly=no
-EOF
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># cat &gt; /etc/dracut.conf.d/nvme.conf &lt;&lt; EOF</font></i>
+<font color="#ff0000">add_drivers</font><font color="#F3E651">+=</font><font color="#bb00ff">" nvme nvme_core "</font>
+<font color="#ff0000">hostonly</font><font color="#F3E651">=</font><font color="#ff0000">no</font>
+<font color="#ff0000">EOF</font>
-[root@r0 ~]<i><font color="silver"># sed -i 's/# use_devicesfile = 1/use_devicesfile = 0/' /etc/lvm/lvm.conf</font></i>
-[root@r0 ~]<i><font color="silver"># dracut -f</font></i>
-[root@r0 ~]<i><font color="silver"># shutdown -h now</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># sed -i 's/# use_devicesfile = 1/use_devicesfile = 0/' /etc/lvm/lvm.conf</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># dracut -f</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># shutdown -h now</font></i>
</pre>
<br />
<span>The <span class='inlinecode'>hostonly=no</span> setting ensures the initramfs includes drivers for hardware not currently present. The <span class='inlinecode'>use_devicesfile = 0</span> tells LVM to scan all block devices rather than only those recorded in <span class='inlinecode'>/etc/lvm/devices/system.devices</span> - this is important because the device path changes from <span class='inlinecode'>/dev/vda</span> to <span class='inlinecode'>/dev/nvme0n1</span>.</span><br />
@@ -651,8 +656,8 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas vm stop rocky
-paul@f0:~ % doas vm configure rocky
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm stop rocky</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm configure rocky</font>
</pre>
<br />
<span>Change <span class='inlinecode'>disk0_type</span> from <span class='inlinecode'>virtio-blk</span> to <span class='inlinecode'>nvme</span>:</span><br />
@@ -667,7 +672,7 @@ disk0_type="nvme"
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas vm start rocky
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm start rocky</font>
</pre>
<br />
<h3 style='display: inline' id='benchmark-results'>Benchmark Results</h3><br />
@@ -678,8 +683,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># dd if=/dev/zero of=/tmp/test bs=4k count=2000 oflag=dsync</font></i>
-<font color="#000000">8192000</font> bytes copied, <font color="#000000">0.330718</font> s, <font color="#000000">24.8</font> MB/s
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># dd if=/dev/zero of=/tmp/test bs=4k count=2000 oflag=dsync</font></i>
+<font color="#bb00ff">8192000</font><font color="#ff0000"> bytes copied</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.330718</font><font color="#ff0000"> s</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">24.8</font><font color="#ff0000"> MB/s</font>
</pre>
<br />
<span>That&#39;s approximately **100x faster** than before (24.8 MB/s vs 258 kB/s).</span><br />
@@ -733,11 +738,12 @@ etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"} 408
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-04-19-when-book-notes.html b/gemfeed/2025-04-19-when-book-notes.html
index 9fed5290..99de6991 100644
--- a/gemfeed/2025-04-19-when-book-notes.html
+++ b/gemfeed/2025-04-19-when-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'When: The Scientific Secrets of Perfect Timing' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-04-19-when-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-04-19-when-book-notes.gmi">Gemini</a>
</p>
@@ -133,11 +138,12 @@ __ejm\___/________dwb`---`______________________
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.html b/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.html
index e179bd90..587f5056 100644
--- a/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.html
+++ b/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Terminal multiplexing with `tmux` - Fish edition</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition.gmi">Gemini</a>
</p>
@@ -192,14 +197,14 @@ set-option -g prefix C-g
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>function tmux::search
- <b><u><font color="#000000">set</font></u></b> -l session (tmux list-sessions | fzf | cut -d: -f<font color="#000000">1</font>)
- <b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">test</font></u></b> -z <font color="#808080">"$TMUX"</font>
- tmux attach-session -t $session
- <b><u><font color="#000000">else</font></u></b>
- tmux switch -t $session
- end
-end
+<pre><font color="#7bc710">function tmux</font><font color="#F3E651">::</font><font color="#ff0000">search</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> -l session </font><font color="#F3E651">(</font><font color="#ff0000">tmux list-sessions </font><font color="#F3E651">|</font><font color="#ff0000"> fzf </font><font color="#F3E651">|</font><font color="#ff0000"> cut -d</font><font color="#F3E651">:</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> -z </font><font color="#bb00ff">"$TMUX"</font>
+<font color="#ff0000"> tmux attach-session -t </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> tmux switch -t </font><font color="#ff0000">$session</font>
+<font color="#ff0000"> end</font>
+<font color="#ff0000">end</font>
</pre>
<br />
<span>All it does is list all currently open sessions in <span class='inlinecode'>fzf</span>, where one of them can be searched and selected through fuzzy find, and then either switch (if already inside a session) to the other session or attach to the other session (if not yet in Tmux).</span><br />
@@ -408,11 +413,12 @@ bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "tmux.conf re
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.html b/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.html
index 80f7c564..288ef718 100644
--- a/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.html
+++ b/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 5: WireGuard mesh network</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5.gmi">Gemini</a>
</p>
@@ -156,14 +161,14 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas freebsd-update fetch
-paul@f0:~ % doas freebsd-update install
-paul@f0:~ % doas shutdown -r now
-..
-..
-paul@f0:~ % doas pkg update
-paul@f0:~ % doas pkg upgrade
-paul@f0:~ % reboot
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update fetch</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas shutdown -r now</font>
+<font color="#F3E651">..</font>
+<font color="#F3E651">..</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg update</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg upgrade</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> reboot</font>
</pre>
<br />
<span>Next, we install <span class='inlinecode'>wireguard-tools</span> and configure the WireGuard service:</span><br />
@@ -172,19 +177,19 @@ paul@f0:~ % reboot
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install wireguard-tools
-paul@f0:~ % doas sysrc wireguard_interfaces=wg0
-wireguard_interfaces: -&gt; wg0
-paul@f0:~ % doas sysrc wireguard_enable=YES
-wireguard_enable: -&gt; YES
-paul@f0:~ % doas mkdir -p /usr/local/etc/wireguard
-paul@f0:~ % doas touch /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-paul@f0:~ % doas service wireguard start
-paul@f0:~ % doas wg show
-interface: wg0
- public key: L+V9o0fNYkMVKNqsX7spBzD/9oSvxM/C7ZCZX1jLO3Q=
- private key: (hidden)
- listening port: <font color="#000000">20246</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install wireguard-tools</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">wireguard_interfaces</font><font color="#F3E651">=</font><font color="#ff0000">wg0</font>
+<font color="#ff0000">wireguard_interfaces</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> wg0</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">wireguard_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">wireguard_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mkdir -p /usr/local/etc/wireguard</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas touch /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service wireguard start</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas wg show</font>
+<font color="#ff0000">interface</font><font color="#F3E651">:</font><font color="#ff0000"> wg0</font>
+<font color="#ff0000"> public key</font><font color="#F3E651">:</font><font color="#ff0000"> L</font><font color="#F3E651">+</font><font color="#ff0000">V9o0fNYkMVKNqsX7spBzD</font><font color="#F3E651">/</font><font color="#ff0000">9oSvxM/C7</font><font color="#ff0000">ZCZX1jLO3Q</font><font color="#F3E651">=</font>
+<font color="#ff0000"> private key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> listening port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">20246</font>
</pre>
<br />
<span>We now have the WireGuard up and running, but it is not yet in any functional configuration. We will come back to that later.</span><br />
@@ -195,34 +200,34 @@ interface: wg0
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % cat &lt;&lt;END | doas tee -a /etc/hosts
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /etc/hosts</font>
-<font color="#000000">192.168</font>.<font color="#000000">1.120</font> r0 r0.lan r0.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.121</font> r1 r1.lan r1.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.122</font> r2 r2.lan r2.lan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.120</font><font color="#ff0000"> r0 r0</font><font color="#F3E651">.</font><font color="#ff0000">lan r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.121</font><font color="#ff0000"> r1 r1</font><font color="#F3E651">.</font><font color="#ff0000">lan r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.122</font><font color="#ff0000"> r2 r2</font><font color="#F3E651">.</font><font color="#ff0000">lan r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-<font color="#000000">192.168</font>.<font color="#000000">2.130</font> f0.wg0 f0.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.131</font> f1.wg0 f1.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.132</font> f2.wg0 f2.wg0.wan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#ff0000"> f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#ff0000"> f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-<font color="#000000">192.168</font>.<font color="#000000">2.120</font> r0.wg0 r0.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.121</font> r1.wg0 r1.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.122</font> r2.wg0 r2.wg0.wan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#ff0000"> r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#ff0000"> r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-<font color="#000000">192.168</font>.<font color="#000000">2.110</font> blowfish.wg0 blowfish.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.111</font> fishfinger.wg0 fishfinger.wg0.wan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">130</font> f0.wg0 f0.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">131</font> f1.wg0 f1.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">132</font> f2.wg0 f2.wg0.wan.buetow.org
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">130</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">131</font><font color="#ff0000"> f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">132</font><font color="#ff0000"> f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">120</font> r0.wg0 r0.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">121</font> r1.wg0 r1.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">122</font> r2.wg0 r2.wg0.wan.buetow.org
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">120</font><font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">121</font><font color="#ff0000"> r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">122</font><font color="#ff0000"> r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</font> blowfish.wg0 blowfish.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">111</font> fishfinger.wg0 fishfinger.wg0.wan.buetow.org
-END
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">110</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">111</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>As you can see, <span class='inlinecode'>192.168.1.0/24</span> is the network used in my LAN (with the <span class='inlinecode'>fN</span> and <span class='inlinecode'>rN</span> hosts) and <span class='inlinecode'>192.168.2.0/24</span> is the network used for the WireGuard mesh network. The <span class='inlinecode'>wg0</span> interface will be used for all WireGuard traffic.</span><br />
@@ -235,8 +240,8 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~] dnf update -y
-[root@r0 ~] reboot
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> dnf update -y</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> reboot</font>
</pre>
<br />
<span>Next, we prepare WireGuard on them. Same as on the FreeBSD hosts, we will only prepare WireGuard without any useful configuration yet:</span><br />
@@ -245,12 +250,12 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~] dnf install -y wireguard-tools
-[root@r0 ~] mkdir -p /etc/wireguard
-[root@r0 ~] touch /etc/wireguard/wg<font color="#000000">0</font>.conf
-[root@r0 ~] systemctl <b><u><font color="#000000">enable</font></u></b> wg-quick@wg0.service
-[root@r0 ~] systemctl start wg-quick@wg0.service
-[root@r0 ~] systemctl disable firewalld
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> dnf install -y wireguard-tools</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> mkdir -p /etc/wireguard</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> touch /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> systemctl </font><b><font color="#ffffff">enable</font></b><font color="#ff0000"> wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> systemctl start wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> systemctl disable firewalld</font>
</pre>
<br />
<span>We also update the <span class='inlinecode'>hosts</span> file accordingly:</span><br />
@@ -259,34 +264,34 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~] cat &lt;&lt;END &gt;&gt;/etc/hosts
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;&gt;</font><font color="#ff0000">/etc/hosts</font>
-<font color="#000000">192.168</font>.<font color="#000000">1.130</font> f0 f0.lan f0.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.131</font> f1 f1.lan f1.lan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">1.132</font> f2 f2.lan f2.lan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> f0 f0</font><font color="#F3E651">.</font><font color="#ff0000">lan f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#ff0000"> f1 f1</font><font color="#F3E651">.</font><font color="#ff0000">lan f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#ff0000"> f2 f2</font><font color="#F3E651">.</font><font color="#ff0000">lan f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-<font color="#000000">192.168</font>.<font color="#000000">2.130</font> f0.wg0 f0.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.131</font> f1.wg0 f1.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.132</font> f2.wg0 f2.wg0.wan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#ff0000"> f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#ff0000"> f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-<font color="#000000">192.168</font>.<font color="#000000">2.120</font> r0.wg0 r0.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.121</font> r1.wg0 r1.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.122</font> r2.wg0 r2.wg0.wan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#ff0000"> r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#ff0000"> r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-<font color="#000000">192.168</font>.<font color="#000000">2.110</font> blowfish.wg0 blowfish.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.111</font> fishfinger.wg0 fishfinger.wg0.wan.buetow.org
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">130</font> f0.wg0 f0.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">131</font> f1.wg0 f1.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">132</font> f2.wg0 f2.wg0.wan.buetow.org
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">130</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">131</font><font color="#ff0000"> f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">132</font><font color="#ff0000"> f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">120</font> r0.wg0 r0.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">121</font> r1.wg0 r1.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">122</font> r2.wg0 r2.wg0.wan.buetow.org
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">120</font><font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">121</font><font color="#ff0000"> r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">122</font><font color="#ff0000"> r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</font> blowfish.wg0 blowfish.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">111</font> fishfinger.wg0 fishfinger.wg0.wan.buetow.org
-END
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">110</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">111</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>Unfortunately, the SELinux policy on Rocky Linux blocks WireGuard&#39;s operation. By making the <span class='inlinecode'>wireguard_t</span> domain permissive using <span class='inlinecode'>semanage permissive -a wireguard_t</span>, SELinux will no longer enforce restrictions for WireGuard, allowing it to work as intended:</span><br />
@@ -295,9 +300,9 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~] dnf install -y policycoreutils-python-utils
-[root@r0 ~] semanage permissive -a wireguard_t
-[root@r0 ~] reboot
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> dnf install -y policycoreutils-python-utils</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> semanage permissive -a wireguard_t</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><font color="#ff0000"> reboot</font>
</pre>
<br />
<a class='textlink' href='https://github.com/angristan/wireguard-install/discussions/499'>https://github.com/angristan/wireguard-install/discussions/499</a><br />
@@ -310,14 +315,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish$ doas pkg_add wireguard-tools
-blowfish$ doas mkdir /etc/wireguard
-blowfish$ doas touch /etc/wireguard/wg<font color="#000000">0</font>.conf
-blowsish$ cat &lt;&lt;END | doas tee /etc/hostname.wg0
-inet <font color="#000000">192.168</font>.<font color="#000000">2.110</font> <font color="#000000">255.255</font>.<font color="#000000">255.0</font> NONE
-up
-!/usr/local/bin/wg setconf wg0 /etc/wireguard/wg<font color="#000000">0</font>.conf
-END
+<pre><font color="#ff0000">blowfish$ doas pkg_add wireguard-tools</font>
+<font color="#ff0000">blowfish$ doas mkdir /etc/wireguard</font>
+<font color="#ff0000">blowfish$ doas touch /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">blowsish$ cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee /etc/hostname</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font>
+<font color="#ff0000">inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#ff0000"> </font><font color="#bb00ff">255.255</font><font color="#F3E651">.</font><font color="#bb00ff">255.0</font><font color="#ff0000"> NONE</font>
+<font color="#ff0000">up</font>
+<font color="#F3E651">!</font><font color="#ff0000">/usr/local/bin/wg setconf wg0 /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>Note that on <span class='inlinecode'>blowfish</span>, we configure <span class='inlinecode'>192.168.2.110</span> here in the <span class='inlinecode'>hostname.wg</span>, and on <span class='inlinecode'>fishfinger</span>, we configure <span class='inlinecode'>192.168.2.111</span>. Those are the IP addresses of the WireGuard interfaces on those hosts.</span><br />
@@ -328,34 +333,34 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish$ cat &lt;&lt;END | doas tee -a /etc/hosts
-
-<font color="#000000">192.168</font>.<font color="#000000">2.130</font> f0.wg0 f0.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.131</font> f1.wg0 f1.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.132</font> f2.wg0 f2.wg0.wan.buetow.org
-
-<font color="#000000">192.168</font>.<font color="#000000">2.120</font> r0.wg0 r0.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.121</font> r1.wg0 r1.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.122</font> r2.wg0 r2.wg0.wan.buetow.org
-
-<font color="#000000">192.168</font>.<font color="#000000">2.110</font> blowfish.wg0 blowfish.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.111</font> fishfinger.wg0 fishfinger.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.200</font> earth.wg0 earth.wg0.wan.buetow.org
-<font color="#000000">192.168</font>.<font color="#000000">2.201</font> pixel7pro.wg0 pixel7pro.wg0.wan.buetow.org
-
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">130</font> f0.wg0 f0.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">131</font> f1.wg0 f1.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">132</font> f2.wg0 f2.wg0.wan.buetow.org
-
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">120</font> r0.wg0 r0.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">121</font> r1.wg0 r1.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">122</font> r2.wg0 r2.wg0.wan.buetow.org
-
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</font> blowfish.wg0 blowfish.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">111</font> fishfinger.wg0 fishfinger.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">200</font> earth.wg0 earth.wg0.wan.buetow.org
-fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">201</font> pixel7pro.wg0 pixel7pro.wg0.wan.buetow.org
-END
+<pre><font color="#ff0000">blowfish$ cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /etc/hosts</font>
+
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#ff0000"> f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#ff0000"> f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#ff0000"> r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#ff0000"> r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.200</font><font color="#ff0000"> earth</font><font color="#F3E651">.</font><font color="#ff0000">wg0 earth</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.201</font><font color="#ff0000"> pixel7pro</font><font color="#F3E651">.</font><font color="#ff0000">wg0 pixel7pro</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">130</font><font color="#ff0000"> f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">131</font><font color="#ff0000"> f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">132</font><font color="#ff0000"> f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">120</font><font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">121</font><font color="#ff0000"> r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">122</font><font color="#ff0000"> r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">110</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">111</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">200</font><font color="#ff0000"> earth</font><font color="#F3E651">.</font><font color="#ff0000">wg0 earth</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">201</font><font color="#ff0000"> pixel7pro</font><font color="#F3E651">.</font><font color="#ff0000">wg0 pixel7pro</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>To enable roaming clients (like <span class='inlinecode'>earth</span> and <span class='inlinecode'>pixel7pro</span>) to access the internet through the VPN, we need to configure NAT on the OpenBSD gateways. This allows the roaming clients to use the gateway&#39;s public IP address for outbound traffic. We add the following to <span class='inlinecode'>/etc/pf.conf</span> on both <span class='inlinecode'>blowfish</span> and <span class='inlinecode'>fishfinger</span>:</span><br />
@@ -364,14 +369,14 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># NAT for WireGuard clients to access internet</font></i>
-match out on vio0 from <font color="#000000">192.168</font>.<font color="#000000">2.0</font>/<font color="#000000">24</font> to any nat-to (vio0)
+<pre><i><font color="#ababab"># NAT for WireGuard clients to access internet</font></i>
+<font color="#ff0000">match out on vio0 from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.0</font><font color="#F3E651">/</font><font color="#bb00ff">24</font><font color="#ff0000"> to any nat-to </font><font color="#F3E651">(</font><font color="#ff0000">vio0</font><font color="#F3E651">)</font>
-<i><font color="silver"># Allow inbound traffic on WireGuard interface</font></i>
-pass <b><u><font color="#000000">in</font></u></b> on wg0
+<i><font color="#ababab"># Allow inbound traffic on WireGuard interface</font></i>
+<font color="#ff0000">pass </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> on wg0</font>
-<i><font color="silver"># Allow all UDP traffic on WireGuard port</font></i>
-pass <b><u><font color="#000000">in</font></u></b> inet proto udp from any to any port <font color="#000000">56709</font>
+<i><font color="#ababab"># Allow all UDP traffic on WireGuard port</font></i>
+<font color="#ff0000">pass </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> inet proto udp from any to any port </font><font color="#bb00ff">56709</font>
</pre>
<br />
<span>The NAT rule translates outgoing traffic from the WireGuard network (192.168.2.0/24) to the gateway&#39;s public IP. The firewall rules permit WireGuard traffic on the wg0 interface and UDP port 56709. After updating <span class='inlinecode'>/etc/pf.conf</span>, reload the firewall:</span><br />
@@ -380,7 +385,7 @@ pass <b><u><font color="#000000">in</font></u></b> inet proto udp from any to an
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish$ doas pfctl -f /etc/pf.conf
+<pre><font color="#ff0000">blowfish$ doas pfctl -f /etc/pf</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
</pre>
<br />
<h2 style='display: inline' id='wireguard-configuration'>WireGuard configuration</h2><br />
@@ -539,10 +544,10 @@ PersistentKeepalive = 25
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; git clone https://codeberg.org/snonux/wireguardmeshgenerator
-&gt; cd ./wireguardmeshgenerator
-&gt; bundle install
-&gt; sudo dnf install -y wireguard-tools
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/wireguardmeshgenerator</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> cd </font><font color="#F3E651">.</font><font color="#ff0000">/wireguardmeshgenerator</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> bundle install</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> sudo dnf install -y wireguard-tools</font>
</pre>
<br />
<span>This assumes that Ruby and the <span class='inlinecode'>bundler</span> gem are already installed. If not, refer to the docs of your distribution.</span><br />
@@ -742,39 +747,39 @@ hosts:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">begin</font></u></b>
- options = { hosts: [] }
- OptionParser.new <b><u><font color="#000000">do</font></u></b> |opts|
- opts.banner = <font color="#808080">'Usage: wireguardmeshgenerator.rb [options]'</font>
- opts.on(<font color="#808080">'--generate'</font>, <font color="#808080">'Generate Wireguard configs'</font>) <b><u><font color="#000000">do</font></u></b>
- options[:generate] = <b><u><font color="#000000">true</font></u></b>
- <b><u><font color="#000000">end</font></u></b>
- opts.on(<font color="#808080">'--install'</font>, <font color="#808080">'Install Wireguard configs'</font>) <b><u><font color="#000000">do</font></u></b>
- options[:install] = <b><u><font color="#000000">true</font></u></b>
- <b><u><font color="#000000">end</font></u></b>
- opts.on(<font color="#808080">'--clean'</font>, <font color="#808080">'Clean Wireguard configs'</font>) <b><u><font color="#000000">do</font></u></b>
- options[:clean] = <b><u><font color="#000000">true</font></u></b>
- <b><u><font color="#000000">end</font></u></b>
- opts.on(<font color="#808080">'--hosts=HOSTS'</font>, <font color="#808080">'Comma separated hosts to configure'</font>) <b><u><font color="#000000">do</font></u></b> |hosts|
- options[:hosts] = hosts.split(<font color="#808080">','</font>)
- <b><u><font color="#000000">end</font></u></b>
- <b><u><font color="#000000">end</font></u></b>.parse!
-
- conf = YAML.load_file(<font color="#808080">'wireguardmeshgenerator.yaml'</font>).freeze
- conf[<font color="#808080">'hosts'</font>].keys.select { options[:hosts].empty? || options[:hosts].<b><u><font color="#000000">include</font></u></b>?(_1) }
- .each <b><u><font color="#000000">do</font></u></b> |host|
- <i><font color="silver"># Generate Wireguard configuration for the host reload!</font></i>
- WireguardConfig.new(host, conf[<font color="#808080">'hosts'</font>]).generate! <b><u><font color="#000000">if</font></u></b> options[:generate]
- <i><font color="silver"># Install Wireguard configuration for the host.</font></i>
- InstallConfig.new(host, conf[<font color="#808080">'hosts'</font>]).upload!.install!.reload! <b><u><font color="#000000">if</font></u></b> options[:install]
- <i><font color="silver"># Clean Wireguard configuration for the host.</font></i>
- WireguardConfig.new(host, conf[<font color="#808080">'hosts'</font>]).clean! <b><u><font color="#000000">if</font></u></b> options[:clean]
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">rescue</font></u></b> StandardError =&gt; e
- puts <font color="#808080">"Error: #{e.message}"</font>
- puts e.backtrace.join(<font color="#808080">"\n"</font>)
- exit <font color="#000000">2</font>
-<b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">begin</font></b>
+<font color="#ff0000"> options </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> hosts</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">[]</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> OptionParser</font><font color="#F3E651">.</font><font color="#ff0000">new </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">opts</font><font color="#F3E651">|</font>
+<font color="#ff0000"> opts</font><font color="#F3E651">.</font><font color="#ff0000">banner </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">'Usage: wireguardmeshgenerator.rb [options]'</font>
+<font color="#ff0000"> opts</font><font color="#F3E651">.</font><font color="#ff0000">on</font><font color="#F3E651">(</font><font color="#bb00ff">'--generate'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'Generate Wireguard configs'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">generate</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> opts</font><font color="#F3E651">.</font><font color="#ff0000">on</font><font color="#F3E651">(</font><font color="#bb00ff">'--install'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'Install Wireguard configs'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">install</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> opts</font><font color="#F3E651">.</font><font color="#ff0000">on</font><font color="#F3E651">(</font><font color="#bb00ff">'--clean'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'Clean Wireguard configs'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">clean</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> opts</font><font color="#F3E651">.</font><font color="#ff0000">on</font><font color="#F3E651">(</font><font color="#bb00ff">'--hosts=HOSTS'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'Comma separated hosts to configure'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">hosts</font><font color="#F3E651">|</font>
+<font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">hosts</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> hosts</font><font color="#F3E651">.</font><font color="#ff0000">split</font><font color="#F3E651">(</font><font color="#bb00ff">','</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b><font color="#F3E651">.</font><font color="#ff0000">parse!</font>
+
+<font color="#ff0000"> conf </font><font color="#F3E651">=</font><font color="#ff0000"> YAML</font><font color="#F3E651">.</font><font color="#ff0000">load_file</font><font color="#F3E651">(</font><font color="#bb00ff">'wireguardmeshgenerator.yaml'</font><font color="#F3E651">).</font><font color="#ff0000">freeze</font>
+<font color="#ff0000"> conf</font><font color="#F3E651">[</font><font color="#bb00ff">'hosts'</font><font color="#F3E651">].</font><font color="#ff0000">keys</font><font color="#F3E651">.</font><font color="#ff0000">select </font><font color="#F3E651">{</font><font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">hosts</font><font color="#F3E651">].</font><font color="#ff0000">empty? </font><font color="#F3E651">||</font><font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">hosts</font><font color="#F3E651">].</font><b><font color="#ffffff">include</font></b><font color="#F3E651">?(</font><font color="#ff0000">_1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000">each </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">host</font><font color="#F3E651">|</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Generate Wireguard configuration for the host reload!</font></i>
+<font color="#ff0000"> WireguardConfig</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">(</font><font color="#ff0000">host</font><font color="#F3E651">,</font><font color="#ff0000"> conf</font><font color="#F3E651">[</font><font color="#bb00ff">'hosts'</font><font color="#F3E651">]).</font><font color="#ff0000">generate! </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">generate</font><font color="#F3E651">]</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Install Wireguard configuration for the host.</font></i>
+<font color="#ff0000"> InstallConfig</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">(</font><font color="#ff0000">host</font><font color="#F3E651">,</font><font color="#ff0000"> conf</font><font color="#F3E651">[</font><font color="#bb00ff">'hosts'</font><font color="#F3E651">]).</font><font color="#ff0000">upload!</font><font color="#F3E651">.</font><font color="#ff0000">install!</font><font color="#F3E651">.</font><font color="#ff0000">reload! </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">install</font><font color="#F3E651">]</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Clean Wireguard configuration for the host.</font></i>
+<font color="#ff0000"> WireguardConfig</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">(</font><font color="#ff0000">host</font><font color="#F3E651">,</font><font color="#ff0000"> conf</font><font color="#F3E651">[</font><font color="#bb00ff">'hosts'</font><font color="#F3E651">]).</font><font color="#ff0000">clean! </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> options</font><font color="#F3E651">[:</font><font color="#ff0000">clean</font><font color="#F3E651">]</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">rescue</font></b><font color="#ff0000"> StandardError </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> e</font>
+<font color="#ff0000"> puts </font><font color="#bb00ff">"Error: #{e.message}"</font>
+<font color="#ff0000"> puts e</font><font color="#F3E651">.</font><font color="#ff0000">backtrace</font><font color="#F3E651">.</font><font color="#ff0000">join</font><font color="#F3E651">(</font><font color="#bb00ff">"\n"</font><font color="#F3E651">)</font>
+<font color="#ff0000"> exit </font><font color="#bb00ff">2</font>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>And we also have a <span class='inlinecode'>Rakefile</span>:</span><br />
@@ -783,19 +788,19 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>task :generate <b><u><font color="#000000">do</font></u></b>
- ruby <font color="#808080">'wireguardmeshgenerator.rb'</font>, <font color="#808080">'--generate'</font>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">task </font><font color="#F3E651">:</font><font color="#ff0000">generate </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> ruby </font><font color="#bb00ff">'wireguardmeshgenerator.rb'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'--generate'</font>
+<b><font color="#ffffff">end</font></b>
-task :clean <b><u><font color="#000000">do</font></u></b>
- ruby <font color="#808080">'wireguardmeshgenerator.rb'</font>, <font color="#808080">'--clean'</font>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000">task </font><font color="#F3E651">:</font><font color="#ff0000">clean </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> ruby </font><font color="#bb00ff">'wireguardmeshgenerator.rb'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'--clean'</font>
+<b><font color="#ffffff">end</font></b>
-task :install <b><u><font color="#000000">do</font></u></b>
- ruby <font color="#808080">'wireguardmeshgenerator.rb'</font>, <font color="#808080">'--install'</font>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000">task </font><font color="#F3E651">:</font><font color="#ff0000">install </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> ruby </font><font color="#bb00ff">'wireguardmeshgenerator.rb'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'--install'</font>
+<b><font color="#ffffff">end</font></b>
-task default: :generate
+<font color="#ff0000">task default</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">generate</font>
</pre>
<br />
<br />
@@ -809,18 +814,18 @@ task default: :generate
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; rake generate
-/usr/bin/ruby wireguardmeshgenerator.rb --generate
-Generating dist/f<font color="#000000">0</font>/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/f<font color="#000000">1</font>/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/f<font color="#000000">2</font>/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/r<font color="#000000">0</font>/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/r<font color="#000000">1</font>/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/r<font color="#000000">2</font>/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/blowfish/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/fishfinger/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/earth/etc/wireguard/wg<font color="#000000">0</font>.conf
-Generating dist/pixel7pro/etc/wireguard/wg<font color="#000000">0</font>.conf
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> rake generate</font>
+<font color="#ff0000">/usr/bin/ruby wireguardmeshgenerator</font><font color="#F3E651">.</font><font color="#ff0000">rb --generate</font>
+<font color="#ff0000">Generating dist/f</font><font color="#bb00ff">0</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/f</font><font color="#bb00ff">1</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/f</font><font color="#bb00ff">2</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/r</font><font color="#bb00ff">0</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/r</font><font color="#bb00ff">1</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/r</font><font color="#bb00ff">2</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/blowfish/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/fishfinger/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/earth/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">Generating dist/pixel7pro/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
</pre>
<br />
<span>It generated all the <span class='inlinecode'>wg0.conf</span> files listed in the output, plus those keys:</span><br />
@@ -829,59 +834,59 @@ Generating dist/pixel7pro/etc/wireguard/wg<font color="#000000">0</font>.conf
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; find keys/ -type f
-keys/f<font color="#000000">0</font>/priv.key
-keys/f<font color="#000000">0</font>/pub.key
-keys/psk/f0_f1.key
-keys/psk/f0_f2.key
-keys/psk/f0_r0.key
-keys/psk/f0_r1.key
-keys/psk/f0_r2.key
-keys/psk/blowfish_f0.key
-keys/psk/f0_fishfinger.key
-keys/psk/f1_f2.key
-keys/psk/f1_r0.key
-keys/psk/f1_r1.key
-keys/psk/f1_r2.key
-keys/psk/blowfish_f1.key
-keys/psk/f1_fishfinger.key
-keys/psk/f2_r0.key
-keys/psk/f2_r1.key
-keys/psk/f2_r2.key
-keys/psk/blowfish_f2.key
-keys/psk/f2_fishfinger.key
-keys/psk/r0_r1.key
-keys/psk/r0_r2.key
-keys/psk/blowfish_r0.key
-keys/psk/fishfinger_r0.key
-keys/psk/r1_r2.key
-keys/psk/blowfish_r1.key
-keys/psk/fishfinger_r1.key
-keys/psk/blowfish_r2.key
-keys/psk/fishfinger_r2.key
-keys/psk/blowfish_fishfinger.key
-keys/psk/blowfish_earth.key
-keys/psk/earth_fishfinger.key
-keys/psk/blowfish_pixel7pro.key
-keys/psk/fishfinger_pixel7pro.key
-keys/f<font color="#000000">1</font>/priv.key
-keys/f<font color="#000000">1</font>/pub.key
-keys/f<font color="#000000">2</font>/priv.key
-keys/f<font color="#000000">2</font>/pub.key
-keys/r<font color="#000000">0</font>/priv.key
-keys/r<font color="#000000">0</font>/pub.key
-keys/r<font color="#000000">1</font>/priv.key
-keys/r<font color="#000000">1</font>/pub.key
-keys/r<font color="#000000">2</font>/priv.key
-keys/r<font color="#000000">2</font>/pub.key
-keys/blowfish/priv.key
-keys/blowfish/pub.key
-keys/fishfinger/priv.key
-keys/fishfinger/pub.key
-keys/earth/priv.key
-keys/earth/pub.key
-keys/pixel7pro/priv.key
-keys/pixel7pro/pub.key
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> find keys</font><font color="#F3E651">/</font><font color="#ff0000"> -type f</font>
+<font color="#ff0000">keys/f</font><font color="#bb00ff">0</font><font color="#ff0000">/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/f</font><font color="#bb00ff">0</font><font color="#ff0000">/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f0_f1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f0_f2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f0_r0</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f0_r1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f0_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_f0</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f0_fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f1_f2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f1_r0</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f1_r1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f1_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_f1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f1_fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f2_r0</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f2_r1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f2_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_f2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/f2_fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/r0_r1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/r0_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_r0</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/fishfinger_r0</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/r1_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_r1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/fishfinger_r1</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/fishfinger_r2</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_earth</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/earth_fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/blowfish_pixel7pro</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/psk/fishfinger_pixel7pro</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/f</font><font color="#bb00ff">1</font><font color="#ff0000">/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/f</font><font color="#bb00ff">1</font><font color="#ff0000">/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/f</font><font color="#bb00ff">2</font><font color="#ff0000">/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/f</font><font color="#bb00ff">2</font><font color="#ff0000">/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/r</font><font color="#bb00ff">0</font><font color="#ff0000">/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/r</font><font color="#bb00ff">0</font><font color="#ff0000">/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/r</font><font color="#bb00ff">1</font><font color="#ff0000">/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/r</font><font color="#bb00ff">1</font><font color="#ff0000">/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/r</font><font color="#bb00ff">2</font><font color="#ff0000">/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/r</font><font color="#bb00ff">2</font><font color="#ff0000">/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/blowfish/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/blowfish/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/fishfinger/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/fishfinger/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/earth/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/earth/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/pixel7pro/priv</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
+<font color="#ff0000">keys/pixel7pro/pub</font><font color="#F3E651">.</font><font color="#ff0000">key</font>
</pre>
<br />
<span>Those keys are embedded in the resulting <span class='inlinecode'>wg0.conf</span>, so later, we only need to install the <span class='inlinecode'>wg0.conf</span> files and not all the keys individually.</span><br />
@@ -894,112 +899,112 @@ keys/pixel7pro/pub.key
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; rake install
-/usr/bin/ruby wireguardmeshgenerator.rb --install
-Uploading dist/f<font color="#000000">0</font>/etc/wireguard/wg<font color="#000000">0</font>.conf to f0.lan.buetow.org:.
-Installing Wireguard config on f0
-Uploading cmd.sh to f0.lan.buetow.org:.
-+ [ ! -d /usr/local/etc/wireguard ]
-+ doas chmod <font color="#000000">700</font> /usr/local/etc/wireguard
-+ doas mv -v wg0.conf /usr/local/etc/wireguard
-wg0.conf -&gt; /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-+ doas chmod <font color="#000000">644</font> /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on f0
-Uploading cmd.sh to f0.lan.buetow.org:.
-+ doas service wireguard reload
-+ rm cmd.sh
-Uploading dist/f<font color="#000000">1</font>/etc/wireguard/wg<font color="#000000">0</font>.conf to f1.lan.buetow.org:.
-Installing Wireguard config on f1
-Uploading cmd.sh to f1.lan.buetow.org:.
-+ [ ! -d /usr/local/etc/wireguard ]
-+ doas chmod <font color="#000000">700</font> /usr/local/etc/wireguard
-+ doas mv -v wg0.conf /usr/local/etc/wireguard
-wg0.conf -&gt; /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-+ doas chmod <font color="#000000">644</font> /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on f1
-Uploading cmd.sh to f1.lan.buetow.org:.
-+ doas service wireguard reload
-+ rm cmd.sh
-Uploading dist/f<font color="#000000">2</font>/etc/wireguard/wg<font color="#000000">0</font>.conf to f2.lan.buetow.org:.
-Installing Wireguard config on f2
-Uploading cmd.sh to f2.lan.buetow.org:.
-+ [ ! -d /usr/local/etc/wireguard ]
-+ doas chmod <font color="#000000">700</font> /usr/local/etc/wireguard
-+ doas mv -v wg0.conf /usr/local/etc/wireguard
-wg0.conf -&gt; /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-+ doas chmod <font color="#000000">644</font> /usr/local/etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on f2
-Uploading cmd.sh to f2.lan.buetow.org:.
-+ doas service wireguard reload
-+ rm cmd.sh
-Uploading dist/r<font color="#000000">0</font>/etc/wireguard/wg<font color="#000000">0</font>.conf to r0.lan.buetow.org:.
-Installing Wireguard config on r0
-Uploading cmd.sh to r0.lan.buetow.org:.
-+ <font color="#808080">'['</font> <font color="#808080">'!'</font> -d /etc/wireguard <font color="#808080">']'</font>
-+ chmod <font color="#000000">700</font> /etc/wireguard
-+ mv -v wg0.conf /etc/wireguard
-renamed <font color="#808080">'wg0.conf'</font> -&gt; <font color="#808080">'/etc/wireguard/wg0.conf'</font>
-+ chmod <font color="#000000">644</font> /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on r0
-Uploading cmd.sh to r0.lan.buetow.org:.
-+ systemctl reload wg-quick@wg0.service
-+ rm cmd.sh
-Uploading dist/r<font color="#000000">1</font>/etc/wireguard/wg<font color="#000000">0</font>.conf to r1.lan.buetow.org:.
-Installing Wireguard config on r1
-Uploading cmd.sh to r1.lan.buetow.org:.
-+ <font color="#808080">'['</font> <font color="#808080">'!'</font> -d /etc/wireguard <font color="#808080">']'</font>
-+ chmod <font color="#000000">700</font> /etc/wireguard
-+ mv -v wg0.conf /etc/wireguard
-renamed <font color="#808080">'wg0.conf'</font> -&gt; <font color="#808080">'/etc/wireguard/wg0.conf'</font>
-+ chmod <font color="#000000">644</font> /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on r1
-Uploading cmd.sh to r1.lan.buetow.org:.
-+ systemctl reload wg-quick@wg0.service
-+ rm cmd.sh
-Uploading dist/r<font color="#000000">2</font>/etc/wireguard/wg<font color="#000000">0</font>.conf to r2.lan.buetow.org:.
-Installing Wireguard config on r2
-Uploading cmd.sh to r2.lan.buetow.org:.
-+ <font color="#808080">'['</font> <font color="#808080">'!'</font> -d /etc/wireguard <font color="#808080">']'</font>
-+ chmod <font color="#000000">700</font> /etc/wireguard
-+ mv -v wg0.conf /etc/wireguard
-renamed <font color="#808080">'wg0.conf'</font> -&gt; <font color="#808080">'/etc/wireguard/wg0.conf'</font>
-+ chmod <font color="#000000">644</font> /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on r2
-Uploading cmd.sh to r2.lan.buetow.org:.
-+ systemctl reload wg-quick@wg0.service
-+ rm cmd.sh
-Uploading dist/blowfish/etc/wireguard/wg<font color="#000000">0</font>.conf to blowfish.buetow.org:.
-Installing Wireguard config on blowfish
-Uploading cmd.sh to blowfish.buetow.org:.
-+ [ ! -d /etc/wireguard ]
-+ doas chmod <font color="#000000">700</font> /etc/wireguard
-+ doas mv -v wg0.conf /etc/wireguard
-wg0.conf -&gt; /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ doas chmod <font color="#000000">644</font> /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on blowfish
-Uploading cmd.sh to blowfish.buetow.org:.
-+ doas sh /etc/netstart wg0
-+ rm cmd.sh
-Uploading dist/fishfinger/etc/wireguard/wg<font color="#000000">0</font>.conf to fishfinger.buetow.org:.
-Installing Wireguard config on fishfinger
-Uploading cmd.sh to fishfinger.buetow.org:.
-+ [ ! -d /etc/wireguard ]
-+ doas chmod <font color="#000000">700</font> /etc/wireguard
-+ doas mv -v wg0.conf /etc/wireguard
-wg0.conf -&gt; /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ doas chmod <font color="#000000">644</font> /etc/wireguard/wg<font color="#000000">0</font>.conf
-+ rm cmd.sh
-Reloading Wireguard on fishfinger
-Uploading cmd.sh to fishfinger.buetow.org:.
-+ doas sh /etc/netstart wg0
-+ rm cmd.sh
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> rake install</font>
+<font color="#ff0000">/usr/bin/ruby wireguardmeshgenerator</font><font color="#F3E651">.</font><font color="#ff0000">rb --install</font>
+<font color="#ff0000">Uploading dist/f</font><font color="#bb00ff">0</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on f0</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d /usr/local/etc/wireguard </font><font color="#F3E651">]</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /usr/local/etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /usr/local/etc/wireguard</font>
+<font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on f0</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas service wireguard reload</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/f</font><font color="#bb00ff">1</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on f1</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d /usr/local/etc/wireguard </font><font color="#F3E651">]</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /usr/local/etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /usr/local/etc/wireguard</font>
+<font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on f1</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas service wireguard reload</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/f</font><font color="#bb00ff">2</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on f2</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d /usr/local/etc/wireguard </font><font color="#F3E651">]</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /usr/local/etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /usr/local/etc/wireguard</font>
+<font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /usr/local/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on f2</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas service wireguard reload</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/r</font><font color="#bb00ff">0</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on r0</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#bb00ff">'['</font><font color="#ff0000"> </font><font color="#bb00ff">'!'</font><font color="#ff0000"> -d /etc/wireguard </font><font color="#bb00ff">']'</font>
+<font color="#F3E651">+</font><font color="#ff0000"> chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font>
+<font color="#ff0000">renamed </font><font color="#bb00ff">'wg0.conf'</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">'/etc/wireguard/wg0.conf'</font>
+<font color="#F3E651">+</font><font color="#ff0000"> chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on r0</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> systemctl reload wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/r</font><font color="#bb00ff">1</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on r1</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#bb00ff">'['</font><font color="#ff0000"> </font><font color="#bb00ff">'!'</font><font color="#ff0000"> -d /etc/wireguard </font><font color="#bb00ff">']'</font>
+<font color="#F3E651">+</font><font color="#ff0000"> chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font>
+<font color="#ff0000">renamed </font><font color="#bb00ff">'wg0.conf'</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">'/etc/wireguard/wg0.conf'</font>
+<font color="#F3E651">+</font><font color="#ff0000"> chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on r1</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> systemctl reload wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/r</font><font color="#bb00ff">2</font><font color="#ff0000">/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on r2</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#bb00ff">'['</font><font color="#ff0000"> </font><font color="#bb00ff">'!'</font><font color="#ff0000"> -d /etc/wireguard </font><font color="#bb00ff">']'</font>
+<font color="#F3E651">+</font><font color="#ff0000"> chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font>
+<font color="#ff0000">renamed </font><font color="#bb00ff">'wg0.conf'</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">'/etc/wireguard/wg0.conf'</font>
+<font color="#F3E651">+</font><font color="#ff0000"> chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on r2</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> systemctl reload wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/blowfish/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to blowfish</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on blowfish</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to blowfish</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d /etc/wireguard </font><font color="#F3E651">]</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font>
+<font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on blowfish</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to blowfish</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas sh /etc/netstart wg0</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Uploading dist/fishfinger/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf to fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#ff0000">Installing Wireguard config on fishfinger</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d /etc/wireguard </font><font color="#F3E651">]</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">700</font><font color="#ff0000"> /etc/wireguard</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas mv -v wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font>
+<font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">conf -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">644</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">Reloading Wireguard on fishfinger</font>
+<font color="#ff0000">Uploading cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh to fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:.</font>
+<font color="#F3E651">+</font><font color="#ff0000"> doas sh /etc/netstart wg0</font>
+<font color="#F3E651">+</font><font color="#ff0000"> rm cmd</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
</pre>
<br />
<h3 style='display: inline' id='re-generating-mesh-and-installing-the-wg0conf-files-again'>Re-generating mesh and installing the <span class='inlinecode'>wg0.conf</span> files again</h3><br />
@@ -1010,9 +1015,9 @@ Uploading cmd.sh to fishfinger.buetow.org:.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; rake clean
-&gt; rake generate
-&gt; rake install
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> rake clean</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> rake generate</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> rake install</font>
</pre>
<br />
<span>That would also delete and re-generate all the keys involved.</span><br />
@@ -1029,8 +1034,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; sudo dnf install qrencode
-&gt; qrencode -t ansiutf8 &lt; dist/pixel7pro/etc/wireguard/wg<font color="#000000">0</font>.conf
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> sudo dnf install qrencode</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> qrencode -t ansiutf8 </font><font color="#F3E651">&lt;</font><font color="#ff0000"> dist/pixel7pro/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
</pre>
<br />
<span>Scan the QR code with the WireGuard app to import the configuration. The phone will then route all traffic through the VPN when the tunnel is activated. Note that WireGuard does not support automatic failover between the two gateways (<span class='inlinecode'>blowfish</span> and <span class='inlinecode'>fishfinger</span>)—if one fails, manual disconnection and reconnection is required to switch to the other.</span><br />
@@ -1043,10 +1048,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; sudo cp dist/earth/etc/wireguard/wg<font color="#000000">0</font>.conf /etc/wireguard/
-&gt; sudo chmod <font color="#000000">600</font> /etc/wireguard/wg<font color="#000000">0</font>.conf
-&gt; sudo systemctl start wg-quick@wg0.service <i><font color="silver"># Start manually</font></i>
-&gt; sudo systemctl disable wg-quick@wg0.service <i><font color="silver"># Prevent auto-start</font></i>
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> sudo cp dist/earth/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font><font color="#F3E651">/</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> sudo chmod </font><font color="#bb00ff">600</font><font color="#ff0000"> /etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> sudo systemctl start wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service </font><i><font color="#ababab"># Start manually</font></i>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> sudo systemctl disable wg-quick@wg0</font><font color="#F3E651">.</font><font color="#ff0000">service </font><i><font color="#ababab"># Prevent auto-start</font></i>
</pre>
<br />
<span>The service is disabled from auto-start so the VPN is only active when manually started. This allows selective VPN usage based on need.</span><br />
@@ -1090,19 +1095,19 @@ fd42:beef:cafe:2::201/64 - pixel7pro.wg0 (roaming phone)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">def</font></u></b> address
- <b><u><font color="#000000">return</font></u></b> <font color="#808080">'# No Address = ... for OpenBSD here'</font> <b><u><font color="#000000">if</font></u></b> hosts[myself][<font color="#808080">'os'</font>] == <font color="#808080">'OpenBSD'</font>
-
- ipv4 = hosts[myself][<font color="#808080">'wg0'</font>][<font color="#808080">'ip'</font>]
- ipv6 = hosts[myself][<font color="#808080">'wg0'</font>][<font color="#808080">'ipv6'</font>]
-
- <i><font color="silver"># WireGuard supports multiple Address directives for dual-stack</font></i>
- <b><u><font color="#000000">if</font></u></b> ipv6
- <font color="#808080">"Address = #{ipv4}\nAddress = #{ipv6}/64"</font>
- <b><u><font color="#000000">else</font></u></b>
- <font color="#808080">"Address = #{ipv4}"</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">def</font></b><font color="#ff0000"> address</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">'# No Address = ... for OpenBSD here'</font><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> hosts</font><font color="#F3E651">[</font><font color="#ff0000">myself</font><font color="#F3E651">][</font><font color="#bb00ff">'os'</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> </font><font color="#bb00ff">'OpenBSD'</font>
+
+<font color="#ff0000"> ipv4 </font><font color="#F3E651">=</font><font color="#ff0000"> hosts</font><font color="#F3E651">[</font><font color="#ff0000">myself</font><font color="#F3E651">][</font><font color="#bb00ff">'wg0'</font><font color="#F3E651">][</font><font color="#bb00ff">'ip'</font><font color="#F3E651">]</font>
+<font color="#ff0000"> ipv6 </font><font color="#F3E651">=</font><font color="#ff0000"> hosts</font><font color="#F3E651">[</font><font color="#ff0000">myself</font><font color="#F3E651">][</font><font color="#bb00ff">'wg0'</font><font color="#F3E651">][</font><font color="#bb00ff">'ipv6'</font><font color="#F3E651">]</font>
+
+<font color="#ff0000"> </font><i><font color="#ababab"># WireGuard supports multiple Address directives for dual-stack</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> ipv6</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"Address = #{ipv4}\nAddress = #{ipv6}/64"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> </font><font color="#bb00ff">"Address = #{ipv4}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>**2. AllowedIPs generation (<span class='inlinecode'>peers</span> method)**</span><br />
@@ -1113,14 +1118,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">if</font></u></b> is_roaming
- allowed_ips = <font color="#808080">'0.0.0.0/0, ::/0'</font>
-<b><u><font color="#000000">else</font></u></b>
- <i><font color="silver"># For mesh peers, allow both IPv4 and IPv6 if present</font></i>
- ipv4 = data[<font color="#808080">'wg0'</font>][<font color="#808080">'ip'</font>]
- ipv6 = data[<font color="#808080">'wg0'</font>][<font color="#808080">'ipv6'</font>]
- allowed_ips = ipv6 ? <font color="#808080">"#{ipv4}/32, #{ipv6}/128"</font> : <font color="#808080">"#{ipv4}/32"</font>
-<b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">if</font></b><font color="#ff0000"> is_roaming</font>
+<font color="#ff0000"> allowed_ips </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">'0.0.0.0/0, ::/0'</font>
+<b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> </font><i><font color="#ababab"># For mesh peers, allow both IPv4 and IPv6 if present</font></i>
+<font color="#ff0000"> ipv4 </font><font color="#F3E651">=</font><font color="#ff0000"> data</font><font color="#F3E651">[</font><font color="#bb00ff">'wg0'</font><font color="#F3E651">][</font><font color="#bb00ff">'ip'</font><font color="#F3E651">]</font>
+<font color="#ff0000"> ipv6 </font><font color="#F3E651">=</font><font color="#ff0000"> data</font><font color="#F3E651">[</font><font color="#bb00ff">'wg0'</font><font color="#F3E651">][</font><font color="#bb00ff">'ipv6'</font><font color="#F3E651">]</font>
+<font color="#ff0000"> allowed_ips </font><font color="#F3E651">=</font><font color="#ff0000"> ipv6 </font><font color="#F3E651">?</font><font color="#ff0000"> </font><font color="#bb00ff">"#{ipv4}/32, #{ipv6}/128"</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"#{ipv4}/32"</font>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>Roaming clients keep <span class='inlinecode'>AllowedIPs = 0.0.0.0/0, ::/0</span> to route all traffic (IPv4 and IPv6) through the VPN.</span><br />
@@ -1152,7 +1157,7 @@ pass in inet6 proto udp from any to any port 56709
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>rex@blowfish:~ $ doas vi /etc/hostname.wg0
+<pre><font color="#ff0000">rex@blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ doas vi /etc/hostname</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font>
</pre>
<br />
<span>Add the IPv6 address (note the order - IPv6 must be configured before <span class='inlinecode'>up</span>):</span><br />
@@ -1172,9 +1177,9 @@ up
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>rex@blowfish:~ $ doas sh /etc/netstart wg0
-rex@blowfish:~ $ ifconfig wg0 | grep inet6
-inet6 fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</font> prefixlen <font color="#000000">64</font>
+<pre><font color="#ff0000">rex@blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ doas sh /etc/netstart wg0</font>
+<font color="#ff0000">rex@blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ ifconfig wg0 </font><font color="#F3E651">|</font><font color="#ff0000"> grep inet6</font>
+<font color="#ff0000">inet6 fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">110</font><font color="#ff0000"> prefixlen </font><font color="#bb00ff">64</font>
</pre>
<br />
<span>Repeat for <span class='inlinecode'>fishfinger</span> with address <span class='inlinecode'>fd42:beef:cafe:2::111</span>.</span><br />
@@ -1189,14 +1194,14 @@ inet6 fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># From r0 (Rocky Linux VM)</font></i>
-root@r0:~ <i><font color="silver"># ping -c 2 192.168.2.130 # IPv4 to f0</font></i>
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.130</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">2.12</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.130</font>: icmp_seq=<font color="#000000">2</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.681</font> ms
-
-root@r0:~ <i><font color="silver"># ping6 -c 2 fd42:beef:cafe:2::130 # IPv6 to f0</font></i>
-<font color="#000000">64</font> bytes from fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">130</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">2.16</font> ms
-<font color="#000000">64</font> bytes from fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">130</font>: icmp_seq=<font color="#000000">2</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.909</font> ms
+<pre><i><font color="#ababab"># From r0 (Rocky Linux VM)</font></i>
+<font color="#ff0000">root@r0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># ping -c 2 192.168.2.130 # IPv4 to f0</font></i>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">2.12</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.681</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">root@r0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># ping6 -c 2 fd42:beef:cafe:2::130 # IPv6 to f0</font></i>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">130</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">2.16</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">130</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.909</font><font color="#ff0000"> ms</font>
</pre>
<br />
<span>The dual-stack configuration is backward compatible—hosts without the <span class='inlinecode'>ipv6</span> field in the YAML configuration will continue to generate IPv4-only configs.</span><br />
@@ -1219,52 +1224,52 @@ root@r0:~ <i><font color="silver"># ping6 -c 2 fd42:beef:cafe:2::130 # IPv6 to
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas wg show
-interface: wg0
- public key: Jm6YItMt94++dIeOyVi1I9AhNt2qQcryxCZezoX7X2Y=
- private key: (hidden)
- listening port: <font color="#000000">56709</font>
-
-peer: 8PvGZH1NohHpZPVJyjhctBX9xblsNvYBhpg68FsFcns=
- preshared key: (hidden)
- endpoint: <font color="#000000">46.23</font>.<font color="#000000">94.99</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.111</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">111</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">1</font> minute, <font color="#000000">46</font> seconds ago
- transfer: <font color="#000000">124</font> B received, <font color="#000000">1.75</font> KiB sent
- persistent keepalive: every <font color="#000000">25</font> seconds
-
-peer: Xow+d3qVXgUMk4pcRSQ6Fe+vhYBa3VDyHX/4jrGoKns=
- preshared key: (hidden)
- endpoint: <font color="#000000">23.88</font>.<font color="#000000">35.144</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.110</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">1</font> minute, <font color="#000000">52</font> seconds ago
- transfer: <font color="#000000">124</font> B received, <font color="#000000">1.60</font> KiB sent
- persistent keepalive: every <font color="#000000">25</font> seconds
-
-peer: s3e93XoY7dPUQgLiVO4d8x/SRCFgEew+/wP<font color="#000000">7</font>+zwgehI=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.120</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.120</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">120</font>/<font color="#000000">128</font>
-
-peer: 2htXdNcxzpI2FdPDJy4T4VGtm1wpMEQu1AkQHjNY6F8=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.131</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.131</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">131</font>/<font color="#000000">128</font>
-
-peer: 0Y/H20W8YIbF7DA1sMwMacLI8WS9yG+<font color="#000000">1</font>/QO7m2oyllg=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.122</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.122</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">122</font>/<font color="#000000">128</font>
-
-peer: Hhy9kMPOOjChXV2RA5WeCGs+J0FE3rcNPDw/TLSn7i8=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.121</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.121</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">121</font>/<font color="#000000">128</font>
-
-peer: SlGVsACE1wiaRoGvCR3f7AuHfRS+1jjhS+YwEJ2HvF0=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.132</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.132</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">132</font>/<font color="#000000">128</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas wg show</font>
+<font color="#ff0000">interface</font><font color="#F3E651">:</font><font color="#ff0000"> wg0</font>
+<font color="#ff0000"> public key</font><font color="#F3E651">:</font><font color="#ff0000"> Jm6YItMt94</font><font color="#F3E651">++</font><font color="#ff0000">dIeOyVi1I9AhNt2qQcryxCZezoX7X2Y</font><font color="#F3E651">=</font>
+<font color="#ff0000"> private key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> listening port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">56709</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> 8</font><font color="#ff0000">PvGZH1NohHpZPVJyjhctBX9xblsNvYBhpg68FsFcns</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">111</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> minute</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">46</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">124</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1.75</font><font color="#ff0000"> KiB sent</font>
+<font color="#ff0000"> persistent keepalive</font><font color="#F3E651">:</font><font color="#ff0000"> every </font><font color="#bb00ff">25</font><font color="#ff0000"> seconds</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> Xow</font><font color="#F3E651">+</font><font color="#ff0000">d3qVXgUMk4pcRSQ6Fe</font><font color="#F3E651">+</font><font color="#ff0000">vhYBa3VDyHX</font><font color="#F3E651">/</font><font color="#ff0000">4</font><font color="#ff0000">jrGoKns</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">23.88</font><font color="#F3E651">.</font><font color="#bb00ff">35.144</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">110</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> minute</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">52</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">124</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1.60</font><font color="#ff0000"> KiB sent</font>
+<font color="#ff0000"> persistent keepalive</font><font color="#F3E651">:</font><font color="#ff0000"> every </font><font color="#bb00ff">25</font><font color="#ff0000"> seconds</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> s3e93XoY7dPUQgLiVO4d8x/SRCFgEew</font><font color="#F3E651">+</font><font color="#ff0000">/wP</font><font color="#bb00ff">7</font><font color="#F3E651">+</font><font color="#ff0000">zwgehI</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.120</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">120</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> 2</font><font color="#ff0000">htXdNcxzpI2FdPDJy4T4VGtm1wpMEQu1AkQHjNY6F8</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">131</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> 0Y/H20W8YIbF7DA1sMwMacLI8WS9yG</font><font color="#F3E651">+</font><font color="#bb00ff">1</font><font color="#ff0000">/QO7</font><font color="#ff0000">m2oyllg</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.122</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">122</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> Hhy9kMPOOjChXV2RA5WeCGs</font><font color="#F3E651">+</font><font color="#ff0000">J0FE3rcNPDw/TLSn7</font><font color="#ff0000">i8</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.121</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">121</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> SlGVsACE1wiaRoGvCR3f7AuHfRS</font><font color="#F3E651">+</font><font color="#ff0000">1jjhS</font><font color="#F3E651">+</font><font color="#ff0000">YwEJ2HvF0</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">132</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
</pre>
<br />
<span>All the hosts are pingable as well, e.g.:</span><br />
@@ -1273,65 +1278,65 @@ peer: SlGVsACE1wiaRoGvCR3f7AuHfRS+1jjhS+YwEJ2HvF0=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % foreach peer ( f1 f2 r0 r1 r2 blowfish fishfinger )
-foreach? ping -c<font color="#000000">2</font> $peer.wg0
-foreach? echo
-foreach? end
-PING f1.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.131</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.131</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.334</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.131</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.260</font> ms
-
---- f1.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">0.260</font>/<font color="#000000">0.297</font>/<font color="#000000">0.334</font>/<font color="#000000">0.037</font> ms
-
-PING f2.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.132</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.132</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.323</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.132</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.303</font> ms
-
---- f2.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">0.303</font>/<font color="#000000">0.313</font>/<font color="#000000">0.323</font>/<font color="#000000">0.010</font> ms
-
-PING r0.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.120</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.120</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.716</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.120</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.406</font> ms
-
---- r0.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">0.406</font>/<font color="#000000">0.561</font>/<font color="#000000">0.716</font>/<font color="#000000">0.155</font> ms
-
-PING r1.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.121</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.121</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.639</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.121</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.629</font> ms
-
---- r1.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">0.629</font>/<font color="#000000">0.634</font>/<font color="#000000">0.639</font>/<font color="#000000">0.005</font> ms
-
-PING r2.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.122</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.122</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.569</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.122</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">64</font> time=<font color="#000000">0.479</font> ms
-
---- r2.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">0.479</font>/<font color="#000000">0.524</font>/<font color="#000000">0.569</font>/<font color="#000000">0.045</font> ms
-
-PING blowfish.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.110</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.110</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">255</font> time=<font color="#000000">35.745</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.110</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">255</font> time=<font color="#000000">35.481</font> ms
-
---- blowfish.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">35.481</font>/<font color="#000000">35.613</font>/<font color="#000000">35.745</font>/<font color="#000000">0.132</font> ms
-
-PING fishfinger.wg0 (<font color="#000000">192.168</font>.<font color="#000000">2.111</font>): <font color="#000000">56</font> data bytes
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.111</font>: icmp_seq=<font color="#000000">0</font> ttl=<font color="#000000">255</font> time=<font color="#000000">33.992</font> ms
-<font color="#000000">64</font> bytes from <font color="#000000">192.168</font>.<font color="#000000">2.111</font>: icmp_seq=<font color="#000000">1</font> ttl=<font color="#000000">255</font> time=<font color="#000000">33.751</font> ms
-
---- fishfinger.wg0 ping statistics ---
-<font color="#000000">2</font> packets transmitted, <font color="#000000">2</font> packets received, <font color="#000000">0.0</font>% packet loss
-round-trip min/avg/max/stddev = <font color="#000000">33.751</font>/<font color="#000000">33.872</font>/<font color="#000000">33.992</font>/<font color="#000000">0.120</font> ms
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> foreach peer </font><font color="#F3E651">(</font><font color="#ff0000"> f1 f2 r0 r1 r2 blowfish fishfinger </font><font color="#F3E651">)</font>
+<font color="#ff0000">foreach</font><font color="#F3E651">?</font><font color="#ff0000"> ping -c</font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#ff0000">$peer</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font>
+<font color="#ff0000">foreach</font><font color="#F3E651">?</font><font color="#ff0000"> echo</font>
+<font color="#ff0000">foreach</font><font color="#F3E651">?</font><font color="#ff0000"> end</font>
+<font color="#ff0000">PING f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.334</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.260</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- f1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0.260</font><font color="#F3E651">/</font><font color="#bb00ff">0.297</font><font color="#F3E651">/</font><font color="#bb00ff">0.334</font><font color="#F3E651">/</font><font color="#bb00ff">0.037</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">PING f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.323</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.303</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- f2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0.303</font><font color="#F3E651">/</font><font color="#bb00ff">0.313</font><font color="#F3E651">/</font><font color="#bb00ff">0.323</font><font color="#F3E651">/</font><font color="#bb00ff">0.010</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">PING r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.716</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.406</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0.406</font><font color="#F3E651">/</font><font color="#bb00ff">0.561</font><font color="#F3E651">/</font><font color="#bb00ff">0.716</font><font color="#F3E651">/</font><font color="#bb00ff">0.155</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">PING r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.639</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.629</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0.629</font><font color="#F3E651">/</font><font color="#bb00ff">0.634</font><font color="#F3E651">/</font><font color="#bb00ff">0.639</font><font color="#F3E651">/</font><font color="#bb00ff">0.005</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">PING r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.569</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">0.479</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0.479</font><font color="#F3E651">/</font><font color="#bb00ff">0.524</font><font color="#F3E651">/</font><font color="#bb00ff">0.569</font><font color="#F3E651">/</font><font color="#bb00ff">0.045</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">PING blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">255</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">35.745</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">255</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">35.481</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">35.481</font><font color="#F3E651">/</font><font color="#bb00ff">35.613</font><font color="#F3E651">/</font><font color="#bb00ff">35.745</font><font color="#F3E651">/</font><font color="#bb00ff">0.132</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">PING fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#F3E651">):</font><font color="#ff0000"> </font><font color="#bb00ff">56</font><font color="#ff0000"> data bytes</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">255</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">33.992</font><font color="#ff0000"> ms</font>
+<font color="#bb00ff">64</font><font color="#ff0000"> bytes from </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">icmp_seq</font><font color="#F3E651">=</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#ff0000">ttl</font><font color="#F3E651">=</font><font color="#bb00ff">255</font><font color="#ff0000"> </font><font color="#ff0000">time</font><font color="#F3E651">=</font><font color="#bb00ff">33.751</font><font color="#ff0000"> ms</font>
+
+<font color="#ff0000">--- fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0 ping statistics ---</font>
+<font color="#bb00ff">2</font><font color="#ff0000"> packets transmitted</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> packets received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">%</font><font color="#ff0000"> packet loss</font>
+<font color="#ff0000">round-trip min/avg/max/stddev </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">33.751</font><font color="#F3E651">/</font><font color="#bb00ff">33.872</font><font color="#F3E651">/</font><font color="#bb00ff">33.992</font><font color="#F3E651">/</font><font color="#bb00ff">0.120</font><font color="#ff0000"> ms</font>
</pre>
<br />
<span>Note that the loop above is a <span class='inlinecode'>tcsh</span> loop, the default shell used in FreeBSD. Of course, all other peers can ping their peers as well!</span><br />
@@ -1342,60 +1347,60 @@ round-trip min/avg/max/stddev = <font color="#000000">33.751</font>/<font color=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas wg show
-interface: wg0
- public key: Jm6YItMt94++dIeOyVi1I9AhNt2qQcryxCZezoX7X2Y=
- private key: (hidden)
- listening port: <font color="#000000">56709</font>
-
-peer: 0Y/H20W8YIbF7DA1sMwMacLI8WS9yG+<font color="#000000">1</font>/QO7m2oyllg=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.122</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.122</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">122</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">10</font> seconds ago
- transfer: <font color="#000000">440</font> B received, <font color="#000000">532</font> B sent
-
-peer: Hhy9kMPOOjChXV2RA5WeCGs+J0FE3rcNPDw/TLSn7i8=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.121</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.121</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">121</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">12</font> seconds ago
- transfer: <font color="#000000">440</font> B received, <font color="#000000">564</font> B sent
-
-peer: s3e93XoY7dPUQgLiVO4d8x/SRCFgEew+/wP<font color="#000000">7</font>+zwgehI=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.120</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.120</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">120</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">14</font> seconds ago
- transfer: <font color="#000000">440</font> B received, <font color="#000000">564</font> B sent
-
-peer: SlGVsACE1wiaRoGvCR3f7AuHfRS+1jjhS+YwEJ2HvF0=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.132</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.132</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">132</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">17</font> seconds ago
- transfer: <font color="#000000">472</font> B received, <font color="#000000">564</font> B sent
-
-peer: Xow+d3qVXgUMk4pcRSQ6Fe+vhYBa3VDyHX/4jrGoKns=
- preshared key: (hidden)
- endpoint: <font color="#000000">23.88</font>.<font color="#000000">35.144</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.110</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">110</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">55</font> seconds ago
- transfer: <font color="#000000">472</font> B received, <font color="#000000">596</font> B sent
- persistent keepalive: every <font color="#000000">25</font> seconds
-
-peer: 8PvGZH1NohHpZPVJyjhctBX9xblsNvYBhpg68FsFcns=
- preshared key: (hidden)
- endpoint: <font color="#000000">46.23</font>.<font color="#000000">94.99</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.111</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">111</font>/<font color="#000000">128</font>
- latest handshake: <font color="#000000">55</font> seconds ago
- transfer: <font color="#000000">472</font> B received, <font color="#000000">596</font> B sent
- persistent keepalive: every <font color="#000000">25</font> seconds
-
-peer: 2htXdNcxzpI2FdPDJy4T4VGtm1wpMEQu1AkQHjNY6F8=
- preshared key: (hidden)
- endpoint: <font color="#000000">192.168</font>.<font color="#000000">1.131</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">192.168</font>.<font color="#000000">2.131</font>/<font color="#000000">32</font>, fd42:beef:cafe:<font color="#000000">2</font>::<font color="#000000">131</font>/<font color="#000000">128</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas wg show</font>
+<font color="#ff0000">interface</font><font color="#F3E651">:</font><font color="#ff0000"> wg0</font>
+<font color="#ff0000"> public key</font><font color="#F3E651">:</font><font color="#ff0000"> Jm6YItMt94</font><font color="#F3E651">++</font><font color="#ff0000">dIeOyVi1I9AhNt2qQcryxCZezoX7X2Y</font><font color="#F3E651">=</font>
+<font color="#ff0000"> private key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> listening port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">56709</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> 0Y/H20W8YIbF7DA1sMwMacLI8WS9yG</font><font color="#F3E651">+</font><font color="#bb00ff">1</font><font color="#ff0000">/QO7</font><font color="#ff0000">m2oyllg</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.122</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">122</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">440</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">532</font><font color="#ff0000"> B sent</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> Hhy9kMPOOjChXV2RA5WeCGs</font><font color="#F3E651">+</font><font color="#ff0000">J0FE3rcNPDw/TLSn7</font><font color="#ff0000">i8</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.121</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">121</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">440</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">564</font><font color="#ff0000"> B sent</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> s3e93XoY7dPUQgLiVO4d8x/SRCFgEew</font><font color="#F3E651">+</font><font color="#ff0000">/wP</font><font color="#bb00ff">7</font><font color="#F3E651">+</font><font color="#ff0000">zwgehI</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.120</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">120</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">14</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">440</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">564</font><font color="#ff0000"> B sent</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> SlGVsACE1wiaRoGvCR3f7AuHfRS</font><font color="#F3E651">+</font><font color="#ff0000">1jjhS</font><font color="#F3E651">+</font><font color="#ff0000">YwEJ2HvF0</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.132</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">132</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">17</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">472</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">564</font><font color="#ff0000"> B sent</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> Xow</font><font color="#F3E651">+</font><font color="#ff0000">d3qVXgUMk4pcRSQ6Fe</font><font color="#F3E651">+</font><font color="#ff0000">vhYBa3VDyHX</font><font color="#F3E651">/</font><font color="#ff0000">4</font><font color="#ff0000">jrGoKns</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">23.88</font><font color="#F3E651">.</font><font color="#bb00ff">35.144</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">110</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">55</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">472</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">596</font><font color="#ff0000"> B sent</font>
+<font color="#ff0000"> persistent keepalive</font><font color="#F3E651">:</font><font color="#ff0000"> every </font><font color="#bb00ff">25</font><font color="#ff0000"> seconds</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> 8</font><font color="#ff0000">PvGZH1NohHpZPVJyjhctBX9xblsNvYBhpg68FsFcns</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.111</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">111</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">55</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">472</font><font color="#ff0000"> B received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">596</font><font color="#ff0000"> B sent</font>
+<font color="#ff0000"> persistent keepalive</font><font color="#F3E651">:</font><font color="#ff0000"> every </font><font color="#bb00ff">25</font><font color="#ff0000"> seconds</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> 2</font><font color="#ff0000">htXdNcxzpI2FdPDJy4T4VGtm1wpMEQu1AkQHjNY6F8</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#F3E651">/</font><font color="#bb00ff">32</font><font color="#F3E651">,</font><font color="#ff0000"> fd42</font><font color="#F3E651">:</font><font color="#ff0000">beef</font><font color="#F3E651">:</font><font color="#ff0000">cafe</font><font color="#F3E651">:</font><font color="#bb00ff">2</font><font color="#F3E651">::</font><font color="#bb00ff">131</font><font color="#F3E651">/</font><font color="#bb00ff">128</font>
</pre>
<br />
<h2 style='display: inline' id='managing-roaming-client-tunnels'>Managing Roaming Client Tunnels</h2><br />
@@ -1422,8 +1427,8 @@ peer: 2htXdNcxzpI2FdPDJy4T4VGtm1wpMEQu1AkQHjNY6F8=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>qrencode -t ansiutf8 &lt; dist/pixel7pro/etc/wireguard/wg<font color="#000000">0</font>-blowfish.conf
-qrencode -t ansiutf8 &lt; dist/pixel7pro/etc/wireguard/wg<font color="#000000">0</font>-fishfinger.conf
+<pre><font color="#ff0000">qrencode -t ansiutf8 </font><font color="#F3E651">&lt;</font><font color="#ff0000"> dist/pixel7pro/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#ff0000">-blowfish</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">qrencode -t ansiutf8 </font><font color="#F3E651">&lt;</font><font color="#ff0000"> dist/pixel7pro/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#ff0000">-fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
</pre>
<br />
<span>Import both QR codes using the WireGuard app to create two separate tunnel profiles. You can then manually enable/disable each tunnel to select which gateway to use. Only enable one tunnel at a time.</span><br />
@@ -1442,8 +1447,8 @@ qrencode -t ansiutf8 &lt; dist/pixel7pro/etc/wireguard/wg<font color="#000000">0
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>sudo cp dist/earth/etc/wireguard/wg<font color="#000000">0</font>-blowfish.conf /etc/wireguard/
-sudo cp dist/earth/etc/wireguard/wg<font color="#000000">0</font>-fishfinger.conf /etc/wireguard/
+<pre><font color="#ff0000">sudo cp dist/earth/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#ff0000">-blowfish</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font><font color="#F3E651">/</font>
+<font color="#ff0000">sudo cp dist/earth/etc/wireguard/wg</font><font color="#bb00ff">0</font><font color="#ff0000">-fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">conf /etc/wireguard</font><font color="#F3E651">/</font>
</pre>
<br />
<span>This approach provides explicit control over which gateway handles roaming client traffic, useful when one gateway needs maintenance or experiences connectivity issues.</span><br />
@@ -1456,27 +1461,27 @@ sudo cp dist/earth/etc/wireguard/wg<font color="#000000">0</font>-fishfinger.con
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Start with blowfish gateway</font></i>
-earth$ sudo systemctl start wg-quick@wg0-blowfish.service
-
-<i><font color="silver"># Or start with fishfinger gateway</font></i>
-earth$ sudo systemctl start wg-quick@wg0-fishfinger.service
-
-<i><font color="silver"># Check tunnel status (example with blowfish gateway)</font></i>
-earth$ sudo wg show
-interface: wg0
- public key: Mc1CpSS3rbLN9A2w9c75XugQyXUkGPHKI2iCGbh8DRo=
- private key: (hidden)
- listening port: <font color="#000000">56709</font>
- fwmark: <font color="#000000">0xca6c</font>
-
-peer: Xow+d3qVXgUMk4pcRSQ6Fe+vhYBa3VDyHX/4jrGoKns=
- preshared key: (hidden)
- endpoint: <font color="#000000">23.88</font>.<font color="#000000">35.144</font>:<font color="#000000">56709</font>
- allowed ips: <font color="#000000">0.0</font>.<font color="#000000">0.0</font>/<font color="#000000">0</font>, ::/<font color="#000000">0</font>
- latest handshake: <font color="#000000">5</font> seconds ago
- transfer: <font color="#000000">15.89</font> KiB received, <font color="#000000">32.15</font> KiB sent
- persistent keepalive: every <font color="#000000">25</font> seconds
+<pre><i><font color="#ababab"># Start with blowfish gateway</font></i>
+<font color="#ff0000">earth$ sudo systemctl start wg-quick@wg0-blowfish</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+
+<i><font color="#ababab"># Or start with fishfinger gateway</font></i>
+<font color="#ff0000">earth$ sudo systemctl start wg-quick@wg0-fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+
+<i><font color="#ababab"># Check tunnel status (example with blowfish gateway)</font></i>
+<font color="#ff0000">earth$ sudo wg show</font>
+<font color="#ff0000">interface</font><font color="#F3E651">:</font><font color="#ff0000"> wg0</font>
+<font color="#ff0000"> public key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">Mc1CpSS3rbLN9A2w9c75XugQyXUkGPHKI2iCGbh8DRo</font><font color="#F3E651">=</font>
+<font color="#ff0000"> private key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> listening port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> fwmark</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0xca6c</font>
+
+<font color="#ff0000">peer</font><font color="#F3E651">:</font><font color="#ff0000"> Xow</font><font color="#F3E651">+</font><font color="#ff0000">d3qVXgUMk4pcRSQ6Fe</font><font color="#F3E651">+</font><font color="#ff0000">vhYBa3VDyHX</font><font color="#F3E651">/</font><font color="#ff0000">4</font><font color="#ff0000">jrGoKns</font><font color="#F3E651">=</font>
+<font color="#ff0000"> preshared key</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">hidden</font><font color="#F3E651">)</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">23.88</font><font color="#F3E651">.</font><font color="#bb00ff">35.144</font><font color="#F3E651">:</font><font color="#bb00ff">56709</font>
+<font color="#ff0000"> allowed ips</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.0</font><font color="#F3E651">/</font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">::/</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> latest handshake</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> seconds ago</font>
+<font color="#ff0000"> transfer</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">15.89</font><font color="#ff0000"> KiB received</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">32.15</font><font color="#ff0000"> KiB sent</font>
+<font color="#ff0000"> persistent keepalive</font><font color="#F3E651">:</font><font color="#ff0000"> every </font><font color="#bb00ff">25</font><font color="#ff0000"> seconds</font>
</pre>
<br />
<span>Stopping the tunnel:</span><br />
@@ -1485,12 +1490,12 @@ peer: Xow+d3qVXgUMk4pcRSQ6Fe+vhYBa3VDyHX/4jrGoKns=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>earth$ sudo systemctl stop wg-quick@wg0-blowfish.service
-<i><font color="silver"># Or if using fishfinger:</font></i>
-earth$ sudo systemctl stop wg-quick@wg0-fishfinger.service
+<pre><font color="#ff0000">earth$ sudo systemctl stop wg-quick@wg0-blowfish</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<i><font color="#ababab"># Or if using fishfinger:</font></i>
+<font color="#ff0000">earth$ sudo systemctl stop wg-quick@wg0-fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
-earth$ sudo wg show
-<i><font color="silver"># No output - WireGuard interface is down</font></i>
+<font color="#ff0000">earth$ sudo wg show</font>
+<i><font color="#ababab"># No output - WireGuard interface is down</font></i>
</pre>
<br />
<span>Switching between gateways:</span><br />
@@ -1499,9 +1504,9 @@ earth$ sudo wg show
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Switch from blowfish to fishfinger</font></i>
-earth$ sudo systemctl stop wg-quick@wg0-blowfish.service
-earth$ sudo systemctl start wg-quick@wg0-fishfinger.service
+<pre><i><font color="#ababab"># Switch from blowfish to fishfinger</font></i>
+<font color="#ff0000">earth$ sudo systemctl stop wg-quick@wg0-blowfish</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
+<font color="#ff0000">earth$ sudo systemctl start wg-quick@wg0-fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
</pre>
<br />
<span>The services remain <span class='inlinecode'>disabled</span> to prevent auto-start on boot, allowing manual control of when the VPN is active and which gateway to use.</span><br />
@@ -1558,10 +1563,10 @@ earth$ sudo systemctl start wg-quick@wg0-fishfinger.service
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># From earth laptop:</font></i>
-earth$ ping -c<font color="#000000">2</font> blowfish.wg0
-earth$ ping -c<font color="#000000">2</font> fishfinger.wg0
-earth$ curl https://ifconfig.me <i><font color="silver"># Should show gateway's public IP</font></i>
+<pre><i><font color="#ababab"># From earth laptop:</font></i>
+<font color="#ff0000">earth$ ping -c</font><font color="#bb00ff">2</font><font color="#ff0000"> blowfish</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font>
+<font color="#ff0000">earth$ ping -c</font><font color="#bb00ff">2</font><font color="#ff0000"> fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font>
+<font color="#ff0000">earth$ curl https</font><font color="#F3E651">:</font><font color="#ff0000">//ifconfig</font><font color="#F3E651">.</font><font color="#ff0000">me </font><i><font color="#ababab"># Should show gateway's public IP</font></i>
</pre>
<br />
<span>Check which gateway is active: Check the transfer statistics with <span class='inlinecode'>sudo wg show</span> on earth to see which peer shows recent handshakes and increasing transfer bytes. On Android, the WireGuard app shows the active tunnel with data transfer statistics.</span><br />
@@ -1594,11 +1599,12 @@ earth$ curl https://ifconfig.me <i><font color="silver"># Should show gateway's
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.html b/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.html
index 48774fd1..e528f825 100644
--- a/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.html
+++ b/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'A Monk's Guide to Happiness' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes.gmi">Gemini</a>
</p>
@@ -114,11 +119,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-06-22-task-samurai.html b/gemfeed/2025-06-22-task-samurai.html
index 9e10795d..49e6a820 100644
--- a/gemfeed/2025-06-22-task-samurai.html
+++ b/gemfeed/2025-06-22-task-samurai.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Task Samurai: An agentic coding learning experiment</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-06-22-task-samurai.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-06-22-task-samurai.gmi">Gemini</a>
</p>
@@ -150,11 +155,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-07-01-posts-from-january-to-june-2025.html b/gemfeed/2025-07-01-posts-from-january-to-june-2025.html
index 09e3446f..16a1faa5 100644
--- a/gemfeed/2025-07-01-posts-from-january-to-june-2025.html
+++ b/gemfeed/2025-07-01-posts-from-january-to-june-2025.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Posts from January to June 2025</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-07-01-posts-from-january-to-june-2025.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-07-01-posts-from-january-to-june-2025.gmi">Gemini</a>
</p>
@@ -749,11 +754,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.html b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.html
index a66bad32..d3d00045 100644
--- a/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.html
+++ b/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 6: Storage</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-07-14-f3s-kubernetes-with-freebsd-part-6.gmi">Gemini</a>
</p>
@@ -119,16 +124,16 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zpool create -m /data zdata /dev/ada<font color="#000000">1</font>
-paul@f0:~ % zpool list
-NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
-zdata 928G <font color="#000000">12</font>.1M 928G - - <font color="#000000">0</font>% <font color="#000000">0</font>% <font color="#000000">1</font>.00x ONLINE -
-zroot 472G <font color="#000000">29</font>.0G 443G - - <font color="#000000">0</font>% <font color="#000000">6</font>% <font color="#000000">1</font>.00x ONLINE -
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zpool create -m /data zdata /dev/ada</font><font color="#bb00ff">1</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> zpool list</font>
+<font color="#ff0000">NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT</font>
+<font color="#ff0000">zdata 928G </font><font color="#bb00ff">12</font><font color="#F3E651">.</font><font color="#ff0000">1M 928G - - </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
+<font color="#ff0000">zroot 472G </font><font color="#bb00ff">29</font><font color="#F3E651">.</font><font color="#ff0000">0G 443G - - </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">6</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
-paul@f0:/ % doas camcontrol devlist
-&lt;512GB SSD D910R170&gt; at scbus0 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass0,ada0)
-&lt;Samsung SSD <font color="#000000">870</font> EVO 1TB SVT03B6Q&gt; at scbus1 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass1,ada1)
-paul@f0:/ %
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas camcontrol devlist</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">512GB SSD D910R170</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus0 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass0</font><font color="#F3E651">,</font><font color="#ff0000">ada0</font><font color="#F3E651">)</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">Samsung SSD </font><font color="#bb00ff">870</font><font color="#ff0000"> EVO 1TB SVT03B6Q</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus1 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass1</font><font color="#F3E651">,</font><font color="#ff0000">ada1</font><font color="#F3E651">)</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font>
</pre>
<br />
<span>To verify that we have a different SSD on the second node (the third node has the same drive as the first):</span><br />
@@ -137,9 +142,9 @@ paul@f0:/ %
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f1:/ % doas camcontrol devlist
-&lt;512GB SSD D910R170&gt; at scbus0 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass0,ada0)
-&lt;CT1000BX500SSD1 M6CR072&gt; at scbus1 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass1,ada1)
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas camcontrol devlist</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">512GB SSD D910R170</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus0 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass0</font><font color="#F3E651">,</font><font color="#ff0000">ada0</font><font color="#F3E651">)</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">CT1000BX500SSD1 M6CR072</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus1 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass1</font><font color="#F3E651">,</font><font color="#ff0000">ada1</font><font color="#F3E651">)</font>
</pre>
<br />
<h2 style='display: inline' id='zfs-encryption-keys'>ZFS encryption keys</h2><br />
@@ -177,21 +182,21 @@ paul@f0:/ %
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/ % doas newfs /dev/da<font color="#000000">0</font>
-/dev/da<font color="#000000">0</font>: <font color="#000000">15000</font>.0MB (<font color="#000000">30720000</font> sectors) block size <font color="#000000">32768</font>, fragment size <font color="#000000">4096</font>
- using <font color="#000000">24</font> cylinder groups of <font color="#000000">625</font>.22MB, <font color="#000000">20007</font> blks, <font color="#000000">80128</font> inodes.
- with soft updates
-super-block backups (<b><u><font color="#000000">for</font></u></b> fsck_ffs -b <i><font color="silver">#) at:</font></i>
- <font color="#000000">192</font>, <font color="#000000">1280640</font>, <font color="#000000">2561088</font>, <font color="#000000">3841536</font>, <font color="#000000">5121984</font>, <font color="#000000">6402432</font>, <font color="#000000">7682880</font>, <font color="#000000">8963328</font>, <font color="#000000">10243776</font>,
-<font color="#000000">11524224</font>, <font color="#000000">12804672</font>, <font color="#000000">14085120</font>, <font color="#000000">15365568</font>, <font color="#000000">16646016</font>, <font color="#000000">17926464</font>, <font color="#000000">19206912</font>,k <font color="#000000">20487360</font>,
-...
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas newfs /dev/da</font><font color="#bb00ff">0</font>
+<font color="#ff0000">/dev/da</font><font color="#bb00ff">0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">15000</font><font color="#F3E651">.</font><font color="#ff0000">0MB </font><font color="#F3E651">(</font><font color="#bb00ff">30720000</font><font color="#ff0000"> sectors</font><font color="#F3E651">)</font><font color="#ff0000"> block size </font><font color="#bb00ff">32768</font><font color="#F3E651">,</font><font color="#ff0000"> fragment size </font><font color="#bb00ff">4096</font>
+<font color="#ff0000"> using </font><font color="#bb00ff">24</font><font color="#ff0000"> cylinder groups of </font><font color="#bb00ff">625</font><font color="#F3E651">.</font><font color="#ff0000">22MB</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">20007</font><font color="#ff0000"> blks</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">80128</font><font color="#ff0000"> inodes</font><font color="#F3E651">.</font>
+<font color="#ff0000"> with soft updates</font>
+<font color="#ff0000">super-block backups </font><font color="#F3E651">(</font><b><font color="#ffffff">for</font></b><font color="#ff0000"> fsck_ffs -b </font><i><font color="#ababab">#) at:</font></i>
+<font color="#ff0000"> </font><font color="#bb00ff">192</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1280640</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2561088</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">3841536</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">5121984</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">6402432</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">7682880</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">8963328</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">10243776</font><font color="#F3E651">,</font>
+<font color="#bb00ff">11524224</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">12804672</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">14085120</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">15365568</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">16646016</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">17926464</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">19206912</font><font color="#F3E651">,</font><font color="#ff0000">k </font><font color="#bb00ff">20487360</font><font color="#F3E651">,</font>
+<font color="#F3E651">...</font>
-paul@f0:/ % echo <font color="#808080">'/dev/da0 /keys ufs rw 0 2'</font> | doas tee -a /etc/fstab
-/dev/da<font color="#000000">0</font> /keys ufs rw <font color="#000000">0</font> <font color="#000000">2</font>
-paul@f0:/ % doas mkdir /keys
-paul@f0:/ % doas mount /keys
-paul@f0:/ % df | grep keys
-/dev/da<font color="#000000">0</font> <font color="#000000">14877596</font> <font color="#000000">8</font> <font color="#000000">13687384</font> <font color="#000000">0</font>% /keys
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> echo </font><font color="#bb00ff">'/dev/da0 /keys ufs rw 0 2'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /etc/fstab</font>
+<font color="#ff0000">/dev/da</font><font color="#bb00ff">0</font><font color="#ff0000"> /keys ufs rw </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mkdir /keys</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mount /keys</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> df </font><font color="#F3E651">|</font><font color="#ff0000"> grep keys</font>
+<font color="#ff0000">/dev/da</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">14877596</font><font color="#ff0000"> </font><font color="#bb00ff">8</font><font color="#ff0000"> </font><font color="#bb00ff">13687384</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> /keys</font>
</pre>
<br />
<a href='./f3s-kubernetes-with-freebsd-part-6/usbkeys2.jpg'><img alt='USB keys stuck in' title='USB keys stuck in' src='./f3s-kubernetes-with-freebsd-part-6/usbkeys2.jpg' /></a><br />
@@ -230,18 +235,18 @@ total 20
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/keys % doas zfs create -o encryption=on -o keyformat=raw -o \
- keylocation=file:///keys/`hostname`:zdata.key zdata/enc
-paul@f0:/ % zfs list | grep zdata
-zdata 836K 899G 96K /data
-zdata/enc 200K 899G 200K /data/enc
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs create -o </font><font color="#ff0000">encryption</font><font color="#F3E651">=</font><font color="#ff0000">on -o </font><font color="#ff0000">keyformat</font><font color="#F3E651">=</font><font color="#ff0000">raw -o </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">keylocation</font><font color="#F3E651">=</font><font color="#ff0000">file</font><font color="#F3E651">:</font><font color="#ff0000">///keys</font><font color="#F3E651">/</font><font color="#ff0000">`hostname`</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key zdata/enc</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:/</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> zfs list </font><font color="#F3E651">|</font><font color="#ff0000"> grep zdata</font>
+<font color="#ff0000">zdata 836K 899G 96K /data</font>
+<font color="#ff0000">zdata/enc 200K 899G 200K /data/enc</font>
-paul@f0:/keys % zfs get all zdata/enc | grep -E -i <font color="#808080">'(encryption|key)'</font>
-zdata/enc encryption aes-<font color="#000000">256</font>-gcm -
-zdata/enc keylocation file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key <b><u><font color="#000000">local</font></u></b>
-zdata/enc keyformat raw -
-zdata/enc encryptionroot zdata/enc -
-zdata/enc keystatus available -
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> zfs get all zdata/enc </font><font color="#F3E651">|</font><font color="#ff0000"> grep -E -i </font><font color="#bb00ff">'(encryption|key)'</font>
+<font color="#ff0000">zdata/enc encryption aes-</font><font color="#bb00ff">256</font><font color="#ff0000">-gcm -</font>
+<font color="#ff0000">zdata/enc keylocation file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key </font><b><font color="#ffffff">local</font></b>
+<font color="#ff0000">zdata/enc keyformat raw -</font>
+<font color="#ff0000">zdata/enc encryptionroot zdata/enc -</font>
+<font color="#ff0000">zdata/enc keystatus available -</font>
</pre>
<br />
<span>All future data sets within <span class='inlinecode'>zdata/enc</span> will inherit the same encryption key.</span><br />
@@ -254,12 +259,12 @@ zdata/enc keystatus available -
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/keys % doas vm stop rocky
-Sending ACPI shutdown to rocky
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm stop rocky</font>
+<font color="#ff0000">Sending ACPI shutdown to rocky</font>
-paul@f0:/keys % doas vm list
-NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
-rocky default uefi <font color="#000000">4</font> 14G - Yes [<font color="#000000">1</font>] Stopped
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm list</font>
+<font color="#ff0000">NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE</font>
+<font color="#ff0000">rocky default uefi </font><font color="#bb00ff">4</font><font color="#ff0000"> 14G - Yes </font><font color="#F3E651">[</font><font color="#bb00ff">1</font><font color="#F3E651">]</font><font color="#ff0000"> Stopped</font>
</pre>
<br />
<span>After this, we rename the unencrypted data set to <span class='inlinecode'>_old</span>, create a new encrypted data set, and also snapshot it as <span class='inlinecode'>@hamburger</span>.</span><br />
@@ -268,14 +273,14 @@ rocky default uefi <font color="#000000">4</font> 14G - Ye
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/keys % doas zfs rename zroot/bhyve zroot/bhyve_old
-paul@f0:/keys % doas zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/mnt zroot/bhyve_old
-paul@f0:/keys % doas zfs snapshot zroot/bhyve_old/rocky@hamburger
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs rename zroot/bhyve zroot/bhyve_old</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/mnt zroot/bhyve_old</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs snapshot zroot/bhyve_old/rocky@hamburger</font>
-paul@f0:/keys % doas zfs create -o encryption=on -o keyformat=raw -o \
- keylocation=file:///keys/`hostname`:bhyve.key zroot/bhyve
-paul@f0:/keys % doas zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/zroot/bhyve zroot/bhyve
-paul@f0:/keys % doas zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/zroot/bhyve/rocky zroot/bhyve/rocky
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs create -o </font><font color="#ff0000">encryption</font><font color="#F3E651">=</font><font color="#ff0000">on -o </font><font color="#ff0000">keyformat</font><font color="#F3E651">=</font><font color="#ff0000">raw -o </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">keylocation</font><font color="#F3E651">=</font><font color="#ff0000">file</font><font color="#F3E651">:</font><font color="#ff0000">///keys</font><font color="#F3E651">/</font><font color="#ff0000">`hostname`</font><font color="#F3E651">:</font><font color="#ff0000">bhyve</font><font color="#F3E651">.</font><font color="#ff0000">key zroot/bhyve</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/zroot/bhyve zroot/bhyve</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/zroot/bhyve/rocky zroot/bhyve/rocky</font>
</pre>
<br />
<span>Once done, we import the snapshot into the encrypted dataset and also copy some other metadata files from <span class='inlinecode'>vm-bhyve</span> back over.</span><br />
@@ -295,17 +300,17 @@ paul@f0:/keys % doas cp -Rp /mnt/.iso /zroot/bhyve/
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:/keys % doas sysrc zfskeys_enable=YES
-zfskeys_enable: -&gt; YES
-paul@f0:/keys % doas vm init
-paul@f0:/keys % doas reboot
-.
-.
-.
-paul@f0:~ % doas vm list
-paul@f0:~ % doas vm list
-NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
-rocky default uefi <font color="#000000">4</font> 14G <font color="#000000">0.0</font>.<font color="#000000">0.0</font>:<font color="#000000">5900</font> Yes [<font color="#000000">1</font>] Running (<font color="#000000">2265</font>)
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">zfskeys_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">zfskeys_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm init</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:</font><font color="#ff0000">/keys </font><font color="#F3E651">%</font><font color="#ff0000"> doas reboot</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm list</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas vm list</font>
+<font color="#ff0000">NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE</font>
+<font color="#ff0000">rocky default uefi </font><font color="#bb00ff">4</font><font color="#ff0000"> 14G </font><font color="#bb00ff">0.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.0</font><font color="#F3E651">:</font><font color="#bb00ff">5900</font><font color="#ff0000"> Yes </font><font color="#F3E651">[</font><font color="#bb00ff">1</font><font color="#F3E651">]</font><font color="#ff0000"> Running </font><font color="#F3E651">(</font><font color="#bb00ff">2265</font><font color="#F3E651">)</font>
</pre>
<br />
<span>As you can see, the VM is running. This means the encrypted <span class='inlinecode'>zroot/bhyve</span> was mounted successfully after the reboot! Now we can destroy the old, unencrypted, and now unused bhyve dataset:</span><br />
@@ -314,7 +319,7 @@ rocky default uefi <font color="#000000">4</font> 14G <font c
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zfs destroy -R zroot/bhyve_old
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs destroy -R zroot/bhyve_old</font>
</pre>
<br />
<span>To verify once again that <span class='inlinecode'>zroot/bhyve</span> and <span class='inlinecode'>zroot/bhyve/rocky</span> are now both encrypted, we run:</span><br />
@@ -323,19 +328,19 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % zfs get all zroot/bhyve | grep -E <font color="#808080">'(encryption|key)'</font>
-zroot/bhyve encryption aes-<font color="#000000">256</font>-gcm -
-zroot/bhyve keylocation file:///keys/f<font color="#000000">0</font>.lan.buetow.org:bhyve.key <b><u><font color="#000000">local</font></u></b>
-zroot/bhyve keyformat raw -
-zroot/bhyve encryptionroot zroot/bhyve -
-zroot/bhyve keystatus available -
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> zfs get all zroot/bhyve </font><font color="#F3E651">|</font><font color="#ff0000"> grep -E </font><font color="#bb00ff">'(encryption|key)'</font>
+<font color="#ff0000">zroot/bhyve encryption aes-</font><font color="#bb00ff">256</font><font color="#ff0000">-gcm -</font>
+<font color="#ff0000">zroot/bhyve keylocation file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">bhyve</font><font color="#F3E651">.</font><font color="#ff0000">key </font><b><font color="#ffffff">local</font></b>
+<font color="#ff0000">zroot/bhyve keyformat raw -</font>
+<font color="#ff0000">zroot/bhyve encryptionroot zroot/bhyve -</font>
+<font color="#ff0000">zroot/bhyve keystatus available -</font>
-paul@f0:~ % zfs get all zroot/bhyve/rocky | grep -E <font color="#808080">'(encryption|key)'</font>
-zroot/bhyve/rocky encryption aes-<font color="#000000">256</font>-gcm -
-zroot/bhyve/rocky keylocation none default
-zroot/bhyve/rocky keyformat raw -
-zroot/bhyve/rocky encryptionroot zroot/bhyve -
-zroot/bhyve/rocky keystatus available -
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> zfs get all zroot/bhyve/rocky </font><font color="#F3E651">|</font><font color="#ff0000"> grep -E </font><font color="#bb00ff">'(encryption|key)'</font>
+<font color="#ff0000">zroot/bhyve/rocky encryption aes-</font><font color="#bb00ff">256</font><font color="#ff0000">-gcm -</font>
+<font color="#ff0000">zroot/bhyve/rocky keylocation none default</font>
+<font color="#ff0000">zroot/bhyve/rocky keyformat raw -</font>
+<font color="#ff0000">zroot/bhyve/rocky encryptionroot zroot/bhyve -</font>
+<font color="#ff0000">zroot/bhyve/rocky keystatus available -</font>
</pre>
<br />
<h2 style='display: inline' id='zfs-replication-with-zrepl'>ZFS Replication with <span class='inlinecode'>zrepl</span></h2><br />
@@ -370,7 +375,7 @@ zroot/bhyve/rocky keystatus available -
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install -y zrepl
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install -y zrepl</font>
</pre>
<br />
<span>Then, we verify the pools and datasets on both hosts:</span><br />
@@ -379,25 +384,25 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0</font></i>
-paul@f0:~ % doas zpool list
-NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
-zdata 928G <font color="#000000">1</font>.03M 928G - - <font color="#000000">0</font>% <font color="#000000">0</font>% <font color="#000000">1</font>.00x ONLINE -
-zroot 472G <font color="#000000">26</font>.7G 445G - - <font color="#000000">0</font>% <font color="#000000">5</font>% <font color="#000000">1</font>.00x ONLINE -
+<pre><i><font color="#ababab"># On f0</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zpool list</font>
+<font color="#ff0000">NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT</font>
+<font color="#ff0000">zdata 928G </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">03M 928G - - </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
+<font color="#ff0000">zroot 472G </font><font color="#bb00ff">26</font><font color="#F3E651">.</font><font color="#ff0000">7G 445G - - </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
-paul@f0:~ % doas zfs list -r zdata/enc
-NAME USED AVAIL REFER MOUNTPOINT
-zdata/enc 200K 899G 200K /data/enc
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -r zdata/enc</font>
+<font color="#ff0000">NAME USED AVAIL REFER MOUNTPOINT</font>
+<font color="#ff0000">zdata/enc 200K 899G 200K /data/enc</font>
-<i><font color="silver"># On f1</font></i>
-paul@f1:~ % doas zpool list
-NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
-zdata 928G 956K 928G - - <font color="#000000">0</font>% <font color="#000000">0</font>% <font color="#000000">1</font>.00x ONLINE -
-zroot 472G <font color="#000000">11</font>.7G 460G - - <font color="#000000">0</font>% <font color="#000000">2</font>% <font color="#000000">1</font>.00x ONLINE -
+<i><font color="#ababab"># On f1</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zpool list</font>
+<font color="#ff0000">NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT</font>
+<font color="#ff0000">zdata 928G 956K 928G - - </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
+<font color="#ff0000">zroot 472G </font><font color="#bb00ff">11</font><font color="#F3E651">.</font><font color="#ff0000">7G 460G - - </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
-paul@f1:~ % doas zfs list -r zdata/enc
-NAME USED AVAIL REFER MOUNTPOINT
-zdata/enc 200K 899G 200K /data/enc
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -r zdata/enc</font>
+<font color="#ff0000">NAME USED AVAIL REFER MOUNTPOINT</font>
+<font color="#ff0000">zdata/enc 200K 899G 200K /data/enc</font>
</pre>
<br />
<span>Since we have a WireGuard tunnel between <span class='inlinecode'>f0</span> and f1, we&#39;ll use TCP transport over the secure tunnel instead of SSH. First, check the WireGuard IP addresses:</span><br />
@@ -406,12 +411,12 @@ zdata/enc 200K 899G 200K /data/enc
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Check WireGuard interface IPs</font></i>
-paul@f0:~ % ifconfig wg0 | grep inet
- inet <font color="#000000">192.168</font>.<font color="#000000">2.130</font> netmask <font color="#000000">0xffffff00</font>
+<pre><i><font color="#ababab"># Check WireGuard interface IPs</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig wg0 </font><font color="#F3E651">|</font><font color="#ff0000"> grep inet</font>
+<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffff00</font>
-paul@f1:~ % ifconfig wg0 | grep inet
- inet <font color="#000000">192.168</font>.<font color="#000000">2.131</font> netmask <font color="#000000">0xffffff00</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig wg0 </font><font color="#F3E651">|</font><font color="#ff0000"> grep inet</font>
+<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffff00</font>
</pre>
<br />
<span>Let&#39;s create a dedicated dataset for NFS data that will be replicated:</span><br />
@@ -420,8 +425,8 @@ paul@f1:~ % ifconfig wg0 | grep inet
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Create the nfsdata dataset that will hold all data exposed via NFS</font></i>
-paul@f0:~ % doas zfs create zdata/enc/nfsdata
+<pre><i><font color="#ababab"># Create the nfsdata dataset that will hold all data exposed via NFS</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs create zdata/enc/nfsdata</font>
</pre>
<br />
<span>Afterwards, we create the <span class='inlinecode'>zrepl</span> configuration on <span class='inlinecode'>f0</span>:</span><br />
@@ -430,68 +435,68 @@ paul@f0:~ % doas zfs create zdata/enc/nfsdata
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas tee /usr/local/etc/zrepl/zrepl.yml &lt;&lt;<font color="#808080">'EOF'</font>
-global:
- logging:
- - <b><u><font color="#000000">type</font></u></b>: stdout
- level: info
- format: human
-
-<b><u><font color="#000000">jobs</font></u></b>:
- - name: f0_to_f1_nfsdata
- <b><u><font color="#000000">type</font></u></b>: push
- connect:
- <b><u><font color="#000000">type</font></u></b>: tcp
- address: <font color="#808080">"192.168.2.131:8888"</font>
- filesystems:
- <font color="#808080">"zdata/enc/nfsdata"</font>: <b><u><font color="#000000">true</font></u></b>
- send:
- encrypted: <b><u><font color="#000000">true</font></u></b>
- snapshotting:
- <b><u><font color="#000000">type</font></u></b>: periodic
- prefix: zrepl_
- interval: 1m
- pruning:
- keep_sender:
- - <b><u><font color="#000000">type</font></u></b>: last_n
- count: <font color="#000000">10</font>
- - <b><u><font color="#000000">type</font></u></b>: grid
- grid: 4x7d | 6x30d
- regex: <font color="#808080">"^zrepl_.*"</font>
- keep_receiver:
- - <b><u><font color="#000000">type</font></u></b>: last_n
- count: <font color="#000000">10</font>
- - <b><u><font color="#000000">type</font></u></b>: grid
- grid: 4x7d | 6x30d
- regex: <font color="#808080">"^zrepl_.*"</font>
-
- - name: f0_to_f1_freebsd
- <b><u><font color="#000000">type</font></u></b>: push
- connect:
- <b><u><font color="#000000">type</font></u></b>: tcp
- address: <font color="#808080">"192.168.2.131:8888"</font>
- filesystems:
- <font color="#808080">"zroot/bhyve/freebsd"</font>: <b><u><font color="#000000">true</font></u></b>
- send:
- encrypted: <b><u><font color="#000000">true</font></u></b>
- snapshotting:
- <b><u><font color="#000000">type</font></u></b>: periodic
- prefix: zrepl_
- interval: 10m
- pruning:
- keep_sender:
- - <b><u><font color="#000000">type</font></u></b>: last_n
- count: <font color="#000000">10</font>
- - <b><u><font color="#000000">type</font></u></b>: grid
- grid: 4x7d
- regex: <font color="#808080">"^zrepl_.*"</font>
- keep_receiver:
- - <b><u><font color="#000000">type</font></u></b>: last_n
- count: <font color="#000000">10</font>
- - <b><u><font color="#000000">type</font></u></b>: grid
- grid: 4x7d
- regex: <font color="#808080">"^zrepl_.*"</font>
-EOF
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/etc/zrepl/zrepl</font><font color="#F3E651">.</font><font color="#ff0000">yml </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">global</font><font color="#F3E651">:</font>
+<font color="#ff0000"> logging</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> stdout</font>
+<font color="#ff0000"> level</font><font color="#F3E651">:</font><font color="#ff0000"> info</font>
+<font color="#ff0000"> format</font><font color="#F3E651">:</font><font color="#ff0000"> human</font>
+
+<b><font color="#ffffff">jobs</font></b><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> f0_to_f1_nfsdata</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> push</font>
+<font color="#ff0000"> connect</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> tcp</font>
+<font color="#ff0000"> address</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"192.168.2.131:8888"</font>
+<font color="#ff0000"> filesystems</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"zdata/enc/nfsdata"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> send</font><font color="#F3E651">:</font>
+<font color="#ff0000"> encrypted</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> snapshotting</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> periodic</font>
+<font color="#ff0000"> prefix</font><font color="#F3E651">:</font><font color="#ff0000"> zrepl_</font>
+<font color="#ff0000"> interval</font><font color="#F3E651">:</font><font color="#ff0000"> 1m</font>
+<font color="#ff0000"> pruning</font><font color="#F3E651">:</font>
+<font color="#ff0000"> keep_sender</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> last_n</font>
+<font color="#ff0000"> count</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> grid</font>
+<font color="#ff0000"> grid</font><font color="#F3E651">:</font><font color="#ff0000"> 4x7d </font><font color="#F3E651">|</font><font color="#ff0000"> 6x30d</font>
+<font color="#ff0000"> regex</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"^zrepl_.*"</font>
+<font color="#ff0000"> keep_receiver</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> last_n</font>
+<font color="#ff0000"> count</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> grid</font>
+<font color="#ff0000"> grid</font><font color="#F3E651">:</font><font color="#ff0000"> 4x7d </font><font color="#F3E651">|</font><font color="#ff0000"> 6x30d</font>
+<font color="#ff0000"> regex</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"^zrepl_.*"</font>
+
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> f0_to_f1_freebsd</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> push</font>
+<font color="#ff0000"> connect</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> tcp</font>
+<font color="#ff0000"> address</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"192.168.2.131:8888"</font>
+<font color="#ff0000"> filesystems</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"zroot/bhyve/freebsd"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> send</font><font color="#F3E651">:</font>
+<font color="#ff0000"> encrypted</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000"> snapshotting</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> periodic</font>
+<font color="#ff0000"> prefix</font><font color="#F3E651">:</font><font color="#ff0000"> zrepl_</font>
+<font color="#ff0000"> interval</font><font color="#F3E651">:</font><font color="#ff0000"> 10m</font>
+<font color="#ff0000"> pruning</font><font color="#F3E651">:</font>
+<font color="#ff0000"> keep_sender</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> last_n</font>
+<font color="#ff0000"> count</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> grid</font>
+<font color="#ff0000"> grid</font><font color="#F3E651">:</font><font color="#ff0000"> 4x7d</font>
+<font color="#ff0000"> regex</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"^zrepl_.*"</font>
+<font color="#ff0000"> keep_receiver</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> last_n</font>
+<font color="#ff0000"> count</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> grid</font>
+<font color="#ff0000"> grid</font><font color="#F3E651">:</font><font color="#ff0000"> 4x7d</font>
+<font color="#ff0000"> regex</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"^zrepl_.*"</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span> We&#39;re using two separate replication jobs with different intervals:</span><br />
@@ -516,29 +521,29 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># First, create a dedicated sink dataset</font></i>
-paul@f1:~ % doas zfs create zdata/sink
+<pre><i><font color="#ababab"># First, create a dedicated sink dataset</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs create zdata/sink</font>
-paul@f1:~ % doas tee /usr/local/etc/zrepl/zrepl.yml &lt;&lt;<font color="#808080">'EOF'</font>
-global:
- logging:
- - <b><u><font color="#000000">type</font></u></b>: stdout
- level: info
- format: human
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/etc/zrepl/zrepl</font><font color="#F3E651">.</font><font color="#ff0000">yml </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">global</font><font color="#F3E651">:</font>
+<font color="#ff0000"> logging</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> stdout</font>
+<font color="#ff0000"> level</font><font color="#F3E651">:</font><font color="#ff0000"> info</font>
+<font color="#ff0000"> format</font><font color="#F3E651">:</font><font color="#ff0000"> human</font>
-<b><u><font color="#000000">jobs</font></u></b>:
- - name: sink
- <b><u><font color="#000000">type</font></u></b>: sink
- serve:
- <b><u><font color="#000000">type</font></u></b>: tcp
- listen: <font color="#808080">"192.168.2.131:8888"</font>
- clients:
- <font color="#808080">"192.168.2.130"</font>: <font color="#808080">"f0"</font>
- recv:
- placeholder:
- encryption: inherit
- root_fs: <font color="#808080">"zdata/sink"</font>
-EOF
+<b><font color="#ffffff">jobs</font></b><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> sink</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> sink</font>
+<font color="#ff0000"> serve</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> tcp</font>
+<font color="#ff0000"> listen</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"192.168.2.131:8888"</font>
+<font color="#ff0000"> clients</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"192.168.2.130"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"f0"</font>
+<font color="#ff0000"> recv</font><font color="#F3E651">:</font>
+<font color="#ff0000"> placeholder</font><font color="#F3E651">:</font>
+<font color="#ff0000"> encryption</font><font color="#F3E651">:</font><font color="#ff0000"> inherit</font>
+<font color="#ff0000"> root_fs</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"zdata/sink"</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<h3 style='display: inline' id='enabling-and-starting-zrepl-services'>Enabling and starting <span class='inlinecode'>zrepl</span> services</h3><br />
@@ -549,17 +554,17 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0</font></i>
-paul@f0:~ % doas sysrc zrepl_enable=YES
-zrepl_enable: -&gt; YES
-paul@f0:~ % doas service `zrepl` start
-Starting zrepl.
+<pre><i><font color="#ababab"># On f0</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">zrepl_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">zrepl_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service `zrepl` start</font>
+<font color="#ff0000">Starting zrepl</font><font color="#F3E651">.</font>
-<i><font color="silver"># On f1</font></i>
-paul@f1:~ % doas sysrc zrepl_enable=YES
-zrepl_enable: -&gt; YES
-paul@f1:~ % doas service `zrepl` start
-Starting zrepl.
+<i><font color="#ababab"># On f1</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">zrepl_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">zrepl_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service `zrepl` start</font>
+<font color="#ff0000">Starting zrepl</font><font color="#F3E651">.</font>
</pre>
<br />
<span>To check the replication status, we run:</span><br />
@@ -568,35 +573,35 @@ Starting zrepl.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0, check `zrepl` status (use raw mode for non-tty)</font></i>
-paul@f0:~ % doas pkg install jq
-paul@f0:~ % doas zrepl status --mode raw | grep -A<font color="#000000">2</font> <font color="#808080">"Replication"</font> | jq .
-<font color="#808080">"Replication"</font>:{<font color="#808080">"StartAt"</font>:<font color="#808080">"2025-07-01T22:31:48.712143123+03:00"</font>...
+<pre><i><font color="#ababab"># On f0, check `zrepl` status (use raw mode for non-tty)</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install jq</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw </font><font color="#F3E651">|</font><font color="#ff0000"> grep -A</font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">"Replication"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> jq </font><font color="#F3E651">.</font>
+<font color="#bb00ff">"Replication"</font><font color="#F3E651">:</font><font color="#ff0000">{</font><font color="#bb00ff">"StartAt"</font><font color="#F3E651">:</font><font color="#bb00ff">"2025-07-01T22:31:48.712143123+03:00"</font><font color="#F3E651">...</font>
-<i><font color="silver"># Check if services are running</font></i>
-paul@f0:~ % doas service zrepl status
-zrepl is running as pid <font color="#000000">2649</font>.
+<i><font color="#ababab"># Check if services are running</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service zrepl status</font>
+<font color="#ff0000">zrepl is running as pid </font><font color="#bb00ff">2649</font><font color="#F3E651">.</font>
-paul@f1:~ % doas service zrepl status
-zrepl is running as pid <font color="#000000">2574</font>.
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service zrepl status</font>
+<font color="#ff0000">zrepl is running as pid </font><font color="#bb00ff">2574</font><font color="#F3E651">.</font>
-<i><font color="silver"># Check for `zrepl` snapshots on source</font></i>
-paul@f0:~ % doas zfs list -t snapshot -r zdata/enc | grep zrepl
-zdata/enc@zrepl_20250701_193148_000 0B - 176K -
+<i><font color="#ababab"># Check for `zrepl` snapshots on source</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot -r zdata/enc </font><font color="#F3E651">|</font><font color="#ff0000"> grep zrepl</font>
+<font color="#ff0000">zdata/enc@zrepl_20250701_193148_000 0B - 176K -</font>
-<i><font color="silver"># On f1, verify the replicated datasets </font></i>
-paul@f1:~ % doas zfs list -r zdata | grep f0
-zdata/f<font color="#000000">0</font> 576K 899G 200K none
-zdata/f<font color="#000000">0</font>/zdata 376K 899G 200K none
-zdata/f<font color="#000000">0</font>/zdata/enc 176K 899G 176K none
+<i><font color="#ababab"># On f1, verify the replicated datasets </font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -r zdata </font><font color="#F3E651">|</font><font color="#ff0000"> grep f0</font>
+<font color="#ff0000">zdata/f</font><font color="#bb00ff">0</font><font color="#ff0000"> 576K 899G 200K none</font>
+<font color="#ff0000">zdata/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata 376K 899G 200K none</font>
+<font color="#ff0000">zdata/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc 176K 899G 176K none</font>
-<i><font color="silver"># Check replicated snapshots on f1</font></i>
-paul@f1:~ % doas zfs list -t snapshot -r zdata | grep zrepl
-zdata/f<font color="#000000">0</font>/zdata/enc@zrepl_20250701_193148_000 0B - 176K -
-zdata/f<font color="#000000">0</font>/zdata/enc@zrepl_20250701_194148_000 0B - 176K -
-.
-.
-.
+<i><font color="#ababab"># Check replicated snapshots on f1</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot -r zdata </font><font color="#F3E651">|</font><font color="#ff0000"> grep zrepl</font>
+<font color="#ff0000">zdata/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc@zrepl_20250701_193148_000 0B - 176K -</font>
+<font color="#ff0000">zdata/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc@zrepl_20250701_194148_000 0B - 176K -</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
</pre>
<br />
<h3 style='display: inline' id='monitoring-replication'>Monitoring replication</h3><br />
@@ -607,7 +612,7 @@ zdata/f<font color="#000000">0</font>/zdata/enc@zrepl_20250701_194148_000 0B
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zrepl status
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status</font>
</pre>
<br />
<a href='./f3s-kubernetes-with-freebsd-part-6/zrepl.png'><img alt='zrepl status' title='zrepl status' src='./f3s-kubernetes-with-freebsd-part-6/zrepl.png' /></a><br />
@@ -630,29 +635,29 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % uptime
-<font color="#000000">11</font>:17PM up <font color="#000000">1</font> min, <font color="#000000">0</font> users, load averages: <font color="#000000">0.16</font>, <font color="#000000">0.06</font>, <font color="#000000">0.02</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> uptime</font>
+<font color="#bb00ff">11</font><font color="#F3E651">:</font><font color="#ff0000">17PM up </font><font color="#bb00ff">1</font><font color="#ff0000"> min</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> users</font><font color="#F3E651">,</font><font color="#ff0000"> load averages</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">0.16</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.06</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.02</font>
-paul@f0:~ % doas service `zrepl` status
-zrepl is running as pid <font color="#000000">2366</font>.
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service `zrepl` status</font>
+<font color="#ff0000">zrepl is running as pid </font><font color="#bb00ff">2366</font><font color="#F3E651">.</font>
-paul@f1:~ % doas service `zrepl` status
-zrepl is running as pid <font color="#000000">2309</font>.
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service `zrepl` status</font>
+<font color="#ff0000">zrepl is running as pid </font><font color="#bb00ff">2309</font><font color="#F3E651">.</font>
-<i><font color="silver"># Check that new snapshots are being created and replicated</font></i>
-paul@f0:~ % doas zfs list -t snapshot | grep `zrepl` | tail -<font color="#000000">2</font>
-zdata/enc/nfsdata@zrepl_20250701_202530_000 0B - 200K -
-zroot/bhyve/freebsd@zrepl_20250701_202530_000 0B - <font color="#000000">2</font>.97G -
-.
-.
-.
+<i><font color="#ababab"># Check that new snapshots are being created and replicated</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot </font><font color="#F3E651">|</font><font color="#ff0000"> grep `zrepl` </font><font color="#F3E651">|</font><font color="#ff0000"> tail -</font><font color="#bb00ff">2</font>
+<font color="#ff0000">zdata/enc/nfsdata@zrepl_20250701_202530_000 0B - 200K -</font>
+<font color="#ff0000">zroot/bhyve/freebsd@zrepl_20250701_202530_000 0B - </font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">97G -</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
-paul@f1:~ % doas zfs list -t snapshot -r zdata/sink | grep <font color="#000000">202530</font>
-zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata@zrepl_20250701_202530_000 0B - 176K -
-zdata/sink/f<font color="#000000">0</font>/zroot/bhyve/freebsd@zrepl_20250701_202530_000 0B - <font color="#000000">2</font>.97G -
-.
-.
-.
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot -r zdata/sink </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">202530</font>
+<font color="#ff0000">zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata@zrepl_20250701_202530_000 0B - 176K -</font>
+<font color="#ff0000">zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zroot/bhyve/freebsd@zrepl_20250701_202530_000 0B - </font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">97G -</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
</pre>
<br />
<span>The timestamps confirm that replication resumed automatically after the reboot, ensuring continuous data protection. We can also write a test file to the NFS data directory on <span class='inlinecode'>f0</span> and verify whether it appears on <span class='inlinecode'>f1</span> after a minute.</span><br />
@@ -677,14 +682,14 @@ zdata/sink/f<font color="#000000">0</font>/zroot/bhyve/freebsd@zrepl_20250701_20
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0 - set mountpoint for the primary nfsdata</font></i>
-paul@f0:~ % doas zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/data/nfs zdata/enc/nfsdata
-paul@f0:~ % doas mkdir -p /data/nfs
+<pre><i><font color="#ababab"># On f0 - set mountpoint for the primary nfsdata</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/data/nfs zdata/enc/nfsdata</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mkdir -p /data/nfs</font>
-<i><font color="silver"># Verify it's mounted</font></i>
-paul@f0:~ % df -h /data/nfs
-Filesystem Size Used Avail Capacity Mounted on
-zdata/enc/nfsdata 899G 204K 899G <font color="#000000">0</font>% /data/nfs
+<i><font color="#ababab"># Verify it's mounted</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> df -h /data/nfs</font>
+<font color="#ff0000">Filesystem Size Used Avail Capacity Mounted on</font>
+<font color="#ff0000">zdata/enc/nfsdata 899G 204K 899G </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> /data/nfs</font>
</pre>
<br />
<span>On <span class='inlinecode'>f1</span>, we need to handle the encryption key and mount the standby copy:</span><br />
@@ -693,27 +698,27 @@ zdata/enc/nfsdata 899G 204K 899G <font color="#000000">0</font>%
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f1 - first check encryption status</font></i>
-paul@f1:~ % doas zfs get keystatus zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
-NAME PROPERTY VALUE SOURCE
-zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata keystatus unavailable -
+<pre><i><font color="#ababab"># On f1 - first check encryption status</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs get keystatus zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
+<font color="#ff0000">NAME PROPERTY VALUE SOURCE</font>
+<font color="#ff0000">zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata keystatus unavailable -</font>
-<i><font color="silver"># Load the encryption key (using f0's key stored on the USB)</font></i>
-paul@f1:~ % doas zfs load-key -L file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key \
- zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Load the encryption key (using f0's key stored on the USB)</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs load-key -L file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key </font><font color="#F3E651">\</font>
+<font color="#ff0000"> zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
-<i><font color="silver"># Set mountpoint and mount (same path as f0 for easier failover)</font></i>
-paul@f1:~ % doas mkdir -p /data/nfs
-paul@f1:~ % doas zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/data/nfs zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
-paul@f1:~ % doas zfs mount zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Set mountpoint and mount (same path as f0 for easier failover)</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mkdir -p /data/nfs</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/data/nfs zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs mount zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
-<i><font color="silver"># Make it read-only to prevent accidental writes that would break replication</font></i>
-paul@f1:~ % doas zfs <b><u><font color="#000000">set</font></u></b> <b><u><font color="#000000">readonly</font></u></b>=on zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Make it read-only to prevent accidental writes that would break replication</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#F3E651">=</font><font color="#ff0000">on zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
-<i><font color="silver"># Verify</font></i>
-paul@f1:~ % df -h /data/nfs
-Filesystem Size Used Avail Capacity Mounted on
-zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata 896G 204K 896G <font color="#000000">0</font>% /data/nfs
+<i><font color="#ababab"># Verify</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> df -h /data/nfs</font>
+<font color="#ff0000">Filesystem Size Used Avail Capacity Mounted on</font>
+<font color="#ff0000">zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata 896G 204K 896G </font><font color="#bb00ff">0</font><font color="#F3E651">%</font><font color="#ff0000"> /data/nfs</font>
</pre>
<br />
<span>Note: The dataset is mounted at the same path (<span class='inlinecode'>/data/nfs</span>) on both hosts to simplify failover procedures. The dataset on <span class='inlinecode'>f1</span> is set to <span class='inlinecode'>readonly=on</span> to prevent accidental modifications, which, as mentioned earlier, would break replication. If we did, replication from <span class='inlinecode'>f0</span> to <span class='inlinecode'>f1</span> would fail like this:</span><br />
@@ -726,11 +731,11 @@ zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata 896G 204K
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Option 1: Rollback to the last common snapshot (loses local changes)</font></i>
-paul@f1:~ % doas zfs rollback zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata@zrepl_20250701_204054_000
+<pre><i><font color="#ababab"># Option 1: Rollback to the last common snapshot (loses local changes)</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs rollback zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata@zrepl_20250701_204054_000</font>
-<i><font color="silver"># Option 2: Make it read-only to prevent accidents again</font></i>
-paul@f1:~ % doas zfs <b><u><font color="#000000">set</font></u></b> <b><u><font color="#000000">readonly</font></u></b>=on zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Option 2: Make it read-only to prevent accidents again</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#F3E651">=</font><font color="#ff0000">on zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
</pre>
<br />
<span>And replication should work again!</span><br />
@@ -743,8 +748,8 @@ paul@f1:~ % doas zfs <b><u><font color="#000000">set</font></u></b> <b><u><font
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zfs list -o name,mountpoint,mounted | grep nfsdata
-zdata/enc/nfsdata /data/nfs yes
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -o name</font><font color="#F3E651">,</font><font color="#ff0000">mountpoint</font><font color="#F3E651">,</font><font color="#ff0000">mounted </font><font color="#F3E651">|</font><font color="#ff0000"> grep nfsdata</font>
+<font color="#ff0000">zdata/enc/nfsdata /data/nfs yes</font>
</pre>
<br />
<span>If it shows <span class='inlinecode'>no</span>, the dataset isn&#39;t mounted! This means files are being written to the root filesystem, not ZFS. Next, we should check whether the encryption key is loaded:</span><br />
@@ -753,12 +758,12 @@ zdata/enc/nfsdata /data/nfs yes
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zfs get keystatus zdata/enc/nfsdata
-NAME PROPERTY VALUE SOURCE
-zdata/enc/nfsdata keystatus available -
-<i><font color="silver"># If "unavailable", load the key:</font></i>
-paul@f0:~ % doas zfs load-key -L file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key zdata/enc/nfsdata
-paul@f0:~ % doas zfs mount zdata/enc/nfsdata
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs get keystatus zdata/enc/nfsdata</font>
+<font color="#ff0000">NAME PROPERTY VALUE SOURCE</font>
+<font color="#ff0000">zdata/enc/nfsdata keystatus available -</font>
+<i><font color="#ababab"># If "unavailable", load the key:</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs load-key -L file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key zdata/enc/nfsdata</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs mount zdata/enc/nfsdata</font>
</pre>
<br />
<span>You can also verify that files are in the snapshot (not just the directory):</span><br />
@@ -767,7 +772,7 @@ paul@f0:~ % doas zfs mount zdata/enc/nfsdata
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % ls -la /data/nfs/.zfs/snapshot/zrepl_*/
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ls -la /data/nfs</font><font color="#F3E651">/.</font><font color="#ff0000">zfs/snapshot/zrepl_</font><font color="#F3E651">*/</font>
</pre>
<br />
<span>This issue commonly occurs after a reboot if the encryption keys aren&#39;t configured to load automatically.</span><br />
@@ -780,26 +785,26 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0 - configure all encrypted datasets</font></i>
-paul@f0:~ % doas sysrc zfskeys_enable=YES
-zfskeys_enable: YES -&gt; YES
-paul@f0:~ % doas sysrc zfskeys_datasets=<font color="#808080">"zdata/enc zdata/enc/nfsdata zroot/bhyve"</font>
-zfskeys_datasets: -&gt; zdata/enc zdata/enc/nfsdata zroot/bhyve
+<pre><i><font color="#ababab"># On f0 - configure all encrypted datasets</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">zfskeys_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">zfskeys_enable</font><font color="#F3E651">:</font><font color="#ff0000"> YES -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">zfskeys_datasets</font><font color="#F3E651">=</font><font color="#bb00ff">"zdata/enc zdata/enc/nfsdata zroot/bhyve"</font>
+<font color="#ff0000">zfskeys_datasets</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zdata/enc zdata/enc/nfsdata zroot/bhyve</font>
-<i><font color="silver"># Set correct key locations for all datasets</font></i>
-paul@f0:~ % doas zfs <b><u><font color="#000000">set</font></u></b> \
- keylocation=file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key zdata/enc/nfsdata
+<i><font color="#ababab"># Set correct key locations for all datasets</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">keylocation</font><font color="#F3E651">=</font><font color="#ff0000">file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key zdata/enc/nfsdata</font>
-<i><font color="silver"># On f1 - include the replicated dataset</font></i>
-paul@f1:~ % doas sysrc zfskeys_enable=YES
-zfskeys_enable: YES -&gt; YES
-paul@f1:~ % doas sysrc \
- zfskeys_datasets=<font color="#808080">"zdata/enc zroot/bhyve zdata/sink/f0/zdata/enc/nfsdata"</font>
-zfskeys_datasets: -&gt; zdata/enc zroot/bhyve zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># On f1 - include the replicated dataset</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">zfskeys_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">zfskeys_enable</font><font color="#F3E651">:</font><font color="#ff0000"> YES -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">zfskeys_datasets</font><font color="#F3E651">=</font><font color="#bb00ff">"zdata/enc zroot/bhyve zdata/sink/f0/zdata/enc/nfsdata"</font>
+<font color="#ff0000">zfskeys_datasets</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> zdata/enc zroot/bhyve zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
-<i><font color="silver"># Set key location for replicated dataset</font></i>
-paul@f1:~ % doas zfs <b><u><font color="#000000">set</font></u></b> \
- keylocation=file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Set key location for replicated dataset</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#ff0000">keylocation</font><font color="#F3E651">=</font><font color="#ff0000">file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
</pre>
<br />
<span>Important notes:</span><br />
@@ -822,13 +827,13 @@ paul@f1:~ % doas zfs <b><u><font color="#000000">set</font></u></b> \
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Check service status on both f0 and f1</font></i>
-paul@f0:~ % doas service zrepl status
-paul@f1:~ % doas service zrepl status
+<pre><i><font color="#ababab"># Check service status on both f0 and f1</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service zrepl status</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service zrepl status</font>
-<i><font color="silver"># If not running, start the service</font></i>
-paul@f0:~ % doas service zrepl start
-paul@f1:~ % doas service zrepl start
+<i><font color="#ababab"># If not running, start the service</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service zrepl start</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service zrepl start</font>
</pre>
<br />
<h3 style='display: inline' id='check-zrepl-status-for-errors'>Check zrepl Status for Errors</h3><br />
@@ -839,11 +844,11 @@ paul@f1:~ % doas service zrepl start
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Check detailed status (use --mode raw for non-tty environments)</font></i>
-paul@f0:~ % doas zrepl status --mode raw
+<pre><i><font color="#ababab"># Check detailed status (use --mode raw for non-tty environments)</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw</font>
-<i><font color="silver"># Look for error messages in the replication section</font></i>
-<i><font color="silver"># Common errors include "no common snapshot" or connection failures</font></i>
+<i><font color="#ababab"># Look for error messages in the replication section</font></i>
+<i><font color="#ababab"># Common errors include "no common snapshot" or connection failures</font></i>
</pre>
<br />
<h3 style='display: inline' id='fixing-no-common-snapshot-errors'>Fixing "No Common Snapshot" Errors</h3><br />
@@ -866,27 +871,27 @@ no common snapshot or suitable bookmark between sender and receiver
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># First, identify the destination dataset on f1</font></i>
-paul@f1:~ % doas zfs list | grep sink
+<pre><i><font color="#ababab"># First, identify the destination dataset on f1</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list </font><font color="#F3E651">|</font><font color="#ff0000"> grep sink</font>
-<i><font color="silver"># Check existing snapshots on the problematic dataset</font></i>
-paul@f1:~ % doas zfs list -t snapshot | grep nfsdata
+<i><font color="#ababab"># Check existing snapshots on the problematic dataset</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot </font><font color="#F3E651">|</font><font color="#ff0000"> grep nfsdata</font>
-<i><font color="silver"># If you see snapshots with different naming (e.g., @daily-*, @weekly-*)</font></i>
-<i><font color="silver"># these conflict with zrepl's @zrepl_* snapshots</font></i>
+<i><font color="#ababab"># If you see snapshots with different naming (e.g., @daily-*, @weekly-*)</font></i>
+<i><font color="#ababab"># these conflict with zrepl's @zrepl_* snapshots</font></i>
-<i><font color="silver"># Destroy the entire destination dataset to allow clean replication</font></i>
-paul@f1:~ % doas zfs destroy -r zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Destroy the entire destination dataset to allow clean replication</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs destroy -r zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
-<i><font color="silver"># For VM replication, do the same for the freebsd dataset</font></i>
-paul@f1:~ % doas zfs destroy -r zdata/sink/f<font color="#000000">0</font>/zroot/bhyve/freebsd
+<i><font color="#ababab"># For VM replication, do the same for the freebsd dataset</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs destroy -r zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zroot/bhyve/freebsd</font>
-<i><font color="silver"># Wake up zrepl to start fresh replication</font></i>
-paul@f0:~ % doas zrepl signal wakeup f0_to_f1_nfsdata
-paul@f0:~ % doas zrepl signal wakeup f0_to_f1_freebsd
+<i><font color="#ababab"># Wake up zrepl to start fresh replication</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl signal wakeup f0_to_f1_nfsdata</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl signal wakeup f0_to_f1_freebsd</font>
-<i><font color="silver"># Check replication status</font></i>
-paul@f0:~ % doas zrepl status --mode raw
+<i><font color="#ababab"># Check replication status</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw</font>
</pre>
<br />
<span>**Verification that replication is working:**</span><br />
@@ -895,14 +900,14 @@ paul@f0:~ % doas zrepl status --mode raw
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Look for "stepping" state and active zfs send processes</font></i>
-paul@f0:~ % doas zrepl status --mode raw | grep -A<font color="#000000">5</font> <font color="#808080">"State.*stepping"</font>
+<pre><i><font color="#ababab"># Look for "stepping" state and active zfs send processes</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw </font><font color="#F3E651">|</font><font color="#ff0000"> grep -A</font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#bb00ff">"State.*stepping"</font>
-<i><font color="silver"># Check for active ZFS commands</font></i>
-paul@f0:~ % doas zrepl status --mode raw | grep -A<font color="#000000">10</font> <font color="#808080">"ZFSCmds.*Active"</font>
+<i><font color="#ababab"># Check for active ZFS commands</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw </font><font color="#F3E651">|</font><font color="#ff0000"> grep -A</font><font color="#bb00ff">10</font><font color="#ff0000"> </font><font color="#bb00ff">"ZFSCmds.*Active"</font>
-<i><font color="silver"># Monitor progress - bytes replicated should be increasing</font></i>
-paul@f0:~ % doas zrepl status --mode raw | grep BytesReplicated
+<i><font color="#ababab"># Monitor progress - bytes replicated should be increasing</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw </font><font color="#F3E651">|</font><font color="#ff0000"> grep BytesReplicated</font>
</pre>
<br />
<h3 style='display: inline' id='network-connectivity-issues'>Network Connectivity Issues</h3><br />
@@ -913,14 +918,14 @@ paul@f0:~ % doas zrepl status --mode raw | grep BytesReplicated
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Test connectivity between nodes</font></i>
-paul@f0:~ % nc -zv <font color="#000000">192.168</font>.<font color="#000000">2.131</font> <font color="#000000">8888</font>
+<pre><i><font color="#ababab"># Test connectivity between nodes</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> nc -zv </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font><font color="#ff0000"> </font><font color="#bb00ff">8888</font>
-<i><font color="silver"># Check if zrepl is listening on f1</font></i>
-paul@f1:~ % doas netstat -an | grep <font color="#000000">8888</font>
+<i><font color="#ababab"># Check if zrepl is listening on f1</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas netstat -an </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">8888</font>
-<i><font color="silver"># Verify WireGuard tunnel is working</font></i>
-paul@f0:~ % ping <font color="#000000">192.168</font>.<font color="#000000">2.131</font>
+<i><font color="#ababab"># Verify WireGuard tunnel is working</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ping </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.131</font>
</pre>
<br />
<h3 style='display: inline' id='encryption-key-issues'>Encryption Key Issues</h3><br />
@@ -931,13 +936,13 @@ paul@f0:~ % ping <font color="#000000">192.168</font>.<font color="#000000">2.13
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Verify encryption keys are available on both nodes</font></i>
-paul@f0:~ % doas zfs get keystatus zdata/enc/nfsdata
-paul@f1:~ % doas zfs get keystatus zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<pre><i><font color="#ababab"># Verify encryption keys are available on both nodes</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs get keystatus zdata/enc/nfsdata</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs get keystatus zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
-<i><font color="silver"># Load keys if unavailable</font></i>
-paul@f1:~ % doas zfs load-key -L file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key \
- zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
+<i><font color="#ababab"># Load keys if unavailable</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs load-key -L file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key </font><font color="#F3E651">\</font>
+<font color="#ff0000"> zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
</pre>
<br />
<h3 style='display: inline' id='monitoring-ongoing-replication'>Monitoring Ongoing Replication</h3><br />
@@ -948,18 +953,18 @@ paul@f1:~ % doas zfs load-key -L file:///keys/f<font color="#000000">0</font>.la
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Monitor replication progress (run repeatedly to check status)</font></i>
-paul@f0:~ % doas zrepl status --mode raw | grep -A<font color="#000000">10</font> BytesReplicated
+<pre><i><font color="#ababab"># Monitor replication progress (run repeatedly to check status)</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zrepl status --mode raw </font><font color="#F3E651">|</font><font color="#ff0000"> grep -A</font><font color="#bb00ff">10</font><font color="#ff0000"> BytesReplicated</font>
-<i><font color="silver"># Or install watch from ports and use it</font></i>
-paul@f0:~ % doas pkg install watch
-paul@f0:~ % watch -n <font color="#000000">5</font> <font color="#808080">'doas zrepl status --mode raw | grep -A10 BytesReplicated'</font>
+<i><font color="#ababab"># Or install watch from ports and use it</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install watch</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> watch -n </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#bb00ff">'doas zrepl status --mode raw | grep -A10 BytesReplicated'</font>
-<i><font color="silver"># Check for new snapshots being created</font></i>
-paul@f0:~ % doas zfs list -t snapshot | grep zrepl | tail -<font color="#000000">5</font>
+<i><font color="#ababab"># Check for new snapshots being created</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot </font><font color="#F3E651">|</font><font color="#ff0000"> grep zrepl </font><font color="#F3E651">|</font><font color="#ff0000"> tail -</font><font color="#bb00ff">5</font>
-<i><font color="silver"># Verify snapshots appear on receiver</font></i>
-paul@f1:~ % doas zfs list -t snapshot -r zdata/sink | grep zrepl | tail -<font color="#000000">5</font>
+<i><font color="#ababab"># Verify snapshots appear on receiver</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs list -t snapshot -r zdata/sink </font><font color="#F3E651">|</font><font color="#ff0000"> grep zrepl </font><font color="#F3E651">|</font><font color="#ff0000"> tail -</font><font color="#bb00ff">5</font>
</pre>
<br />
<span>This troubleshooting process resolves the most common <span class='inlinecode'>zrepl</span> issues and ensures continuous data replication between your storage nodes.</span><br />
@@ -992,11 +997,11 @@ paul@f1:~ % doas zfs list -t snapshot -r zdata/sink | grep zrepl | tail -<font c
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0 - The virtual IP 192.168.1.138 will float between f0 and f1</font></i>
-ifconfig_re0_alias0=<font color="#808080">"inet vhid 1 pass testpass alias 192.168.1.138/32"</font>
+<pre><i><font color="#ababab"># On f0 - The virtual IP 192.168.1.138 will float between f0 and f1</font></i>
+<font color="#ff0000">ifconfig_re0_alias0</font><font color="#F3E651">=</font><font color="#bb00ff">"inet vhid 1 pass testpass alias 192.168.1.138/32"</font>
-<i><font color="silver"># On f1 - Higher advskew means lower priority, so f0 wins elections</font></i>
-ifconfig_re0_alias0=<font color="#808080">"inet vhid 1 advskew 100 pass testpass alias 192.168.1.138/32"</font>
+<i><font color="#ababab"># On f1 - Higher advskew means lower priority, so f0 wins elections</font></i>
+<font color="#ff0000">ifconfig_re0_alias0</font><font color="#F3E651">=</font><font color="#bb00ff">"inet vhid 1 advskew 100 pass testpass alias 192.168.1.138/32"</font>
</pre>
<br />
<span>Whereas:</span><br />
@@ -1026,16 +1031,16 @@ fd42:beef:cafe:2::138 f3s-storage-ha f3s-storage-ha.wg0 f3s-storage-ha.wg0.wan.b
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % cat &lt;&lt;END | doas tee -a /etc/devd.conf
-notify <font color="#000000">0</font> {
- match <font color="#808080">"system"</font> <font color="#808080">"CARP"</font>;
- match <font color="#808080">"subsystem"</font> <font color="#808080">"[0-9]+@[0-9a-z.]+"</font>;
- match <font color="#808080">"type"</font> <font color="#808080">"(MASTER|BACKUP)"</font>;
- action <font color="#808080">"/usr/local/bin/carpcontrol.sh $subsystem $type"</font>;
-};
-END
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /etc/devd</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">notify </font><font color="#bb00ff">0</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> match </font><font color="#bb00ff">"system"</font><font color="#ff0000"> </font><font color="#bb00ff">"CARP"</font><font color="#F3E651">;</font>
+<font color="#ff0000"> match </font><font color="#bb00ff">"subsystem"</font><font color="#ff0000"> </font><font color="#bb00ff">"[0-9]+@[0-9a-z.]+"</font><font color="#F3E651">;</font>
+<font color="#ff0000"> match </font><font color="#bb00ff">"type"</font><font color="#ff0000"> </font><font color="#bb00ff">"(MASTER|BACKUP)"</font><font color="#F3E651">;</font>
+<font color="#ff0000"> action </font><font color="#bb00ff">"/usr/local/bin/carpcontrol.sh $subsystem $type"</font><font color="#F3E651">;</font>
+<font color="#ff0000">}</font><font color="#F3E651">;</font>
+<font color="#ff0000">END</font>
-paul@f0:~ % doas service devd restart
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service devd restart</font>
</pre>
<br />
<span>Next, we create the CARP control script that will restart stunnel when the CARP state changes:</span><br />
@@ -1046,29 +1051,29 @@ paul@f0:~ % doas service devd restart
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas tee /usr/local/bin/carpcontrol.sh &lt;&lt;<font color="#808080">'EOF'</font>
-<i><font color="silver">#!/bin/sh</font></i>
-<i><font color="silver"># CARP state change control script</font></i>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/bin/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<i><font color="#ababab">#!/bin/sh</font></i>
+<i><font color="#ababab"># CARP state change control script</font></i>
-<b><u><font color="#000000">case</font></u></b> <font color="#808080">"$2"</font> <b><u><font color="#000000">in</font></u></b>
- MASTER)
- logger <font color="#808080">"CARP state changed to MASTER, starting services"</font>
- ;;
- BACKUP)
- logger <font color="#808080">"CARP state changed to BACKUP, stopping services"</font>
- ;;
- *)
- logger <font color="#808080">"CARP state changed to $2 (unhandled)"</font>
- ;;
-<b><u><font color="#000000">esac</font></u></b>
-EOF
+<b><font color="#ffffff">case</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$2"</font><font color="#ff0000"> </font><b><font color="#ffffff">in</font></b>
+<font color="#ff0000"> MASTER</font><font color="#F3E651">)</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP state changed to MASTER, starting services"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> BACKUP</font><font color="#F3E651">)</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP state changed to BACKUP, stopping services"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><font color="#F3E651">*)</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP state changed to $2 (unhandled)"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<b><font color="#ffffff">esac</font></b>
+<font color="#ff0000">EOF</font>
-paul@f0:~ % doas chmod +x /usr/local/bin/carpcontrol.sh
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /usr/local/bin/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
-<i><font color="silver"># Copy the same script to f1</font></i>
-paul@f0:~ % scp /usr/local/bin/carpcontrol.sh f1:/tmp/
-paul@f1:~ % doas mv /tmp/carpcontrol.sh /usr/local/bin/
-paul@f1:~ % doas chmod +x /usr/local/bin/carpcontrol.sh
+<i><font color="#ababab"># Copy the same script to f1</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> scp /usr/local/bin/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh f1</font><font color="#F3E651">:</font><font color="#ff0000">/tmp</font><font color="#F3E651">/</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mv /tmp/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh /usr/local/bin</font><font color="#F3E651">/</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /usr/local/bin/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
</pre>
<br />
<span>Note that <span class='inlinecode'>carpcontrol.sh</span> doesn&#39;t do anything useful yet. We will provide more details (including starting and stopping services upon failover) later in this blog post.</span><br />
@@ -1079,10 +1084,10 @@ paul@f1:~ % doas chmod +x /usr/local/bin/carpcontrol.sh
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % echo <font color="#808080">'carp_load="YES"'</font> | doas tee -a /boot/loader.conf
-carp_load=<font color="#808080">"YES"</font>
-paul@f1:~ % echo <font color="#808080">'carp_load="YES"'</font> | doas tee -a /boot/loader.conf
-carp_load=<font color="#808080">"YES"</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> echo </font><font color="#bb00ff">'carp_load="YES"'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /boot/loader</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
+<font color="#ff0000">carp_load</font><font color="#F3E651">=</font><font color="#bb00ff">"YES"</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> echo </font><font color="#bb00ff">'carp_load="YES"'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> doas tee -a /boot/loader</font><font color="#F3E651">.</font><font color="#ff0000">conf </font>
+<font color="#ff0000">carp_load</font><font color="#F3E651">=</font><font color="#bb00ff">"YES"</font>
</pre>
<br />
<span>Then reboot both hosts or run <span class='inlinecode'>doas kldload carp</span> to load the module immediately. </span><br />
@@ -1099,18 +1104,18 @@ carp_load=<font color="#808080">"YES"</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas sysrc nfs_server_enable=YES
-nfs_server_enable: YES -&gt; YES
-paul@f0:~ % doas sysrc nfsv4_server_enable=YES
-nfsv4_server_enable: YES -&gt; YES
-paul@f0:~ % doas sysrc nfsuserd_enable=YES
-nfsuserd_enable: YES -&gt; YES
-paul@f0:~ % doas sysrc nfsuserd_flags=<font color="#808080">"-domain lan.buetow.org"</font>
-nfsuserd_flags: <font color="#808080">""</font> -&gt; <font color="#808080">"-domain lan.buetow.org"</font>
-paul@f0:~ % doas sysrc mountd_enable=YES
-mountd_enable: NO -&gt; YES
-paul@f0:~ % doas sysrc rpcbind_enable=YES
-rpcbind_enable: NO -&gt; YES
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfs_server_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">nfs_server_enable</font><font color="#F3E651">:</font><font color="#ff0000"> YES -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfsv4_server_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">nfsv4_server_enable</font><font color="#F3E651">:</font><font color="#ff0000"> YES -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfsuserd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">nfsuserd_enable</font><font color="#F3E651">:</font><font color="#ff0000"> YES -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfsuserd_flags</font><font color="#F3E651">=</font><font color="#bb00ff">"-domain lan.buetow.org"</font>
+<font color="#ff0000">nfsuserd_flags</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">""</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">"-domain lan.buetow.org"</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">mountd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">mountd_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">rpcbind_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">rpcbind_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
</pre>
<br />
<span class='quote'>Update: 08.08.2025: I&#39;ve added the domain to <span class='inlinecode'>nfsuserd_flags</span></span><br />
@@ -1121,14 +1126,14 @@ rpcbind_enable: NO -&gt; YES
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># First, ensure the dataset is mounted</font></i>
-paul@f0:~ % doas zfs get mounted zdata/enc/nfsdata
-NAME PROPERTY VALUE SOURCE
-zdata/enc/nfsdata mounted yes -
+<pre><i><font color="#ababab"># First, ensure the dataset is mounted</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zfs get mounted zdata/enc/nfsdata</font>
+<font color="#ff0000">NAME PROPERTY VALUE SOURCE</font>
+<font color="#ff0000">zdata/enc/nfsdata mounted yes -</font>
-<i><font color="silver"># Create the k3svolumes directory</font></i>
-paul@f0:~ % doas mkdir -p /data/nfs/k3svolumes
-paul@f0:~ % doas chmod <font color="#000000">755</font> /data/nfs/k3svolumes
+<i><font color="#ababab"># Create the k3svolumes directory</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mkdir -p /data/nfs/k3svolumes</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas chmod </font><font color="#bb00ff">755</font><font color="#ff0000"> /data/nfs/k3svolumes</font>
</pre>
<br />
<span>We also create the <span class='inlinecode'>/etc/exports</span> file. Since we&#39;re using stunnel for encryption, ALL clients must connect through stunnel, which appears as localhost (<span class='inlinecode'>127.0.0.1</span>) to the NFS server:</span><br />
@@ -1137,10 +1142,10 @@ paul@f0:~ % doas chmod <font color="#000000">755</font> /data/nfs/k3svolumes
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas tee /etc/exports &lt;&lt;<font color="#808080">'EOF'</font>
-V4: /data/nfs -sec=sys
-/data/nfs -alldirs -maproot=root -network <font color="#000000">127.0</font>.<font color="#000000">0.1</font> -mask <font color="#000000">255.255</font>.<font color="#000000">255.255</font>
-EOF
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /etc/exports </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">V4</font><font color="#F3E651">:</font><font color="#ff0000"> /data/nfs -sec</font><font color="#F3E651">=</font><font color="#ff0000">sys</font>
+<font color="#ff0000">/data/nfs -alldirs -maproot</font><font color="#F3E651">=</font><font color="#ff0000">root -network </font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#ff0000"> -mask </font><font color="#bb00ff">255.255</font><font color="#F3E651">.</font><font color="#bb00ff">255.255</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>The exports configuration:</span><br />
@@ -1156,14 +1161,14 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas service rpcbind start
-Starting rpcbind.
-paul@f0:~ % doas service mountd start
-Starting mountd.
-paul@f0:~ % doas service nfsd start
-Starting nfsd.
-paul@f0:~ % doas service nfsuserd start
-Starting nfsuserd.
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service rpcbind start</font>
+<font color="#ff0000">Starting rpcbind</font><font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service mountd start</font>
+<font color="#ff0000">Starting mountd</font><font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service nfsd start</font>
+<font color="#ff0000">Starting nfsd</font><font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service nfsuserd start</font>
+<font color="#ff0000">Starting nfsuserd</font><font color="#F3E651">.</font>
</pre>
<br />
<h3 style='display: inline' id='configuring-stunnel-for-nfs-encryption-with-carp-failover'>Configuring Stunnel for NFS Encryption with CARP Failover</h3><br />
@@ -1202,32 +1207,32 @@ Starting nfsuserd.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0 - Create CA</font></i>
-paul@f0:~ % doas mkdir -p /usr/local/etc/stunnel/ca
-paul@f0:~ % cd /usr/local/etc/stunnel/ca
-paul@f0:~ % doas openssl genrsa -out ca-key.pem <font color="#000000">4096</font>
-paul@f0:~ % doas openssl req -new -x<font color="#000000">509</font> -days <font color="#000000">3650</font> -key ca-key.pem -out ca-cert.pem \
- -subj <font color="#808080">'/C=US/ST=State/L=City/O=F3S Storage/CN=F3S Stunnel CA'</font>
+<pre><i><font color="#ababab"># On f0 - Create CA</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas mkdir -p /usr/local/etc/stunnel/ca</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cd /usr/local/etc/stunnel/ca</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas openssl genrsa -out ca-key</font><font color="#F3E651">.</font><font color="#ff0000">pem </font><font color="#bb00ff">4096</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas openssl req -new -x</font><font color="#bb00ff">509</font><font color="#ff0000"> -days </font><font color="#bb00ff">3650</font><font color="#ff0000"> -key ca-key</font><font color="#F3E651">.</font><font color="#ff0000">pem -out ca-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -subj </font><font color="#bb00ff">'/C=US/ST=State/L=City/O=F3S Storage/CN=F3S Stunnel CA'</font>
-<i><font color="silver"># Create server certificate</font></i>
-paul@f0:~ % cd /usr/local/etc/stunnel
-paul@f0:~ % doas openssl genrsa -out server-key.pem <font color="#000000">4096</font>
-paul@f0:~ % doas openssl req -new -key server-key.pem -out server.csr \
- -subj <font color="#808080">'/C=US/ST=State/L=City/O=F3S Storage/CN=f3s-storage-ha.lan'</font>
-paul@f0:~ % doas openssl x509 -req -days <font color="#000000">3650</font> -in server.csr -CA ca/ca-cert.pem \
- -CAkey ca/ca-key.pem -CAcreateserial -out server-cert.pem
+<i><font color="#ababab"># Create server certificate</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cd /usr/local/etc/stunnel</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas openssl genrsa -out server-key</font><font color="#F3E651">.</font><font color="#ff0000">pem </font><font color="#bb00ff">4096</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas openssl req -new -key server-key</font><font color="#F3E651">.</font><font color="#ff0000">pem -out server</font><font color="#F3E651">.</font><font color="#ff0000">csr </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -subj </font><font color="#bb00ff">'/C=US/ST=State/L=City/O=F3S Storage/CN=f3s-storage-ha.lan'</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas openssl x509 -req -days </font><font color="#bb00ff">3650</font><font color="#ff0000"> -in server</font><font color="#F3E651">.</font><font color="#ff0000">csr -CA ca/ca-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -CAkey ca/ca-key</font><font color="#F3E651">.</font><font color="#ff0000">pem -CAcreateserial -out server-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
-<i><font color="silver"># Create client certificates for authorised clients</font></i>
-paul@f0:~ % cd /usr/local/etc/stunnel/ca
-paul@f0:~ % doas sh -c <font color="#808080">'for client in r0 r1 r2 earth; do </font>
-<font color="#808080"> openssl genrsa -out ${client}-key.pem 4096</font>
-<font color="#808080"> openssl req -new -key ${client}-key.pem -out ${client}.csr \</font>
-<font color="#808080"> -subj "/C=US/ST=State/L=City/O=F3S Storage/CN=${client}.lan.buetow.org"</font>
-<font color="#808080"> openssl x509 -req -days 3650 -in ${client}.csr -CA ca-cert.pem \</font>
-<font color="#808080"> -CAkey ca-key.pem -CAcreateserial -out ${client}-cert.pem</font>
-<font color="#808080"> # Combine cert and key into a single file for stunnel client</font>
-<font color="#808080"> cat ${client}-cert.pem ${client}-key.pem &gt; ${client}-stunnel.pem</font>
-<font color="#808080">done'</font>
+<i><font color="#ababab"># Create client certificates for authorised clients</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cd /usr/local/etc/stunnel/ca</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sh -c </font><font color="#bb00ff">'for client in r0 r1 r2 earth; do </font>
+<font color="#bb00ff"> openssl genrsa -out ${client}-key.pem 4096</font>
+<font color="#bb00ff"> openssl req -new -key ${client}-key.pem -out ${client}.csr \</font>
+<font color="#bb00ff"> -subj "/C=US/ST=State/L=City/O=F3S Storage/CN=${client}.lan.buetow.org"</font>
+<font color="#bb00ff"> openssl x509 -req -days 3650 -in ${client}.csr -CA ca-cert.pem \</font>
+<font color="#bb00ff"> -CAkey ca-key.pem -CAcreateserial -out ${client}-cert.pem</font>
+<font color="#bb00ff"> # Combine cert and key into a single file for stunnel client</font>
+<font color="#bb00ff"> cat ${client}-cert.pem ${client}-key.pem &gt; ${client}-stunnel.pem</font>
+<font color="#bb00ff">done'</font>
</pre>
<br />
<h3 style='display: inline' id='install-and-configure-stunnel-on-f0'>Install and Configure Stunnel on <span class='inlinecode'>f0</span></h3><br />
@@ -1236,35 +1241,35 @@ paul@f0:~ % doas sh -c <font color="#808080">'for client in r0 r1 r2 earth; do <
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Install stunnel</font></i>
-paul@f0:~ % doas pkg install -y stunnel
+<pre><i><font color="#ababab"># Install stunnel</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install -y stunnel</font>
-<i><font color="silver"># Configure stunnel server with client certificate authentication</font></i>
-paul@f0:~ % doas tee /usr/local/etc/stunnel/stunnel.conf &lt;&lt;<font color="#808080">'EOF'</font>
-cert = /usr/local/etc/stunnel/server-cert.pem
-key = /usr/local/etc/stunnel/server-key.pem
+<i><font color="#ababab"># Configure stunnel server with client certificate authentication</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/etc/stunnel/stunnel</font><font color="#F3E651">.</font><font color="#ff0000">conf </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">cert </font><font color="#F3E651">=</font><font color="#ff0000"> /usr/local/etc/stunnel/server-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
+<font color="#ff0000">key </font><font color="#F3E651">=</font><font color="#ff0000"> /usr/local/etc/stunnel/server-key</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
-setuid = stunnel
-setgid = stunnel
+<font color="#ff0000">setuid </font><font color="#F3E651">=</font><font color="#ff0000"> stunnel</font>
+<font color="#ff0000">setgid </font><font color="#F3E651">=</font><font color="#ff0000"> stunnel</font>
-[nfs-tls]
-accept = <font color="#000000">192.168</font>.<font color="#000000">1.138</font>:<font color="#000000">2323</font>
-connect = <font color="#000000">127.0</font>.<font color="#000000">0.1</font>:<font color="#000000">2049</font>
-CAfile = /usr/local/etc/stunnel/ca/ca-cert.pem
-verify = <font color="#000000">2</font>
-requireCert = yes
-EOF
+<font color="#F3E651">[</font><font color="#ff0000">nfs-tls</font><font color="#F3E651">]</font>
+<font color="#ff0000">accept </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#F3E651">:</font><font color="#bb00ff">2323</font>
+<font color="#ff0000">connect </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">:</font><font color="#bb00ff">2049</font>
+<font color="#ff0000">CAfile </font><font color="#F3E651">=</font><font color="#ff0000"> /usr/local/etc/stunnel/ca/ca-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
+<font color="#ff0000">verify </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">requireCert </font><font color="#F3E651">=</font><font color="#ff0000"> yes</font>
+<font color="#ff0000">EOF</font>
-<i><font color="silver"># Enable and start stunnel</font></i>
-paul@f0:~ % doas sysrc stunnel_enable=YES
-stunnel_enable: -&gt; YES
-paul@f0:~ % doas service stunnel start
-Starting stunnel.
+<i><font color="#ababab"># Enable and start stunnel</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">stunnel_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">stunnel_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service stunnel start</font>
+<font color="#ff0000">Starting stunnel</font><font color="#F3E651">.</font>
-<i><font color="silver"># Restart stunnel to apply the CARP VIP binding</font></i>
-paul@f0:~ % doas service stunnel restart
-Stopping stunnel.
-Starting stunnel.
+<i><font color="#ababab"># Restart stunnel to apply the CARP VIP binding</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service stunnel restart</font>
+<font color="#ff0000">Stopping stunnel</font><font color="#F3E651">.</font>
+<font color="#ff0000">Starting stunnel</font><font color="#F3E651">.</font>
</pre>
<br />
<span>The configuration includes:</span><br />
@@ -1282,30 +1287,30 @@ Starting stunnel.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f1:~ % doas sysrc nfs_server_enable=YES
-nfs_server_enable: NO -&gt; YES
-paul@f1:~ % doas sysrc nfsv4_server_enable=YES
-nfsv4_server_enable: NO -&gt; YES
-paul@f1:~ % doas sysrc nfsuserd_enable=YES
-nfsuserd_enable: NO -&gt; YES
-paul@f1:~ % doas sysrc mountd_enable=YES
-mountd_enable: NO -&gt; YES
-paul@f1:~ % doas sysrc rpcbind_enable=YES
-rpcbind_enable: NO -&gt; YES
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfs_server_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">nfs_server_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfsv4_server_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">nfsv4_server_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">nfsuserd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">nfsuserd_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">mountd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">mountd_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">rpcbind_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">rpcbind_enable</font><font color="#F3E651">:</font><font color="#ff0000"> NO -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
-paul@f1:~ % doas tee /etc/exports &lt;&lt;<font color="#808080">'EOF'</font>
-V4: /data/nfs -sec=sys
-/data/nfs -alldirs -maproot=root -network <font color="#000000">127.0</font>.<font color="#000000">0.1</font> -mask <font color="#000000">255.255</font>.<font color="#000000">255.255</font>
-EOF
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /etc/exports </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">V4</font><font color="#F3E651">:</font><font color="#ff0000"> /data/nfs -sec</font><font color="#F3E651">=</font><font color="#ff0000">sys</font>
+<font color="#ff0000">/data/nfs -alldirs -maproot</font><font color="#F3E651">=</font><font color="#ff0000">root -network </font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#ff0000"> -mask </font><font color="#bb00ff">255.255</font><font color="#F3E651">.</font><font color="#bb00ff">255.255</font>
+<font color="#ff0000">EOF</font>
-paul@f1:~ % doas service rpcbind start
-Starting rpcbind.
-paul@f1:~ % doas service mountd start
-Starting mountd.
-paul@f1:~ % doas service nfsd start
-Starting nfsd.
-paul@f1:~ % doas service nfsuserd start
-Starting nfsuserd.
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service rpcbind start</font>
+<font color="#ff0000">Starting rpcbind</font><font color="#F3E651">.</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service mountd start</font>
+<font color="#ff0000">Starting mountd</font><font color="#F3E651">.</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service nfsd start</font>
+<font color="#ff0000">Starting nfsd</font><font color="#F3E651">.</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service nfsuserd start</font>
+<font color="#ff0000">Starting nfsuserd</font><font color="#F3E651">.</font>
</pre>
<br />
<span>And to configure stunnel on <span class='inlinecode'>f1</span>, we run:</span><br />
@@ -1314,42 +1319,42 @@ Starting nfsuserd.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Install stunnel</font></i>
-paul@f1:~ % doas pkg install -y stunnel
+<pre><i><font color="#ababab"># Install stunnel</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install -y stunnel</font>
-<i><font color="silver"># Copy certificates from f0</font></i>
-paul@f0:~ % doas tar -cf /tmp/stunnel-certs.tar \
- -C /usr/local/etc/stunnel server-cert.pem server-key.pem ca
-paul@f0:~ % scp /tmp/stunnel-certs.tar f1:/tmp/
+<i><font color="#ababab"># Copy certificates from f0</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tar -cf /tmp/stunnel-certs</font><font color="#F3E651">.</font><font color="#ff0000">tar </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -C /usr/local/etc/stunnel server-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem server-key</font><font color="#F3E651">.</font><font color="#ff0000">pem ca</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> scp /tmp/stunnel-certs</font><font color="#F3E651">.</font><font color="#ff0000">tar f1</font><font color="#F3E651">:</font><font color="#ff0000">/tmp</font><font color="#F3E651">/</font>
-paul@f1:~ % cd /usr/local/etc/stunnel &amp;&amp; doas tar -xf /tmp/stunnel-certs.tar
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> cd /usr/local/etc/stunnel </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> doas tar -xf /tmp/stunnel-certs</font><font color="#F3E651">.</font><font color="#ff0000">tar</font>
-<i><font color="silver"># Configure stunnel server on f1 with client certificate authentication</font></i>
-paul@f1:~ % doas tee /usr/local/etc/stunnel/stunnel.conf &lt;&lt;<font color="#808080">'EOF'</font>
-cert = /usr/local/etc/stunnel/server-cert.pem
-key = /usr/local/etc/stunnel/server-key.pem
+<i><font color="#ababab"># Configure stunnel server on f1 with client certificate authentication</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/etc/stunnel/stunnel</font><font color="#F3E651">.</font><font color="#ff0000">conf </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">cert </font><font color="#F3E651">=</font><font color="#ff0000"> /usr/local/etc/stunnel/server-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
+<font color="#ff0000">key </font><font color="#F3E651">=</font><font color="#ff0000"> /usr/local/etc/stunnel/server-key</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
-setuid = stunnel
-setgid = stunnel
+<font color="#ff0000">setuid </font><font color="#F3E651">=</font><font color="#ff0000"> stunnel</font>
+<font color="#ff0000">setgid </font><font color="#F3E651">=</font><font color="#ff0000"> stunnel</font>
-[nfs-tls]
-accept = <font color="#000000">192.168</font>.<font color="#000000">1.138</font>:<font color="#000000">2323</font>
-connect = <font color="#000000">127.0</font>.<font color="#000000">0.1</font>:<font color="#000000">2049</font>
-CAfile = /usr/local/etc/stunnel/ca/ca-cert.pem
-verify = <font color="#000000">2</font>
-requireCert = yes
-EOF
+<font color="#F3E651">[</font><font color="#ff0000">nfs-tls</font><font color="#F3E651">]</font>
+<font color="#ff0000">accept </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#F3E651">:</font><font color="#bb00ff">2323</font>
+<font color="#ff0000">connect </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">:</font><font color="#bb00ff">2049</font>
+<font color="#ff0000">CAfile </font><font color="#F3E651">=</font><font color="#ff0000"> /usr/local/etc/stunnel/ca/ca-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
+<font color="#ff0000">verify </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000">requireCert </font><font color="#F3E651">=</font><font color="#ff0000"> yes</font>
+<font color="#ff0000">EOF</font>
-<i><font color="silver"># Enable and start stunnel</font></i>
-paul@f1:~ % doas sysrc stunnel_enable=YES
-stunnel_enable: -&gt; YES
-paul@f1:~ % doas service stunnel start
-Starting stunnel.
+<i><font color="#ababab"># Enable and start stunnel</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">stunnel_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">stunnel_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service stunnel start</font>
+<font color="#ff0000">Starting stunnel</font><font color="#F3E651">.</font>
-<i><font color="silver"># Restart stunnel to apply the CARP VIP binding</font></i>
-paul@f1:~ % doas service stunnel restart
-Stopping stunnel.
-Starting stunnel.
+<i><font color="#ababab"># Restart stunnel to apply the CARP VIP binding</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service stunnel restart</font>
+<font color="#ff0000">Stopping stunnel</font><font color="#F3E651">.</font>
+<font color="#ff0000">Starting stunnel</font><font color="#F3E651">.</font>
</pre>
<br />
<h3 style='display: inline' id='carp-control-script-for-clean-failover'>CARP Control Script for Clean Failover</h3><br />
@@ -1376,54 +1381,54 @@ Starting stunnel.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Create CARP control script on both f0 and f1</font></i>
-paul@f0:~ % doas tee /usr/local/bin/carpcontrol.sh &lt;&lt;<font color="#808080">'EOF'</font>
-<i><font color="silver">#!/bin/sh</font></i>
-<i><font color="silver"># CARP state change control script</font></i>
-
-HOSTNAME=`hostname`
-
-<b><u><font color="#000000">if</font></u></b> [ ! -f /data/nfs/nfs.DO_NOT_REMOVE ]; <b><u><font color="#000000">then</font></u></b>
- logger <font color="#808080">'/data/nfs not mounted, mounting it now!'</font>
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$HOSTNAME"</font> = <font color="#808080">'f0.lan.buetow.org'</font> ]; <b><u><font color="#000000">then</font></u></b>
- zfs load-key -L file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key zdata/enc/nfsdata
- zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/data/nfs zdata/enc/nfsdata
- <b><u><font color="#000000">else</font></u></b>
- zfs load-key -L file:///keys/f<font color="#000000">0</font>.lan.buetow.org:zdata.key zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
- zfs <b><u><font color="#000000">set</font></u></b> mountpoint=/data/nfs zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
- zfs mount zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
- zfs <b><u><font color="#000000">set</font></u></b> <b><u><font color="#000000">readonly</font></u></b>=on zdata/sink/f<font color="#000000">0</font>/zdata/enc/nfsdata
- <b><u><font color="#000000">fi</font></u></b>
- service nfsd stop <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service mountd stop <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
-<b><u><font color="#000000">fi</font></u></b>
-
-
-<b><u><font color="#000000">case</font></u></b> <font color="#808080">"$2"</font> <b><u><font color="#000000">in</font></u></b>
- MASTER)
- logger <font color="#808080">"CARP state changed to MASTER, starting services"</font>
- service rpcbind start &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service mountd start &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service nfsd start &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service nfsuserd start &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service stunnel restart &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- logger <font color="#808080">"CARP MASTER: NFS and stunnel services started"</font>
- ;;
- BACKUP)
- logger <font color="#808080">"CARP state changed to BACKUP, stopping services"</font>
- service stunnel stop &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service nfsd stop &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service mountd stop &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- service nfsuserd stop &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>
- logger <font color="#808080">"CARP BACKUP: NFS and stunnel services stopped"</font>
- ;;
- *)
- logger <font color="#808080">"CARP state changed to $2 (unhandled)"</font>
- ;;
-<b><u><font color="#000000">esac</font></u></b>
-EOF
-
-paul@f0:~ % doas chmod +x /usr/local/bin/carpcontrol.sh
+<pre><i><font color="#ababab"># Create CARP control script on both f0 and f1</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/bin/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<i><font color="#ababab">#!/bin/sh</font></i>
+<i><font color="#ababab"># CARP state change control script</font></i>
+
+<font color="#ff0000">HOSTNAME</font><font color="#F3E651">=</font><font color="#ff0000">`hostname`</font>
+
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -f /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">DO_NOT_REMOVE </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> logger </font><font color="#bb00ff">'/data/nfs not mounted, mounting it now!'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$HOSTNAME"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">'f0.lan.buetow.org'</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> zfs load-key -L file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key zdata/enc/nfsdata</font>
+<font color="#ff0000"> zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/data/nfs zdata/enc/nfsdata</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> zfs load-key -L file</font><font color="#F3E651">:</font><font color="#ff0000">///keys/f</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#ff0000">zdata</font><font color="#F3E651">.</font><font color="#ff0000">key zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
+<font color="#ff0000"> zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><font color="#ff0000">mountpoint</font><font color="#F3E651">=</font><font color="#ff0000">/data/nfs zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
+<font color="#ff0000"> zfs mount zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
+<font color="#ff0000"> zfs </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#F3E651">=</font><font color="#ff0000">on zdata/sink/f</font><font color="#bb00ff">0</font><font color="#ff0000">/zdata/enc/nfsdata</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> service nfsd stop </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service mountd stop </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<b><font color="#ffffff">fi</font></b>
+
+
+<b><font color="#ffffff">case</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$2"</font><font color="#ff0000"> </font><b><font color="#ffffff">in</font></b>
+<font color="#ff0000"> MASTER</font><font color="#F3E651">)</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP state changed to MASTER, starting services"</font>
+<font color="#ff0000"> service rpcbind start </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service mountd start </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service nfsd start </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service nfsuserd start </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service stunnel restart </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP MASTER: NFS and stunnel services started"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> BACKUP</font><font color="#F3E651">)</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP state changed to BACKUP, stopping services"</font>
+<font color="#ff0000"> service stunnel stop </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service nfsd stop </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service mountd stop </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> service nfsuserd stop </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP BACKUP: NFS and stunnel services stopped"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><font color="#F3E651">*)</font>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP state changed to $2 (unhandled)"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<b><font color="#ffffff">esac</font></b>
+<font color="#ff0000">EOF</font>
+
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /usr/local/bin/carpcontrol</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
</pre>
<br />
<h3 style='display: inline' id='carp-management-script'>CARP Management Script</h3><br />
@@ -1434,113 +1439,113 @@ paul@f0:~ % doas chmod +x /usr/local/bin/carpcontrol.sh
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Create the CARP management script</font></i>
-paul@f0:~ % doas tee /usr/local/bin/carp &lt;&lt;<font color="#808080">'EOF'</font>
-<i><font color="silver">#!/bin/sh</font></i>
-<i><font color="silver"># CARP state management script</font></i>
-<i><font color="silver"># Usage: carp [master|backup|auto-failback enable|auto-failback disable]</font></i>
-<i><font color="silver"># Without arguments: shows current state</font></i>
-
-<i><font color="silver"># Find the interface with CARP configured</font></i>
-CARP_IF=$(ifconfig -l | xargs -n<font color="#000000">1</font> | <b><u><font color="#000000">while</font></u></b> <b><u><font color="#000000">read</font></u></b> <b><u><font color="#000000">if</font></u></b>; <b><u><font color="#000000">do</font></u></b>
- ifconfig <font color="#808080">"$if"</font> <font color="#000000">2</font>&gt;/dev/null | grep -q <font color="#808080">"carp:"</font> &amp;&amp; echo <font color="#808080">"$if"</font> &amp;&amp; <b><u><font color="#000000">break</font></u></b>
-<b><u><font color="#000000">done</font></u></b>)
-
-<b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$CARP_IF"</font> ]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Error: No CARP interface found"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
-<b><u><font color="#000000">fi</font></u></b>
-
-<i><font color="silver"># Get CARP VHID</font></i>
-VHID=$(ifconfig <font color="#808080">"$CARP_IF"</font> | grep <font color="#808080">"carp:"</font> | sed -n <font color="#808080">'s/.*vhid </font>\(<font color="#808080">[0-9]*</font>\)<font color="#808080">.*/</font>\1<font color="#808080">/p'</font>)
-
-<b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$VHID"</font> ]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Error: Could not determine CARP VHID"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
-<b><u><font color="#000000">fi</font></u></b>
-
-<i><font color="silver"># Function to get the current state</font></i>
-get_state() {
- ifconfig <font color="#808080">"$CARP_IF"</font> | grep <font color="#808080">"carp:"</font> | awk <font color="#808080">'{print $2}'</font>
-}
-
-<i><font color="silver"># Check for auto-failback block file</font></i>
-BLOCK_FILE=<font color="#808080">"/data/nfs/nfs.NO_AUTO_FAILBACK"</font>
-check_auto_failback() {
- <b><u><font color="#000000">if</font></u></b> [ -f <font color="#808080">"$BLOCK_FILE"</font> ]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"WARNING: Auto-failback is DISABLED (file exists: $BLOCK_FILE)"</font>
- <b><u><font color="#000000">fi</font></u></b>
-}
-
-<i><font color="silver"># Main logic</font></i>
-<b><u><font color="#000000">case</font></u></b> <font color="#808080">"$1"</font> <b><u><font color="#000000">in</font></u></b>
- <font color="#808080">""</font>)
- <i><font color="silver"># No argument - show current state</font></i>
- STATE=$(get_state)
- echo <font color="#808080">"CARP state on $CARP_IF (vhid $VHID): $STATE"</font>
- check_auto_failback
- ;;
- master)
- <i><font color="silver"># Force to MASTER state</font></i>
- echo <font color="#808080">"Setting CARP to MASTER state..."</font>
- ifconfig <font color="#808080">"$CARP_IF"</font> vhid <font color="#808080">"$VHID"</font> state master
- sleep <font color="#000000">1</font>
- STATE=$(get_state)
- echo <font color="#808080">"CARP state on $CARP_IF (vhid $VHID): $STATE"</font>
- check_auto_failback
- ;;
- backup)
- <i><font color="silver"># Force to BACKUP state</font></i>
- echo <font color="#808080">"Setting CARP to BACKUP state..."</font>
- ifconfig <font color="#808080">"$CARP_IF"</font> vhid <font color="#808080">"$VHID"</font> state backup
- sleep <font color="#000000">1</font>
- STATE=$(get_state)
- echo <font color="#808080">"CARP state on $CARP_IF (vhid $VHID): $STATE"</font>
- check_auto_failback
- ;;
- auto-failback)
- <b><u><font color="#000000">case</font></u></b> <font color="#808080">"$2"</font> <b><u><font color="#000000">in</font></u></b>
- <b><u><font color="#000000">enable</font></u></b>)
- <b><u><font color="#000000">if</font></u></b> [ -f <font color="#808080">"$BLOCK_FILE"</font> ]; <b><u><font color="#000000">then</font></u></b>
- rm <font color="#808080">"$BLOCK_FILE"</font>
- echo <font color="#808080">"Auto-failback ENABLED (removed $BLOCK_FILE)"</font>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Auto-failback was already enabled"</font>
- <b><u><font color="#000000">fi</font></u></b>
- ;;
- disable)
- <b><u><font color="#000000">if</font></u></b> [ ! -f <font color="#808080">"$BLOCK_FILE"</font> ]; <b><u><font color="#000000">then</font></u></b>
- touch <font color="#808080">"$BLOCK_FILE"</font>
- echo <font color="#808080">"Auto-failback DISABLED (created $BLOCK_FILE)"</font>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Auto-failback was already disabled"</font>
- <b><u><font color="#000000">fi</font></u></b>
- ;;
- *)
- echo <font color="#808080">"Usage: $0 auto-failback [enable|disable]"</font>
- echo <font color="#808080">" enable: Remove block file to allow automatic failback"</font>
- echo <font color="#808080">" disable: Create block file to prevent automatic failback"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
- ;;
- <b><u><font color="#000000">esac</font></u></b>
- ;;
- *)
- echo <font color="#808080">"Usage: $0 [master|backup|auto-failback enable|auto-failback disable]"</font>
- echo <font color="#808080">" Without arguments: show current CARP state"</font>
- echo <font color="#808080">" master: force this node to become CARP MASTER"</font>
- echo <font color="#808080">" backup: force this node to become CARP BACKUP"</font>
- echo <font color="#808080">" auto-failback enable: allow automatic failback to f0"</font>
- echo <font color="#808080">" auto-failback disable: prevent automatic failback to f0"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
- ;;
-<b><u><font color="#000000">esac</font></u></b>
-EOF
-
-paul@f0:~ % doas chmod +x /usr/local/bin/carp
-
-<i><font color="silver"># Copy to f1 as well</font></i>
-paul@f0:~ % scp /usr/local/bin/carp f1:/tmp/
-paul@f1:~ % doas cp /tmp/carp /usr/local/bin/carp &amp;&amp; doas chmod +x /usr/local/bin/carp
+<pre><i><font color="#ababab"># Create the CARP management script</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/bin/carp </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<i><font color="#ababab">#!/bin/sh</font></i>
+<i><font color="#ababab"># CARP state management script</font></i>
+<i><font color="#ababab"># Usage: carp [master|backup|auto-failback enable|auto-failback disable]</font></i>
+<i><font color="#ababab"># Without arguments: shows current state</font></i>
+
+<i><font color="#ababab"># Find the interface with CARP configured</font></i>
+<font color="#ff0000">CARP_IF</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">ifconfig -l </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -n</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> ifconfig </font><font color="#bb00ff">"$if"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q </font><font color="#bb00ff">"carp:"</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo </font><font color="#bb00ff">"$if"</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><b><font color="#ffffff">break</font></b>
+<b><font color="#ffffff">done</font></b><font color="#F3E651">)</font>
+
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$CARP_IF"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Error: No CARP interface found"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<b><font color="#ffffff">fi</font></b>
+
+<i><font color="#ababab"># Get CARP VHID</font></i>
+<font color="#ff0000">VHID</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">ifconfig </font><font color="#bb00ff">"$CARP_IF"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">"carp:"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sed -n </font><font color="#bb00ff">'s/.*vhid </font><font color="#ffffff">\(</font><font color="#bb00ff">[0-9]*</font><font color="#ffffff">\)</font><font color="#bb00ff">.*/</font><font color="#ffffff">\1</font><font color="#bb00ff">/p'</font><font color="#F3E651">)</font>
+
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$VHID"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Error: Could not determine CARP VHID"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<b><font color="#ffffff">fi</font></b>
+
+<i><font color="#ababab"># Function to get the current state</font></i>
+<font color="#7bc710">get_state()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> ifconfig </font><font color="#bb00ff">"$CARP_IF"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">"carp:"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> awk </font><font color="#bb00ff">'{print $2}'</font>
+<font color="#ff0000">}</font>
+
+<i><font color="#ababab"># Check for auto-failback block file</font></i>
+<font color="#ff0000">BLOCK_FILE</font><font color="#F3E651">=</font><font color="#bb00ff">"/data/nfs/nfs.NO_AUTO_FAILBACK"</font>
+<font color="#7bc710">check_auto_failback()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$BLOCK_FILE"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"WARNING: Auto-failback is DISABLED (file exists: $BLOCK_FILE)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
+
+<i><font color="#ababab"># Main logic</font></i>
+<b><font color="#ffffff">case</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$1"</font><font color="#ff0000"> </font><b><font color="#ffffff">in</font></b>
+<font color="#ff0000"> </font><font color="#bb00ff">""</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># No argument - show current state</font></i>
+<font color="#ff0000"> </font><font color="#ff0000">STATE</font><font color="#F3E651">=</font><font color="#ff0000">$(get_state)</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"CARP state on $CARP_IF (vhid $VHID): $STATE"</font>
+<font color="#ff0000"> check_auto_failback</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> master</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Force to MASTER state</font></i>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Setting CARP to MASTER state..."</font>
+<font color="#ff0000"> ifconfig </font><font color="#bb00ff">"$CARP_IF"</font><font color="#ff0000"> vhid </font><font color="#bb00ff">"$VHID"</font><font color="#ff0000"> state master</font>
+<font color="#ff0000"> sleep </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><font color="#ff0000">STATE</font><font color="#F3E651">=</font><font color="#ff0000">$(get_state)</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"CARP state on $CARP_IF (vhid $VHID): $STATE"</font>
+<font color="#ff0000"> check_auto_failback</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> backup</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Force to BACKUP state</font></i>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Setting CARP to BACKUP state..."</font>
+<font color="#ff0000"> ifconfig </font><font color="#bb00ff">"$CARP_IF"</font><font color="#ff0000"> vhid </font><font color="#bb00ff">"$VHID"</font><font color="#ff0000"> state backup</font>
+<font color="#ff0000"> sleep </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><font color="#ff0000">STATE</font><font color="#F3E651">=</font><font color="#ff0000">$(get_state)</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"CARP state on $CARP_IF (vhid $VHID): $STATE"</font>
+<font color="#ff0000"> check_auto_failback</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> auto-failback</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">case</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$2"</font><font color="#ff0000"> </font><b><font color="#ffffff">in</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">enable</font></b><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$BLOCK_FILE"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> rm </font><font color="#bb00ff">"$BLOCK_FILE"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Auto-failback ENABLED (removed $BLOCK_FILE)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Auto-failback was already enabled"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> disable</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$BLOCK_FILE"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> touch </font><font color="#bb00ff">"$BLOCK_FILE"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Auto-failback DISABLED (created $BLOCK_FILE)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Auto-failback was already disabled"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><font color="#F3E651">*)</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Usage: $0 auto-failback [enable|disable]"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" enable: Remove block file to allow automatic failback"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" disable: Create block file to prevent automatic failback"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">esac</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><font color="#F3E651">*)</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Usage: $0 [master|backup|auto-failback enable|auto-failback disable]"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" Without arguments: show current CARP state"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" master: force this node to become CARP MASTER"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" backup: force this node to become CARP BACKUP"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" auto-failback enable: allow automatic failback to f0"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">" auto-failback disable: prevent automatic failback to f0"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<b><font color="#ffffff">esac</font></b>
+<font color="#ff0000">EOF</font>
+
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /usr/local/bin/carp</font>
+
+<i><font color="#ababab"># Copy to f1 as well</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> scp /usr/local/bin/carp f1</font><font color="#F3E651">:</font><font color="#ff0000">/tmp</font><font color="#F3E651">/</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas cp /tmp/carp /usr/local/bin/carp </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> doas chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /usr/local/bin/carp</font>
</pre>
<br />
<span>Now you can easily manage CARP states and auto-failback:</span><br />
@@ -1549,27 +1554,27 @@ paul@f1:~ % doas cp /tmp/carp /usr/local/bin/carp &amp;&amp; doas chmod +x /usr/
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Check current CARP state</font></i>
-paul@f0:~ % doas carp
-CARP state on re0 (vhid <font color="#000000">1</font>): MASTER
+<pre><i><font color="#ababab"># Check current CARP state</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp</font>
+<font color="#ff0000">CARP state on re0 </font><font color="#F3E651">(</font><font color="#ff0000">vhid </font><font color="#bb00ff">1</font><font color="#F3E651">):</font><font color="#ff0000"> MASTER</font>
-<i><font color="silver"># If auto-failback is disabled, you'll see a warning</font></i>
-paul@f0:~ % doas carp
-CARP state on re0 (vhid <font color="#000000">1</font>): MASTER
-WARNING: Auto-failback is DISABLED (file exists: /data/nfs/nfs.NO_AUTO_FAILBACK)
+<i><font color="#ababab"># If auto-failback is disabled, you'll see a warning</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp</font>
+<font color="#ff0000">CARP state on re0 </font><font color="#F3E651">(</font><font color="#ff0000">vhid </font><font color="#bb00ff">1</font><font color="#F3E651">):</font><font color="#ff0000"> MASTER</font>
+<font color="#ff0000">WARNING</font><font color="#F3E651">:</font><font color="#ff0000"> Auto-failback is DISABLED </font><font color="#F3E651">(</font><font color="#ff0000">file exists</font><font color="#F3E651">:</font><font color="#ff0000"> /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">NO_AUTO_FAILBACK</font><font color="#F3E651">)</font>
-<i><font color="silver"># Force f0 to become BACKUP (triggers failover to f1)</font></i>
-paul@f0:~ % doas carp backup
-Setting CARP to BACKUP state...
-CARP state on re0 (vhid <font color="#000000">1</font>): BACKUP
+<i><font color="#ababab"># Force f0 to become BACKUP (triggers failover to f1)</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp backup</font>
+<font color="#ff0000">Setting CARP to BACKUP state</font><font color="#F3E651">...</font>
+<font color="#ff0000">CARP state on re0 </font><font color="#F3E651">(</font><font color="#ff0000">vhid </font><font color="#bb00ff">1</font><font color="#F3E651">):</font><font color="#ff0000"> BACKUP</font>
-<i><font color="silver"># Disable auto-failback (useful for maintenance)</font></i>
-paul@f0:~ % doas carp auto-failback disable
-Auto-failback DISABLED (created /data/nfs/nfs.NO_AUTO_FAILBACK)
+<i><font color="#ababab"># Disable auto-failback (useful for maintenance)</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp auto-failback disable</font>
+<font color="#ff0000">Auto-failback DISABLED </font><font color="#F3E651">(</font><font color="#ff0000">created /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">NO_AUTO_FAILBACK</font><font color="#F3E651">)</font>
-<i><font color="silver"># Enable auto-failback</font></i>
-paul@f0:~ % doas carp auto-failback <b><u><font color="#000000">enable</font></u></b>
-Auto-failback ENABLED (removed /data/nfs/nfs.NO_AUTO_FAILBACK)
+<i><font color="#ababab"># Enable auto-failback</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp auto-failback </font><b><font color="#ffffff">enable</font></b>
+<font color="#ff0000">Auto-failback ENABLED </font><font color="#F3E651">(</font><font color="#ff0000">removed /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">NO_AUTO_FAILBACK</font><font color="#F3E651">)</font>
</pre>
<br />
<h3 style='display: inline' id='automatic-failback-after-reboot'>Automatic Failback After Reboot</h3><br />
@@ -1582,60 +1587,60 @@ Auto-failback ENABLED (removed /data/nfs/nfs.NO_AUTO_FAILBACK)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas tee /usr/local/bin/carp-auto-failback.sh &lt;&lt;<font color="#808080">'EOF'</font>
-<i><font color="silver">#!/bin/sh</font></i>
-<i><font color="silver"># CARP automatic failback script for f0</font></i>
-<i><font color="silver"># Ensures f0 reclaims MASTER role after reboot when storage is ready</font></i>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas tee /usr/local/bin/carp-auto-failback</font><font color="#F3E651">.</font><font color="#ff0000">sh </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<i><font color="#ababab">#!/bin/sh</font></i>
+<i><font color="#ababab"># CARP automatic failback script for f0</font></i>
+<i><font color="#ababab"># Ensures f0 reclaims MASTER role after reboot when storage is ready</font></i>
-LOGFILE=<font color="#808080">"/var/log/carp-auto-failback.log"</font>
-MARKER_FILE=<font color="#808080">"/data/nfs/nfs.DO_NOT_REMOVE"</font>
-BLOCK_FILE=<font color="#808080">"/data/nfs/nfs.NO_AUTO_FAILBACK"</font>
+<font color="#ff0000">LOGFILE</font><font color="#F3E651">=</font><font color="#bb00ff">"/var/log/carp-auto-failback.log"</font>
+<font color="#ff0000">MARKER_FILE</font><font color="#F3E651">=</font><font color="#bb00ff">"/data/nfs/nfs.DO_NOT_REMOVE"</font>
+<font color="#ff0000">BLOCK_FILE</font><font color="#F3E651">=</font><font color="#bb00ff">"/data/nfs/nfs.NO_AUTO_FAILBACK"</font>
-log_message() {
- echo <font color="#808080">"$(date '+%Y-%m-%d %H:%M:%S') - $1"</font> &gt;&gt; <font color="#808080">"$LOGFILE"</font>
-}
+<font color="#7bc710">log_message()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$(date '+%Y-%m-%d %H:%M:%S') - $1"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">"$LOGFILE"</font>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Check if we're already MASTER</font></i>
-CURRENT_STATE=$(/usr/local/bin/carp | awk <font color="#808080">'{print $NF}'</font>)
-<b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$CURRENT_STATE"</font> = <font color="#808080">"MASTER"</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
-<b><u><font color="#000000">fi</font></u></b>
+<i><font color="#ababab"># Check if we're already MASTER</font></i>
+<font color="#ff0000">CURRENT_STATE</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">/usr/local/bin/carp </font><font color="#F3E651">|</font><font color="#ff0000"> awk </font><font color="#bb00ff">'{print $NF}'</font><font color="#F3E651">)</font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$CURRENT_STATE"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"MASTER"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<b><font color="#ffffff">fi</font></b>
-<i><font color="silver"># Check if /data/nfs is mounted</font></i>
-<b><u><font color="#000000">if</font></u></b> ! mount | grep -q <font color="#808080">"on /data/nfs "</font>; <b><u><font color="#000000">then</font></u></b>
- log_message <font color="#808080">"SKIP: /data/nfs not mounted"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
-<b><u><font color="#000000">fi</font></u></b>
+<i><font color="#ababab"># Check if /data/nfs is mounted</font></i>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> mount </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q </font><font color="#bb00ff">"on /data/nfs "</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log_message </font><font color="#bb00ff">"SKIP: /data/nfs not mounted"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<b><font color="#ffffff">fi</font></b>
-<i><font color="silver"># Check if the marker file exists</font></i>
-<i><font color="silver"># (identifies that the ZFS data set is properly mounted)</font></i>
-<b><u><font color="#000000">if</font></u></b> [ ! -f <font color="#808080">"$MARKER_FILE"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log_message <font color="#808080">"SKIP: Marker file $MARKER_FILE not found"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
-<b><u><font color="#000000">fi</font></u></b>
+<i><font color="#ababab"># Check if the marker file exists</font></i>
+<i><font color="#ababab"># (identifies that the ZFS data set is properly mounted)</font></i>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$MARKER_FILE"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log_message </font><font color="#bb00ff">"SKIP: Marker file $MARKER_FILE not found"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<b><font color="#ffffff">fi</font></b>
-<i><font color="silver"># Check if failback is blocked (for maintenance)</font></i>
-<b><u><font color="#000000">if</font></u></b> [ -f <font color="#808080">"$BLOCK_FILE"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log_message <font color="#808080">"SKIP: Failback blocked by $BLOCK_FILE"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
-<b><u><font color="#000000">fi</font></u></b>
+<i><font color="#ababab"># Check if failback is blocked (for maintenance)</font></i>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$BLOCK_FILE"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log_message </font><font color="#bb00ff">"SKIP: Failback blocked by $BLOCK_FILE"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<b><font color="#ffffff">fi</font></b>
-<i><font color="silver"># All conditions met - promote to MASTER</font></i>
-log_message <font color="#808080">"CONDITIONS MET: Promoting to MASTER (was $CURRENT_STATE)"</font>
-/usr/local/bin/carp master
+<i><font color="#ababab"># All conditions met - promote to MASTER</font></i>
+<font color="#ff0000">log_message </font><font color="#bb00ff">"CONDITIONS MET: Promoting to MASTER (was $CURRENT_STATE)"</font>
+<font color="#ff0000">/usr/local/bin/carp master</font>
-<i><font color="silver"># Log result</font></i>
-sleep <font color="#000000">2</font>
-NEW_STATE=$(/usr/local/bin/carp | awk <font color="#808080">'{print $NF}'</font>)
-log_message <font color="#808080">"Failback complete: State is now $NEW_STATE"</font>
+<i><font color="#ababab"># Log result</font></i>
+<font color="#ff0000">sleep </font><font color="#bb00ff">2</font>
+<font color="#ff0000">NEW_STATE</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">/usr/local/bin/carp </font><font color="#F3E651">|</font><font color="#ff0000"> awk </font><font color="#bb00ff">'{print $NF}'</font><font color="#F3E651">)</font>
+<font color="#ff0000">log_message </font><font color="#bb00ff">"Failback complete: State is now $NEW_STATE"</font>
-<i><font color="silver"># If successful, log to the system log too</font></i>
-<b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$NEW_STATE"</font> = <font color="#808080">"MASTER"</font> ]; <b><u><font color="#000000">then</font></u></b>
- logger <font color="#808080">"CARP: f0 automatically reclaimed MASTER role"</font>
-<b><u><font color="#000000">fi</font></u></b>
-EOF
+<i><font color="#ababab"># If successful, log to the system log too</font></i>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$NEW_STATE"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"MASTER"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> logger </font><font color="#bb00ff">"CARP: f0 automatically reclaimed MASTER role"</font>
+<b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">EOF</font>
-paul@f0:~ % doas chmod +x /usr/local/bin/carp-auto-failback.sh
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas chmod </font><font color="#F3E651">+</font><font color="#ff0000">x /usr/local/bin/carp-auto-failback</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
</pre>
<br />
<span>The marker file identifies that the ZFS data set is mounted correctly. We create it with:</span><br />
@@ -1644,7 +1649,7 @@ paul@f0:~ % doas chmod +x /usr/local/bin/carp-auto-failback.sh
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas touch /data/nfs/nfs.DO_NOT_REMOVE
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas touch /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">DO_NOT_REMOVE</font>
</pre>
<br />
<span>We add a cron job to check every minute:</span><br />
@@ -1653,7 +1658,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % echo <font color="#808080">"* * * * * /usr/local/bin/carp-auto-failback.sh"</font> | doas crontab -
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> echo </font><font color="#bb00ff">"* * * * * /usr/local/bin/carp-auto-failback.sh"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> doas crontab -</font>
</pre>
<br />
<span>The enhanced CARP script provides integrated control over auto-failback. To temporarily turn off automatic failback (e.g., for <span class='inlinecode'>f0</span> maintenance), we run:</span><br />
@@ -1662,8 +1667,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas carp auto-failback disable
-Auto-failback DISABLED (created /data/nfs/nfs.NO_AUTO_FAILBACK)
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp auto-failback disable</font>
+<font color="#ff0000">Auto-failback DISABLED </font><font color="#F3E651">(</font><font color="#ff0000">created /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">NO_AUTO_FAILBACK</font><font color="#F3E651">)</font>
</pre>
<br />
<span>And to re-enable it:</span><br />
@@ -1672,8 +1677,8 @@ Auto-failback DISABLED (created /data/nfs/nfs.NO_AUTO_FAILBACK)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas carp auto-failback <b><u><font color="#000000">enable</font></u></b>
-Auto-failback ENABLED (removed /data/nfs/nfs.NO_AUTO_FAILBACK)
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp auto-failback </font><b><font color="#ffffff">enable</font></b>
+<font color="#ff0000">Auto-failback ENABLED </font><font color="#F3E651">(</font><font color="#ff0000">removed /data/nfs/nfs</font><font color="#F3E651">.</font><font color="#ff0000">NO_AUTO_FAILBACK</font><font color="#F3E651">)</font>
</pre>
<br />
<span>To check whether auto-failback is enabled, we run:</span><br />
@@ -1682,9 +1687,9 @@ Auto-failback ENABLED (removed /data/nfs/nfs.NO_AUTO_FAILBACK)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas carp
-CARP state on re0 (vhid <font color="#000000">1</font>): MASTER
-<i><font color="silver"># If disabled, you'll see: WARNING: Auto-failback is DISABLED</font></i>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas carp</font>
+<font color="#ff0000">CARP state on re0 </font><font color="#F3E651">(</font><font color="#ff0000">vhid </font><font color="#bb00ff">1</font><font color="#F3E651">):</font><font color="#ff0000"> MASTER</font>
+<i><font color="#ababab"># If disabled, you'll see: WARNING: Auto-failback is DISABLED</font></i>
</pre>
<br />
<span>The failback attempts are logged to <span class='inlinecode'>/var/log/carp-auto-failback.log</span>!</span><br />
@@ -1711,29 +1716,29 @@ CARP state on re0 (vhid <font color="#000000">1</font>): MASTER
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Install stunnel on client (example for `r0`)</font></i>
-[root@r0 ~]<i><font color="silver"># dnf install -y stunnel nfs-utils</font></i>
+<pre><i><font color="#ababab"># Install stunnel on client (example for `r0`)</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># dnf install -y stunnel nfs-utils</font></i>
-<i><font color="silver"># Copy client certificate and CA certificate from f0</font></i>
-[root@r0 ~]<i><font color="silver"># scp f0:/usr/local/etc/stunnel/ca/r0-stunnel.pem /etc/stunnel/</font></i>
-[root@r0 ~]<i><font color="silver"># scp f0:/usr/local/etc/stunnel/ca/ca-cert.pem /etc/stunnel/</font></i>
+<i><font color="#ababab"># Copy client certificate and CA certificate from f0</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># scp f0:/usr/local/etc/stunnel/ca/r0-stunnel.pem /etc/stunnel/</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># scp f0:/usr/local/etc/stunnel/ca/ca-cert.pem /etc/stunnel/</font></i>
-<i><font color="silver"># Configure stunnel client with certificate authentication</font></i>
-[root@r0 ~]<i><font color="silver"># tee /etc/stunnel/stunnel.conf &lt;&lt;'EOF'</font></i>
-cert = /etc/stunnel/r<font color="#000000">0</font>-stunnel.pem
-CAfile = /etc/stunnel/ca-cert.pem
-client = yes
-verify = <font color="#000000">2</font>
+<i><font color="#ababab"># Configure stunnel client with certificate authentication</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># tee /etc/stunnel/stunnel.conf &lt;&lt;'EOF'</font></i>
+<font color="#ff0000">cert </font><font color="#F3E651">=</font><font color="#ff0000"> /etc/stunnel/r</font><font color="#bb00ff">0</font><font color="#ff0000">-stunnel</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
+<font color="#ff0000">CAfile </font><font color="#F3E651">=</font><font color="#ff0000"> /etc/stunnel/ca-cert</font><font color="#F3E651">.</font><font color="#ff0000">pem</font>
+<font color="#ff0000">client </font><font color="#F3E651">=</font><font color="#ff0000"> yes</font>
+<font color="#ff0000">verify </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
-[nfs-ha]
-accept = <font color="#000000">127.0</font>.<font color="#000000">0.1</font>:<font color="#000000">2323</font>
-connect = <font color="#000000">192.168</font>.<font color="#000000">1.138</font>:<font color="#000000">2323</font>
-EOF
+<font color="#F3E651">[</font><font color="#ff0000">nfs-ha</font><font color="#F3E651">]</font>
+<font color="#ff0000">accept </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">:</font><font color="#bb00ff">2323</font>
+<font color="#ff0000">connect </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#F3E651">:</font><font color="#bb00ff">2323</font>
+<font color="#ff0000">EOF</font>
-<i><font color="silver"># Enable and start stunnel</font></i>
-[root@r0 ~]<i><font color="silver"># systemctl enable --now stunnel</font></i>
+<i><font color="#ababab"># Enable and start stunnel</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl enable --now stunnel</font></i>
-<i><font color="silver"># Repeat for r1 and r2 with their respective certificates</font></i>
+<i><font color="#ababab"># Repeat for r1 and r2 with their respective certificates</font></i>
</pre>
<br />
<span>Note: Each client must use its certificate file (<span class='inlinecode'>r0-stunnel.pem</span>, <span class='inlinecode'>r1-stunnel.pem</span>, <span class='inlinecode'>r2-stunnel.pem</span>, or <span class='inlinecode'>earth-stunnel.pem</span> - the latter is for my Laptop, which can also mount the NFS shares).</span><br />
@@ -1759,8 +1764,8 @@ Domain = lan.buetow.org
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># echo 'fs.inotify.max_user_instances = 512' &gt; /etc/sysctl.d/99-inotify.conf</font></i>
-[root@r0 ~]<i><font color="silver"># sysctl -w fs.inotify.max_user_instances=512</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># echo 'fs.inotify.max_user_instances = 512' &gt; /etc/sysctl.d/99-inotify.conf</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># sysctl -w fs.inotify.max_user_instances=512</font></i>
</pre>
<br />
<span>And afterwards, we need to run the following on all 3 Rocky hosts:</span><br />
@@ -1769,8 +1774,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># systemctl start nfs-idmapd</font></i>
-[root@r0 ~]<i><font color="silver"># systemctl enable --now nfs-client.target</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl start nfs-idmapd</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl enable --now nfs-client.target</font></i>
</pre>
<br />
<span>and then, safest, reboot those.</span><br />
@@ -1783,21 +1788,21 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Create a mount point</font></i>
-[root@r0 ~]<i><font color="silver"># mkdir -p /data/nfs/k3svolumes</font></i>
+<pre><i><font color="#ababab"># Create a mount point</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir -p /data/nfs/k3svolumes</font></i>
-<i><font color="silver"># Mount through stunnel (using localhost and NFSv4)</font></i>
-[root@r0 ~]<i><font color="silver"># mount -t nfs4 -o port=2323 127.0.0.1:/k3svolumes /data/nfs/k3svolumes</font></i>
+<i><font color="#ababab"># Mount through stunnel (using localhost and NFSv4)</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mount -t nfs4 -o port=2323 127.0.0.1:/k3svolumes /data/nfs/k3svolumes</font></i>
-<i><font color="silver"># Verify mount</font></i>
-[root@r0 ~]<i><font color="silver"># mount | grep k3svolumes</font></i>
-<font color="#000000">127.0</font>.<font color="#000000">0.1</font>:/k3svolumes on /data/nfs/k3svolumes
- <b><u><font color="#000000">type</font></u></b> nfs4 (rw,relatime,vers=<font color="#000000">4.2</font>,rsize=<font color="#000000">131072</font>,wsize=<font color="#000000">131072</font>,
- namlen=<font color="#000000">255</font>,hard,proto=tcp,port=<font color="#000000">2323</font>,timeo=<font color="#000000">600</font>,retrans=<font color="#000000">2</font>,sec=sys,
- clientaddr=<font color="#000000">127.0</font>.<font color="#000000">0.1</font>,local_lock=none,addr=<font color="#000000">127.0</font>.<font color="#000000">0.1</font>)
+<i><font color="#ababab"># Verify mount</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mount | grep k3svolumes</font></i>
+<font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">:</font><font color="#ff0000">/k3svolumes on /data/nfs/k3svolumes </font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#ff0000"> nfs4 </font><font color="#F3E651">(</font><font color="#ff0000">rw</font><font color="#F3E651">,</font><font color="#ff0000">relatime</font><font color="#F3E651">,</font><font color="#ff0000">vers</font><font color="#F3E651">=</font><font color="#bb00ff">4.2</font><font color="#F3E651">,</font><font color="#ff0000">rsize</font><font color="#F3E651">=</font><font color="#bb00ff">131072</font><font color="#F3E651">,</font><font color="#ff0000">wsize</font><font color="#F3E651">=</font><font color="#bb00ff">131072</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">namlen</font><font color="#F3E651">=</font><font color="#bb00ff">255</font><font color="#F3E651">,</font><font color="#ff0000">hard</font><font color="#F3E651">,</font><font color="#ff0000">proto</font><font color="#F3E651">=</font><font color="#ff0000">tcp</font><font color="#F3E651">,</font><font color="#ff0000">port</font><font color="#F3E651">=</font><font color="#bb00ff">2323</font><font color="#F3E651">,</font><font color="#ff0000">timeo</font><font color="#F3E651">=</font><font color="#bb00ff">600</font><font color="#F3E651">,</font><font color="#ff0000">retrans</font><font color="#F3E651">=</font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000">sec</font><font color="#F3E651">=</font><font color="#ff0000">sys</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">clientaddr</font><font color="#F3E651">=</font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">,</font><font color="#ff0000">local_lock</font><font color="#F3E651">=</font><font color="#ff0000">none</font><font color="#F3E651">,</font><font color="#ff0000">addr</font><font color="#F3E651">=</font><font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">)</font>
-<i><font color="silver"># For persistent mount, add to /etc/fstab:</font></i>
-<font color="#000000">127.0</font>.<font color="#000000">0.1</font>:/k3svolumes /data/nfs/k3svolumes nfs4 port=<font color="#000000">2323</font>,_netdev,soft,timeo=<font color="#000000">10</font>,retrans=<font color="#000000">2</font>,intr <font color="#000000">0</font> <font color="#000000">0</font>
+<i><font color="#ababab"># For persistent mount, add to /etc/fstab:</font></i>
+<font color="#bb00ff">127.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.1</font><font color="#F3E651">:</font><font color="#ff0000">/k3svolumes /data/nfs/k3svolumes nfs4 </font><font color="#ff0000">port</font><font color="#F3E651">=</font><font color="#bb00ff">2323</font><font color="#F3E651">,</font><font color="#ff0000">_netdev</font><font color="#F3E651">,</font><font color="#ff0000">soft</font><font color="#F3E651">,</font><font color="#ff0000">timeo</font><font color="#F3E651">=</font><font color="#bb00ff">10</font><font color="#F3E651">,</font><font color="#ff0000">retrans</font><font color="#F3E651">=</font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000">intr </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
</pre>
<br />
<span>Note: The mount uses localhost (<span class='inlinecode'>127.0.0.1</span>) because stunnel is listening locally and forwarding the encrypted traffic to the remote server.</span><br />
@@ -1810,20 +1815,20 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># On f0 (current MASTER) - trigger failover</font></i>
-paul@f0:~ % doas ifconfig re0 vhid <font color="#000000">1</font> state backup
+<pre><i><font color="#ababab"># On f0 (current MASTER) - trigger failover</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas ifconfig re0 vhid </font><font color="#bb00ff">1</font><font color="#ff0000"> state backup</font>
-<i><font color="silver"># On f1 - verify it becomes MASTER</font></i>
-paul@f1:~ % ifconfig re0 | grep carp
- inet <font color="#000000">192.168</font>.<font color="#000000">1.138</font> netmask <font color="#000000">0xffffffff</font> broadcast <font color="#000000">192.168</font>.<font color="#000000">1.138</font> vhid <font color="#000000">1</font>
+<i><font color="#ababab"># On f1 - verify it becomes MASTER</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0 </font><font color="#F3E651">|</font><font color="#ff0000"> grep carp</font>
+<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffffff</font><font color="#ff0000"> broadcast </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#ff0000"> vhid </font><font color="#bb00ff">1</font>
-<i><font color="silver"># Check stunnel is now listening on f1</font></i>
-paul@f1:~ % doas sockstat -l | grep <font color="#000000">2323</font>
-stunnel stunnel <font color="#000000">4567</font> <font color="#000000">3</font> tcp4 <font color="#000000">192.168</font>.<font color="#000000">1.138</font>:<font color="#000000">2323</font> *:*
+<i><font color="#ababab"># Check stunnel is now listening on f1</font></i>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sockstat -l </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">2323</font>
+<font color="#ff0000">stunnel stunnel </font><font color="#bb00ff">4567</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> tcp4 </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#F3E651">:</font><font color="#bb00ff">2323</font><font color="#ff0000"> </font><font color="#F3E651">*:*</font>
-<i><font color="silver"># On client - verify NFS mount still works</font></i>
-[root@r0 ~]<i><font color="silver"># ls /data/nfs/k3svolumes/</font></i>
-[root@r0 ~]<i><font color="silver"># echo "Test after failover" &gt; /data/nfs/k3svolumes/failover-test.txt</font></i>
+<i><font color="#ababab"># On client - verify NFS mount still works</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># ls /data/nfs/k3svolumes/</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># echo "Test after failover" &gt; /data/nfs/k3svolumes/failover-test.txt</font></i>
</pre>
<br />
<span>After a CARP failover, NFS clients may experience "Stale file handle" errors because they cached file handles from the previous server. To resolve this manually, we can run:</span><br />
@@ -1832,9 +1837,9 @@ stunnel stunnel <font color="#000000">4567</font> <font color="#000000">3</
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Force unmount and remount</font></i>
-[root@r0 ~]<i><font color="silver"># umount -f /data/nfs/k3svolumes</font></i>
-[root@r0 ~]<i><font color="silver"># mount /data/nfs/k3svolumes</font></i>
+<pre><i><font color="#ababab"># Force unmount and remount</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># umount -f /data/nfs/k3svolumes</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mount /data/nfs/k3svolumes</font></i>
</pre>
<br />
<span>For the automatic recovery, we create a script:</span><br />
@@ -1843,72 +1848,72 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># cat &gt; /usr/local/bin/check-nfs-mount.sh &lt;&lt; 'EOF'</font></i>
-<i><font color="silver">#!/bin/bash</font></i>
-<i><font color="silver"># Fast NFS mount health monitor - runs every 10 seconds via systemd timer</font></i>
-
-MOUNT_POINT=<font color="#808080">"/data/nfs/k3svolumes"</font>
-LOCK_FILE=<font color="#808080">"/var/run/nfs-mount-check.lock"</font>
-
-<i><font color="silver"># Use a lock file to prevent concurrent runs</font></i>
-<b><u><font color="#000000">if</font></u></b> [ -f <font color="#808080">"$LOCK_FILE"</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
-<b><u><font color="#000000">fi</font></u></b>
-touch <font color="#808080">"$LOCK_FILE"</font>
-<b><u><font color="#000000">trap</font></u></b> <font color="#808080">"rm -f $LOCK_FILE"</font> EXIT
-
-fix_mount () {
- echo <font color="#808080">"Attempting to remount NFS mount $MOUNT_POINT"</font>
- <b><u><font color="#000000">if</font></u></b> mount -o remount -f <font color="#808080">"$MOUNT_POINT"</font> <font color="#000000">2</font>&gt;/dev/null; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Remount command issued for $MOUNT_POINT"</font>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Failed to remount NFS mount $MOUNT_POINT"</font>
- <b><u><font color="#000000">fi</font></u></b>
-
- echo <font color="#808080">"Checking if $MOUNT_POINT is a mountpoint"</font>
- <b><u><font color="#000000">if</font></u></b> mountpoint <font color="#808080">"$MOUNT_POINT"</font> &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"$MOUNT_POINT is a valid mountpoint"</font>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"$MOUNT_POINT is not a valid mountpoint, attempting mount"</font>
- <b><u><font color="#000000">if</font></u></b> mount <font color="#808080">"$MOUNT_POINT"</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Successfully mounted $MOUNT_POINT"</font>
- <b><u><font color="#000000">return</font></u></b>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Failed to mount $MOUNT_POINT"</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">fi</font></u></b>
-
- echo <font color="#808080">"Attempting to unmount $MOUNT_POINT"</font>
- <b><u><font color="#000000">if</font></u></b> umount -f <font color="#808080">"$MOUNT_POINT"</font> <font color="#000000">2</font>&gt;/dev/null; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Successfully unmounted $MOUNT_POINT"</font>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Failed to unmount $MOUNT_POINT (it might not be mounted)"</font>
- <b><u><font color="#000000">fi</font></u></b>
-
- echo <font color="#808080">"Attempting to mount $MOUNT_POINT"</font>
- <b><u><font color="#000000">if</font></u></b> mount <font color="#808080">"$MOUNT_POINT"</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"NFS mount $MOUNT_POINT mounted successfully"</font>
- <b><u><font color="#000000">return</font></u></b>
- <b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Failed to mount NFS mount $MOUNT_POINT"</font>
- <b><u><font color="#000000">fi</font></u></b>
-
- echo <font color="#808080">"Failed to fix NFS mount $MOUNT_POINT"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
-}
-
-<b><u><font color="#000000">if</font></u></b> ! mountpoint <font color="#808080">"$MOUNT_POINT"</font> &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"NFS mount $MOUNT_POINT not found"</font>
- fix_mount
-<b><u><font color="#000000">fi</font></u></b>
-
-<b><u><font color="#000000">if</font></u></b> ! timeout 2s stat <font color="#808080">"$MOUNT_POINT"</font> &gt;/dev/null <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font>; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"NFS mount $MOUNT_POINT appears to be unresponsive"</font>
- fix_mount
-<b><u><font color="#000000">fi</font></u></b>
-EOF
-
-[root@r0 ~]<i><font color="silver"># chmod +x /usr/local/bin/check-nfs-mount.sh</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># cat &gt; /usr/local/bin/check-nfs-mount.sh &lt;&lt; 'EOF'</font></i>
+<i><font color="#ababab">#!/bin/bash</font></i>
+<i><font color="#ababab"># Fast NFS mount health monitor - runs every 10 seconds via systemd timer</font></i>
+
+<font color="#ff0000">MOUNT_POINT</font><font color="#F3E651">=</font><font color="#bb00ff">"/data/nfs/k3svolumes"</font>
+<font color="#ff0000">LOCK_FILE</font><font color="#F3E651">=</font><font color="#bb00ff">"/var/run/nfs-mount-check.lock"</font>
+
+<i><font color="#ababab"># Use a lock file to prevent concurrent runs</font></i>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$LOCK_FILE"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">touch </font><font color="#bb00ff">"$LOCK_FILE"</font>
+<b><font color="#ffffff">trap</font></b><font color="#ff0000"> </font><font color="#bb00ff">"rm -f $LOCK_FILE"</font><font color="#ff0000"> EXIT</font>
+
+<font color="#7bc710">fix_mount ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Attempting to remount NFS mount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> mount -o remount -f </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Remount command issued for $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Failed to remount NFS mount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Checking if $MOUNT_POINT is a mountpoint"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> mountpoint </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$MOUNT_POINT is a valid mountpoint"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"$MOUNT_POINT is not a valid mountpoint, attempting mount"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> mount </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Successfully mounted $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Failed to mount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Attempting to unmount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> umount -f </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Successfully unmounted $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Failed to unmount $MOUNT_POINT (it might not be mounted)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Attempting to mount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> mount </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"NFS mount $MOUNT_POINT mounted successfully"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Failed to mount NFS mount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Failed to fix NFS mount $MOUNT_POINT"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000">}</font>
+
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> mountpoint </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"NFS mount $MOUNT_POINT not found"</font>
+<font color="#ff0000"> fix_mount</font>
+<b><font color="#ffffff">fi</font></b>
+
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> timeout 2s stat </font><font color="#bb00ff">"$MOUNT_POINT"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"NFS mount $MOUNT_POINT appears to be unresponsive"</font>
+<font color="#ff0000"> fix_mount</font>
+<b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">EOF</font>
+
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># chmod +x /usr/local/bin/check-nfs-mount.sh</font></i>
</pre>
<br />
<span>And we create the systemd service as follows:</span><br />
@@ -1917,17 +1922,17 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># cat &gt; /etc/systemd/system/nfs-mount-monitor.service &lt;&lt; 'EOF'</font></i>
-[Unit]
-Description=NFS Mount Health Monitor
-After=network-online.target
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># cat &gt; /etc/systemd/system/nfs-mount-monitor.service &lt;&lt; 'EOF'</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">Unit</font><font color="#F3E651">]</font>
+<font color="#ff0000">Description</font><font color="#F3E651">=</font><font color="#ff0000">NFS Mount Health Monitor</font>
+<font color="#ff0000">After</font><font color="#F3E651">=</font><font color="#ff0000">network-online</font><font color="#F3E651">.</font><font color="#ff0000">target</font>
-[Service]
-Type=oneshot
-ExecStart=/usr/local/bin/check-nfs-mount.sh
-StandardOutput=journal
-StandardError=journal
-EOF
+<font color="#F3E651">[</font><font color="#ff0000">Service</font><font color="#F3E651">]</font>
+<font color="#ff0000">Type</font><font color="#F3E651">=</font><font color="#ff0000">oneshot</font>
+<font color="#ff0000">ExecStart</font><font color="#F3E651">=</font><font color="#ff0000">/usr/local/bin/check-nfs-mount</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000">StandardOutput</font><font color="#F3E651">=</font><font color="#ff0000">journal</font>
+<font color="#ff0000">StandardError</font><font color="#F3E651">=</font><font color="#ff0000">journal</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>And we also create the systemd timer (runs every 10 seconds):</span><br />
@@ -1936,19 +1941,19 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># cat &gt; /etc/systemd/system/nfs-mount-monitor.timer &lt;&lt; 'EOF'</font></i>
-[Unit]
-Description=Run NFS Mount Health Monitor every <font color="#000000">10</font> seconds
-Requires=nfs-mount-monitor.service
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># cat &gt; /etc/systemd/system/nfs-mount-monitor.timer &lt;&lt; 'EOF'</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">Unit</font><font color="#F3E651">]</font>
+<font color="#ff0000">Description</font><font color="#F3E651">=</font><font color="#ff0000">Run NFS Mount Health Monitor every </font><font color="#bb00ff">10</font><font color="#ff0000"> seconds</font>
+<font color="#ff0000">Requires</font><font color="#F3E651">=</font><font color="#ff0000">nfs-mount-monitor</font><font color="#F3E651">.</font><font color="#ff0000">service</font>
-[Timer]
-OnBootSec=30s
-OnUnitActiveSec=10s
-AccuracySec=1s
+<font color="#F3E651">[</font><font color="#ff0000">Timer</font><font color="#F3E651">]</font>
+<font color="#ff0000">OnBootSec</font><font color="#F3E651">=</font><font color="#ff0000">30s</font>
+<font color="#ff0000">OnUnitActiveSec</font><font color="#F3E651">=</font><font color="#ff0000">10s</font>
+<font color="#ff0000">AccuracySec</font><font color="#F3E651">=</font><font color="#ff0000">1s</font>
-[Install]
-WantedBy=timers.target
-EOF
+<font color="#F3E651">[</font><font color="#ff0000">Install</font><font color="#F3E651">]</font>
+<font color="#ff0000">WantedBy</font><font color="#F3E651">=</font><font color="#ff0000">timers</font><font color="#F3E651">.</font><font color="#ff0000">target</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>To enable and start the timer, we run:</span><br />
@@ -1957,19 +1962,19 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># systemctl daemon-reload</font></i>
-[root@r0 ~]<i><font color="silver"># systemctl enable nfs-mount-monitor.timer</font></i>
-[root@r0 ~]<i><font color="silver"># systemctl start nfs-mount-monitor.timer</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl daemon-reload</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl enable nfs-mount-monitor.timer</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl start nfs-mount-monitor.timer</font></i>
-<i><font color="silver"># Check status</font></i>
-[root@r0 ~]<i><font color="silver"># systemctl status nfs-mount-monitor.timer</font></i>
-● nfs-mount-monitor.timer - Run NFS Mount Health Monitor every <font color="#000000">10</font> seconds
- Loaded: loaded (/etc/systemd/system/nfs-mount-monitor.timer; enabled)
- Active: active (waiting) since Sat <font color="#000000">2025</font>-<font color="#000000">07</font>-<font color="#000000">06</font> <font color="#000000">10</font>:<font color="#000000">00</font>:<font color="#000000">00</font> EEST
- Trigger: Sat <font color="#000000">2025</font>-<font color="#000000">07</font>-<font color="#000000">06</font> <font color="#000000">10</font>:<font color="#000000">00</font>:<font color="#000000">10</font> EEST; 8s left
+<i><font color="#ababab"># Check status</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl status nfs-mount-monitor.timer</font></i>
+<font color="#ff0000">● nfs-mount-monitor</font><font color="#F3E651">.</font><font color="#ff0000">timer - Run NFS Mount Health Monitor every </font><font color="#bb00ff">10</font><font color="#ff0000"> seconds</font>
+<font color="#ff0000"> Loaded</font><font color="#F3E651">:</font><font color="#ff0000"> loaded </font><font color="#F3E651">(</font><font color="#ff0000">/etc/systemd/system/nfs-mount-monitor</font><font color="#F3E651">.</font><font color="#ff0000">timer</font><font color="#F3E651">;</font><font color="#ff0000"> enabled</font><font color="#F3E651">)</font>
+<font color="#ff0000"> Active</font><font color="#F3E651">:</font><font color="#ff0000"> active </font><font color="#F3E651">(</font><font color="#ff0000">waiting</font><font color="#F3E651">)</font><font color="#ff0000"> since Sat </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">07</font><font color="#ff0000">-</font><font color="#bb00ff">06</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#ff0000"> EEST</font>
+<font color="#ff0000"> Trigger</font><font color="#F3E651">:</font><font color="#ff0000"> Sat </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">07</font><font color="#ff0000">-</font><font color="#bb00ff">06</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">10</font><font color="#ff0000"> EEST</font><font color="#F3E651">;</font><font color="#ff0000"> 8s left</font>
-<i><font color="silver"># Monitor logs</font></i>
-[root@r0 ~]<i><font color="silver"># journalctl -u nfs-mount-monitor -f</font></i>
+<i><font color="#ababab"># Monitor logs</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># journalctl -u nfs-mount-monitor -f</font></i>
</pre>
<br />
<span>Note: Stale file handles are inherent to NFS failover because file handles are server-specific. The best approach depends on your application&#39;s tolerance for brief disruptions. Of course, all the changes made to <span class='inlinecode'>r0</span> above must also be applied to <span class='inlinecode'>r1</span> and <span class='inlinecode'>r2</span>.</span><br />
@@ -1982,30 +1987,30 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># 1. Check the initial state</font></i>
-paul@f0:~ % ifconfig re0 | grep carp
- carp: MASTER vhid <font color="#000000">1</font> advbase <font color="#000000">1</font> advskew <font color="#000000">0</font>
-paul@f1:~ % ifconfig re0 | grep carp
- carp: BACKUP vhid <font color="#000000">1</font> advbase <font color="#000000">1</font> advskew <font color="#000000">100</font>
+<pre><i><font color="#ababab"># 1. Check the initial state</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0 </font><font color="#F3E651">|</font><font color="#ff0000"> grep carp</font>
+<font color="#ff0000"> carp</font><font color="#F3E651">:</font><font color="#ff0000"> MASTER vhid </font><font color="#bb00ff">1</font><font color="#ff0000"> advbase </font><font color="#bb00ff">1</font><font color="#ff0000"> advskew </font><font color="#bb00ff">0</font>
+<font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0 </font><font color="#F3E651">|</font><font color="#ff0000"> grep carp</font>
+<font color="#ff0000"> carp</font><font color="#F3E651">:</font><font color="#ff0000"> BACKUP vhid </font><font color="#bb00ff">1</font><font color="#ff0000"> advbase </font><font color="#bb00ff">1</font><font color="#ff0000"> advskew </font><font color="#bb00ff">100</font>
-<i><font color="silver"># 2. Create a test file from a client</font></i>
-[root@r0 ~]<i><font color="silver"># echo "test before failover" &gt; /data/nfs/k3svolumes/test-before.txt</font></i>
+<i><font color="#ababab"># 2. Create a test file from a client</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># echo "test before failover" &gt; /data/nfs/k3svolumes/test-before.txt</font></i>
-<i><font color="silver"># 3. Trigger failover (f0 → f1)</font></i>
-paul@f0:~ % doas ifconfig re0 vhid <font color="#000000">1</font> state backup
+<i><font color="#ababab"># 3. Trigger failover (f0 → f1)</font></i>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas ifconfig re0 vhid </font><font color="#bb00ff">1</font><font color="#ff0000"> state backup</font>
-<i><font color="silver"># 4. Monitor client behaviour</font></i>
-[root@r0 ~]<i><font color="silver"># ls /data/nfs/k3svolumes/</font></i>
-ls: cannot access <font color="#808080">'/data/nfs/k3svolumes/'</font>: Stale file handle
+<i><font color="#ababab"># 4. Monitor client behaviour</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># ls /data/nfs/k3svolumes/</font></i>
+<font color="#ff0000">ls</font><font color="#F3E651">:</font><font color="#ff0000"> cannot access </font><font color="#bb00ff">'/data/nfs/k3svolumes/'</font><font color="#F3E651">:</font><font color="#ff0000"> Stale file handle</font>
-<i><font color="silver"># 5. Check automatic recovery (within 10 seconds)</font></i>
-[root@r0 ~]<i><font color="silver"># journalctl -u nfs-mount-monitor -f</font></i>
-Jul <font color="#000000">06</font> <font color="#000000">10</font>:<font color="#000000">15</font>:<font color="#000000">32</font> r0 nfs-monitor[<font color="#000000">1234</font>]: NFS mount unhealthy detected at \
- Sun Jul <font color="#000000">6</font> <font color="#000000">10</font>:<font color="#000000">15</font>:<font color="#000000">32</font> EEST <font color="#000000">2025</font>
-Jul <font color="#000000">06</font> <font color="#000000">10</font>:<font color="#000000">15</font>:<font color="#000000">32</font> r0 nfs-monitor[<font color="#000000">1234</font>]: Attempting to fix stale NFS mount at \
- Sun Jul <font color="#000000">6</font> <font color="#000000">10</font>:<font color="#000000">15</font>:<font color="#000000">32</font> EEST <font color="#000000">2025</font>
-Jul <font color="#000000">06</font> <font color="#000000">10</font>:<font color="#000000">15</font>:<font color="#000000">33</font> r0 nfs-monitor[<font color="#000000">1234</font>]: NFS mount fixed at \
- Sun Jul <font color="#000000">6</font> <font color="#000000">10</font>:<font color="#000000">15</font>:<font color="#000000">33</font> EEST <font color="#000000">2025</font>
+<i><font color="#ababab"># 5. Check automatic recovery (within 10 seconds)</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># journalctl -u nfs-mount-monitor -f</font></i>
+<font color="#ff0000">Jul </font><font color="#bb00ff">06</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">32</font><font color="#ff0000"> r0 nfs-monitor</font><font color="#F3E651">[</font><font color="#bb00ff">1234</font><font color="#F3E651">]:</font><font color="#ff0000"> NFS mount unhealthy detected at </font><font color="#F3E651">\</font>
+<font color="#ff0000"> Sun Jul </font><font color="#bb00ff">6</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">32</font><font color="#ff0000"> EEST </font><font color="#bb00ff">2025</font>
+<font color="#ff0000">Jul </font><font color="#bb00ff">06</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">32</font><font color="#ff0000"> r0 nfs-monitor</font><font color="#F3E651">[</font><font color="#bb00ff">1234</font><font color="#F3E651">]:</font><font color="#ff0000"> Attempting to fix stale NFS mount at </font><font color="#F3E651">\</font>
+<font color="#ff0000"> Sun Jul </font><font color="#bb00ff">6</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">32</font><font color="#ff0000"> EEST </font><font color="#bb00ff">2025</font>
+<font color="#ff0000">Jul </font><font color="#bb00ff">06</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">33</font><font color="#ff0000"> r0 nfs-monitor</font><font color="#F3E651">[</font><font color="#bb00ff">1234</font><font color="#F3E651">]:</font><font color="#ff0000"> NFS mount fixed at </font><font color="#F3E651">\</font>
+<font color="#ff0000"> Sun Jul </font><font color="#bb00ff">6</font><font color="#ff0000"> </font><font color="#bb00ff">10</font><font color="#F3E651">:</font><font color="#bb00ff">15</font><font color="#F3E651">:</font><font color="#bb00ff">33</font><font color="#ff0000"> EEST </font><font color="#bb00ff">2025</font>
</pre>
<br />
<span>Failover Timeline:</span><br />
@@ -2063,7 +2068,7 @@ Jul <font color="#000000">06</font> <font color="#000000">10</font>:<font color=
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zpool online -e /dev/ada<font color="#000000">1</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zpool online -e /dev/ada</font><font color="#bb00ff">1</font>
</pre>
<br />
<ul>
@@ -2076,15 +2081,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas zpool list
-NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
-zdata <font color="#000000">3</font>.63T 677G <font color="#000000">2</font>.97T - - <font color="#000000">3</font>% <font color="#000000">18</font>% <font color="#000000">1</font>.00x ONLINE -
-zroot 472G <font color="#000000">68</font>.4G 404G - - <font color="#000000">13</font>% <font color="#000000">14</font>% <font color="#000000">1</font>.00x ONLINE -
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas zpool list</font>
+<font color="#ff0000">NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT</font>
+<font color="#ff0000">zdata </font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">63T 677G </font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">97T - - </font><font color="#bb00ff">3</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">18</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
+<font color="#ff0000">zroot 472G </font><font color="#bb00ff">68</font><font color="#F3E651">.</font><font color="#ff0000">4G 404G - - </font><font color="#bb00ff">13</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">14</font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">00x ONLINE -</font>
-paul@f0:~ % doas camcontrol devlist
-&lt;512GB SSD D910R170&gt; at scbus0 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass0,ada0)
-&lt;SD Ultra 3D 4TB 530500WD&gt; at scbus1 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass1,ada1)
-&lt;Generic Flash Disk <font color="#000000">8.07</font>&gt; at scbus2 target <font color="#000000">0</font> lun <font color="#000000">0</font> (da0,pass2)
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas camcontrol devlist</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">512GB SSD D910R170</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus0 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass0</font><font color="#F3E651">,</font><font color="#ff0000">ada0</font><font color="#F3E651">)</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">SD Ultra 3D 4TB 530500WD</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus1 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass1</font><font color="#F3E651">,</font><font color="#ff0000">ada1</font><font color="#F3E651">)</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">Generic Flash Disk </font><font color="#bb00ff">8.07</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus2 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">da0</font><font color="#F3E651">,</font><font color="#ff0000">pass2</font><font color="#F3E651">)</font>
</pre>
<br />
<span>We&#39;re still using different SSD models on f1 (WD Blue SA510 4TB) to avoid simultaneous failures:</span><br />
@@ -2093,10 +2098,10 @@ paul@f0:~ % doas camcontrol devlist
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f1:~ % doas camcontrol devlist
-&lt;512GB SSD D910R170&gt; at scbus0 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass0,ada0)
-&lt;WD Blue SA510 <font color="#000000">2.5</font> 4TB 530500WD&gt; at scbus1 target <font color="#000000">0</font> lun <font color="#000000">0</font> (pass1,ada1)
-&lt;Generic Flash Disk <font color="#000000">8.07</font>&gt; at scbus2 target <font color="#000000">0</font> lun <font color="#000000">0</font> (da0,pass2)
+<pre><font color="#ff0000">paul@f1</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas camcontrol devlist</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">512GB SSD D910R170</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus0 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass0</font><font color="#F3E651">,</font><font color="#ff0000">ada0</font><font color="#F3E651">)</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">WD Blue SA510 </font><font color="#bb00ff">2.5</font><font color="#ff0000"> 4TB 530500WD</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus1 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">pass1</font><font color="#F3E651">,</font><font color="#ff0000">ada1</font><font color="#F3E651">)</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">Generic Flash Disk </font><font color="#bb00ff">8.07</font><font color="#F3E651">&gt;</font><font color="#ff0000"> at scbus2 target </font><font color="#bb00ff">0</font><font color="#ff0000"> lun </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">da0</font><font color="#F3E651">,</font><font color="#ff0000">pass2</font><font color="#F3E651">)</font>
</pre>
<br />
<h2 style='display: inline' id='conclusion'>Conclusion</h2><br />
@@ -2165,11 +2170,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-08-05-local-coding-llm-with-ollama.html b/gemfeed/2025-08-05-local-coding-llm-with-ollama.html
index f2a9d99d..fab22a5e 100644
--- a/gemfeed/2025-08-05-local-coding-llm-with-ollama.html
+++ b/gemfeed/2025-08-05-local-coding-llm-with-ollama.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Local LLM for Coding with Ollama on macOS</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-08-05-local-coding-llm-with-ollama.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-08-05-local-coding-llm-with-ollama.gmi">Gemini</a>
</p>
@@ -105,9 +110,9 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>brew install ollama
-rehash
-ollama serve
+<pre><font color="#ff0000">brew install ollama</font>
+<font color="#ff0000">rehash</font>
+<font color="#ff0000">ollama serve</font>
</pre>
<br />
<span>Which started up the Ollama server with something like this (the screenshots shows already some requests made):</span><br />
@@ -120,7 +125,7 @@ ollama serve
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>ollama pull qwen2.<font color="#000000">5</font>-coder:14b-instruct
+<pre><font color="#ff0000">ollama pull qwen2</font><font color="#F3E651">.</font><font color="#bb00ff">5</font><font color="#ff0000">-coder</font><font color="#F3E651">:</font><font color="#ff0000">14b-instruct</font>
</pre>
<br />
<span>Now, I was ready to go! It wasn&#39;t so difficult. Now, let&#39;s see how I used this model for coding tasks.</span><br />
@@ -133,27 +138,27 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>time echo <font color="#808080">"Write a function in golang to print out the Nth fibonacci number, \</font>
-<font color="#808080"> only the function without the boilerplate"</font> | ollama run qwen2.<font color="#000000">5</font>-coder:14b-instruct
-
-Output:
-
-func fibonacci(n int) int {
- <b><u><font color="#000000">if</font></u></b> n &lt;= <font color="#000000">1</font> {
- <b><u><font color="#000000">return</font></u></b> n
- }
- a, b := <font color="#000000">0</font>, <font color="#000000">1</font>
- <b><u><font color="#000000">for</font></u></b> i := <font color="#000000">2</font>; i &lt;= n; i++ {
- a, b = b, a+b
- }
- <b><u><font color="#000000">return</font></u></b> b
-}
-
-Execution Metrics:
-
-Executed <b><u><font color="#000000">in</font></u></b> <font color="#000000">4.90</font> secs fish external
- usr time <font color="#000000">15.54</font> millis <font color="#000000">0.31</font> millis <font color="#000000">15.24</font> millis
- sys time <font color="#000000">19.68</font> millis <font color="#000000">1.02</font> millis <font color="#000000">18.66</font> millis
+<pre><font color="#ff0000">time echo </font><font color="#bb00ff">"Write a function in golang to print out the Nth fibonacci number, \</font>
+<font color="#bb00ff"> only the function without the boilerplate"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> ollama run qwen2</font><font color="#F3E651">.</font><font color="#bb00ff">5</font><font color="#ff0000">-coder</font><font color="#F3E651">:</font><font color="#ff0000">14b-instruct</font>
+
+<font color="#ff0000">Output</font><font color="#F3E651">:</font>
+
+<font color="#ff0000">func fibonacci</font><font color="#F3E651">(</font><font color="#ff0000">n int</font><font color="#F3E651">)</font><font color="#ff0000"> int {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> n </font><font color="#F3E651">&lt;=</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> n</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651">&lt;=</font><font color="#ff0000"> n</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> a</font><font color="#F3E651">,</font><font color="#ff0000"> b </font><font color="#F3E651">=</font><font color="#ff0000"> b</font><font color="#F3E651">,</font><font color="#ff0000"> a</font><font color="#F3E651">+</font><font color="#ff0000">b</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> b</font>
+<font color="#ff0000">}</font>
+
+<font color="#ff0000">Execution Metrics</font><font color="#F3E651">:</font>
+
+<font color="#ff0000">Executed </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#bb00ff">4.90</font><font color="#ff0000"> secs fish external</font>
+<font color="#ff0000"> usr time </font><font color="#bb00ff">15.54</font><font color="#ff0000"> millis </font><font color="#bb00ff">0.31</font><font color="#ff0000"> millis </font><font color="#bb00ff">15.24</font><font color="#ff0000"> millis</font>
+<font color="#ff0000"> sys time </font><font color="#bb00ff">19.68</font><font color="#ff0000"> millis </font><font color="#bb00ff">1.02</font><font color="#ff0000"> millis </font><font color="#bb00ff">18.66</font><font color="#ff0000"> millis</font>
</pre>
<br />
<span class='quote'>Note, after having written this blog post, I tried the same with the newer model <span class='inlinecode'>qwen3-coder:30b-a3b-q4_K_M</span> (which "just" came out, and it&#39;s a quantised 30B model), and it was much faster:</span><br />
@@ -178,9 +183,9 @@ Executed in 1.83 secs fish external
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>brew install aider
-mkdir -p ~/git/aitest &amp;&amp; cd ~/git/aitest &amp;&amp; git init
-aider --model ollama_chat/qwen<font color="#000000">2.5</font>-coder:14b-instruct
+<pre><font color="#ff0000">brew install aider</font>
+<font color="#ff0000">mkdir -p </font><font color="#F3E651">~</font><font color="#ff0000">/git/aitest </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> cd </font><font color="#F3E651">~</font><font color="#ff0000">/git/aitest </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> git init</font>
+<font color="#ff0000">aider --model ollama_chat/qwen</font><font color="#bb00ff">2.5</font><font color="#ff0000">-coder</font><font color="#F3E651">:</font><font color="#ff0000">14b-instruct</font>
</pre>
<br />
<a class='textlink' href='https://aider.chat'>https://aider.chat</a><br />
@@ -223,11 +228,11 @@ Create a Go project with these files:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>go build cmd/aitest/main.go
-./main -v
-<font color="#000000">0.0</font>.<font color="#000000">0</font>
-./main -dir .
-Number of files <b><u><font color="#000000">in</font></u></b> directory .: <font color="#000000">4</font>
+<pre><font color="#ff0000">go build cmd/aitest/main</font><font color="#F3E651">.</font><font color="#ff0000">go</font>
+<font color="#F3E651">.</font><font color="#ff0000">/main -v</font>
+<font color="#bb00ff">0.0</font><font color="#F3E651">.</font><font color="#bb00ff">0</font>
+<font color="#F3E651">.</font><font color="#ff0000">/main -dir </font><font color="#F3E651">.</font>
+<font color="#ff0000">Number of files </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> directory </font><font color="#F3E651">.:</font><font color="#ff0000"> </font><font color="#bb00ff">4</font>
</pre>
<br />
<h3 style='display: inline' id='the-code'>The code</h3><br />
@@ -238,38 +243,38 @@ Number of files <b><u><font color="#000000">in</font></u></b> directory .: <font
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> main
-
-<b><u><font color="#000000">import</font></u></b> (
- <font color="#808080">"flag"</font>
- <font color="#808080">"fmt"</font>
- <font color="#808080">"os"</font>
-
- <font color="#808080">"aitest/internal"</font>
-)
-
-<b><u><font color="#000000">func</font></u></b> main() {
- <b><u><font color="#000000">var</font></u></b> versionFlag <b><font color="#000000">bool</font></b>
- flag.BoolVar(&amp;versionFlag, <font color="#808080">"v"</font>, false, <font color="#808080">"print version"</font>)
- dir := flag.String(<font color="#808080">"dir"</font>, <font color="#808080">""</font>, <font color="#808080">"directory to count files in"</font>)
- flag.Parse()
-
- <b><u><font color="#000000">if</font></u></b> versionFlag {
- fmt.Println(internal.GetVersion())
- <b><u><font color="#000000">return</font></u></b>
- }
-
- <b><u><font color="#000000">if</font></u></b> *dir != <font color="#808080">""</font> {
- fileCount, err := internal.CountFiles(*dir)
- <b><u><font color="#000000">if</font></u></b> err != nil {
- fmt.Fprintf(os.Stderr, <font color="#808080">"Error counting files: %v\n"</font>, err)
- os.Exit(<font color="#000000">1</font>)
- }
- fmt.Printf(<font color="#808080">"Number of files in directory %s: %d\n"</font>, *dir, fileCount)
- } <b><u><font color="#000000">else</font></u></b> {
- fmt.Println(<font color="#808080">"No directory specified. No count given."</font>)
- }
-}
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> main</font>
+
+<b><font color="#ffffff">import</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"flag"</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"fmt"</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"os"</font>
+
+<font color="#ff0000"> </font><font color="#bb00ff">"aitest/internal"</font>
+<font color="#F3E651">)</font>
+
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">var</font></b><font color="#ff0000"> versionFlag </font><b><font color="#F35E1E">bool</font></b>
+<font color="#ff0000"> flag</font><font color="#F3E651">.</font><font color="#7bc710">BoolVar</font><font color="#F3E651">(&amp;</font><font color="#ff0000">versionFlag</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">"v"</font><font color="#F3E651">,</font><font color="#ff0000"> false</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">"print version"</font><font color="#F3E651">)</font>
+<font color="#ff0000"> dir </font><font color="#F3E651">:=</font><font color="#ff0000"> flag</font><font color="#F3E651">.</font><font color="#7bc710">String</font><font color="#F3E651">(</font><font color="#bb00ff">"dir"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">""</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">"directory to count files in"</font><font color="#F3E651">)</font>
+<font color="#ff0000"> flag</font><font color="#F3E651">.</font><font color="#7bc710">Parse</font><font color="#F3E651">()</font>
+
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> versionFlag </font><font color="#F3E651">{</font>
+<font color="#ff0000"> fmt</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#ff0000">internal</font><font color="#F3E651">.</font><font color="#7bc710">GetVersion</font><font color="#F3E651">())</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">dir </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#bb00ff">""</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> fileCount</font><font color="#F3E651">,</font><font color="#ff0000"> err </font><font color="#F3E651">:=</font><font color="#ff0000"> internal</font><font color="#F3E651">.</font><font color="#7bc710">CountFiles</font><font color="#F3E651">(*</font><font color="#ff0000">dir</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> err </font><font color="#F3E651">!=</font><font color="#ff0000"> nil </font><font color="#F3E651">{</font>
+<font color="#ff0000"> fmt</font><font color="#F3E651">.</font><font color="#7bc710">Fprintf</font><font color="#F3E651">(</font><font color="#ff0000">os</font><font color="#F3E651">.</font><font color="#ff0000">Stderr</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">"Error counting files: %v\n"</font><font color="#F3E651">,</font><font color="#ff0000"> err</font><font color="#F3E651">)</font>
+<font color="#ff0000"> os</font><font color="#F3E651">.</font><font color="#7bc710">Exit</font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> fmt</font><font color="#F3E651">.</font><font color="#7bc710">Printf</font><font color="#F3E651">(</font><font color="#bb00ff">"Number of files in directory %s: %d\n"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">dir</font><font color="#F3E651">,</font><font color="#ff0000"> fileCount</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> </font><b><font color="#ffffff">else</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> fmt</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#bb00ff">"No directory specified. No count given."</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>The <span class='inlinecode'>./internal/version.go</span> file:</span><br />
@@ -278,13 +283,13 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> internal
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> internal</font>
-<b><u><font color="#000000">var</font></u></b> Version = <font color="#808080">"0.0.0"</font>
+<b><font color="#ffffff">var</font></b><font color="#ff0000"> Version </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"0.0.0"</font>
-<b><u><font color="#000000">func</font></u></b> GetVersion() <b><font color="#000000">string</font></b> {
- <b><u><font color="#000000">return</font></u></b> Version
-}
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">GetVersion</font><font color="#F3E651">()</font><font color="#ff0000"> </font><b><font color="#F35E1E">string</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> Version</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>The <span class='inlinecode'>./internal/count.go</span> file:</span><br />
@@ -293,27 +298,27 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> internal
-
-<b><u><font color="#000000">import</font></u></b> (
- <font color="#808080">"os"</font>
-)
-
-<b><u><font color="#000000">func</font></u></b> CountFiles(dir <b><font color="#000000">string</font></b>) (int, error) {
- files, err := os.ReadDir(dir)
- <b><u><font color="#000000">if</font></u></b> err != nil {
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">0</font>, err
- }
-
- count := <font color="#000000">0</font>
- <b><u><font color="#000000">for</font></u></b> _, file := <b><u><font color="#000000">range</font></u></b> files {
- <b><u><font color="#000000">if</font></u></b> !file.IsDir() {
- count++
- }
- }
-
- <b><u><font color="#000000">return</font></u></b> count, nil
-}
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> internal</font>
+
+<b><font color="#ffffff">import</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"os"</font>
+<font color="#F3E651">)</font>
+
+<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">CountFiles</font><font color="#F3E651">(</font><font color="#ff0000">dir </font><b><font color="#F35E1E">string</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">int</font><font color="#F3E651">,</font><font color="#ff0000"> error</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> files</font><font color="#F3E651">,</font><font color="#ff0000"> err </font><font color="#F3E651">:=</font><font color="#ff0000"> os</font><font color="#F3E651">.</font><font color="#7bc710">ReadDir</font><font color="#F3E651">(</font><font color="#ff0000">dir</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> err </font><font color="#F3E651">!=</font><font color="#ff0000"> nil </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> err</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+
+<font color="#ff0000"> count </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> _</font><font color="#F3E651">,</font><font color="#ff0000"> file </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><b><font color="#ffffff">range</font></b><font color="#ff0000"> files </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000">file</font><font color="#F3E651">.</font><font color="#7bc710">IsDir</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> count</font><font color="#F3E651">++</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> count</font><font color="#F3E651">,</font><font color="#ff0000"> nil</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>The code is quite straightforward, especially for generating boilerplate code this will be useful for many use cases!</span><br />
@@ -333,7 +338,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>cargo install lsp-ai
+<pre><font color="#ff0000">cargo install lsp-ai</font>
</pre>
<br />
<h3 style='display: inline' id='helix-configuration'>Helix Configuration</h3><br />
@@ -471,11 +476,12 @@ content = "{CODE}"
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-08-15-random-weird-things-iii.html b/gemfeed/2025-08-15-random-weird-things-iii.html
index 748c828c..8498b924 100644
--- a/gemfeed/2025-08-15-random-weird-things-iii.html
+++ b/gemfeed/2025-08-15-random-weird-things-iii.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Random Weird Things - Part Ⅲ</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-08-15-random-weird-things-iii.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-08-15-random-weird-things-iii.gmi">Gemini</a>
</p>
@@ -129,11 +134,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-09-14-bash-golf-part-4.html b/gemfeed/2025-09-14-bash-golf-part-4.html
index 457b15d8..94c6b881 100644
--- a/gemfeed/2025-09-14-bash-golf-part-4.html
+++ b/gemfeed/2025-09-14-bash-golf-part-4.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bash Golf Part 4</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-09-14-bash-golf-part-4.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-09-14-bash-golf-part-4.gmi">Gemini</a>
</p>
@@ -70,9 +75,9 @@ somecommand \
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">printf</font></u></b> <font color="#808080">'a</font>\n<font color="#808080">b</font>\n<font color="#808080">'</font> \
- | tee &gt;(sed <font color="#808080">'s/.*/X:&amp;/; s/$/ :c1/'</font>) &gt;(tr a-z A-Z | sed <font color="#808080">'s/$/ :c2/'</font>) \
- | sed <font color="#808080">'s/$/ :c3/'</font>
+<pre><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'a</font><font color="#ffffff">\n</font><font color="#bb00ff">b</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tee </font><font color="#F3E651">&gt;(</font><font color="#ff0000">sed </font><font color="#bb00ff">'s/.*/X:&amp;/; s/$/ :c1/'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">&gt;(</font><font color="#ff0000">tr a-z A-Z </font><font color="#F3E651">|</font><font color="#ff0000"> sed </font><font color="#bb00ff">'s/$/ :c2/'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sed </font><font color="#bb00ff">'s/$/ :c3/'</font>
</pre>
<br />
<span>Output:</span><br />
@@ -94,8 +99,8 @@ X:b :c1 :c3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>/bin/sh -c <font color="#808080">'echo hi | tee &gt;(cat)'</font>
-<i><font color="silver"># /bin/sh: 1: Syntax error: "(" unexpected</font></i>
+<pre><font color="#ff0000">/bin/sh -c </font><font color="#bb00ff">'echo hi | tee &gt;(cat)'</font>
+<i><font color="#ababab"># /bin/sh: 1: Syntax error: "(" unexpected</font></i>
</pre>
<br />
<span>Combine with <span class='inlinecode'>set -o pipefail</span> if failures in side branches should fail the whole pipeline.</span><br />
@@ -106,9 +111,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">set</font></u></b> -o pipefail
-<b><u><font color="#000000">printf</font></u></b> <font color="#808080">'ok</font>\n<font color="#808080">'</font> | tee &gt;(<b><u><font color="#000000">false</font></u></b>) | cat &gt;/dev/null
-echo $? <i><font color="silver"># 1 because a side branch failed</font></i>
+<pre><b><font color="#ffffff">set</font></b><font color="#ff0000"> -o pipefail</font>
+<b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'ok</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tee </font><font color="#F3E651">&gt;(</font><b><font color="#ffffff">false</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> cat </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font>
+<font color="#ff0000">echo </font><font color="#ff0000">$?</font><font color="#ff0000"> </font><i><font color="#ababab"># 1 because a side branch failed</font></i>
</pre>
<br />
<span>Further reading:</span><br />
@@ -123,19 +128,19 @@ echo $? <i><font color="silver"># 1 because a side branch failed</font></i>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>ssh <font color="#808080">"$SSH_USER@$SSH_HOST"</font> &lt;&lt;EOF
- <i><font color="silver"># Go to the work directory</font></i>
- cd <font color="#808080">"$WORK_DIR"</font>
-
- <i><font color="silver"># Make a git pull</font></i>
- git pull
-
- <i><font color="silver"># Export environment variables required for the service to run</font></i>
- <b><u><font color="#000000">export</font></u></b> AUTH_TOKEN=<font color="#808080">"$APP_AUTH_TOKEN"</font>
-
- <i><font color="silver"># Start the service</font></i>
- docker compose up -d --build
-EOF
+<pre><font color="#ff0000">ssh </font><font color="#bb00ff">"$SSH_USER@$SSH_HOST"</font><font color="#ff0000"> </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">EOF</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Go to the work directory</font></i>
+<font color="#ff0000"> cd </font><font color="#bb00ff">"$WORK_DIR"</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Make a git pull</font></i>
+<font color="#ff0000"> git pull</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Export environment variables required for the service to run</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">AUTH_TOKEN</font><font color="#F3E651">=</font><font color="#bb00ff">"$APP_AUTH_TOKEN"</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Start the service</font></i>
+<font color="#ff0000"> docker compose up -d --build</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>Tips:</span><br />
@@ -148,10 +153,10 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>FOO=bar
-cat &lt;&lt;<font color="#808080">'EOF'</font>
-$FOO is not expanded here
-EOF
+<pre><font color="#ff0000">FOO</font><font color="#F3E651">=</font><font color="#ff0000">bar</font>
+<font color="#ff0000">cat </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000">$FOO</font><font color="#ff0000"> is not expanded here</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>Prefer explicit quoting for variables (as above) to avoid surprises. Example (spaces preserved only when quoted):</span><br />
@@ -160,11 +165,11 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>WORK_DIR=<font color="#808080">"/tmp/my work"</font>
-ssh host &lt;&lt;EOF
- cd $WORK_DIR <i><font color="silver"># may break if unquoted</font></i>
- cd <font color="#808080">"$WORK_DIR"</font> <i><font color="silver"># safe</font></i>
-EOF
+<pre><font color="#ff0000">WORK_DIR</font><font color="#F3E651">=</font><font color="#bb00ff">"/tmp/my work"</font>
+<font color="#ff0000">ssh host </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">EOF</font>
+<font color="#ff0000"> cd </font><font color="#ff0000">$WORK_DIR</font><font color="#ff0000"> </font><i><font color="#ababab"># may break if unquoted</font></i>
+<font color="#ff0000"> cd </font><font color="#bb00ff">"$WORK_DIR"</font><font color="#ff0000"> </font><i><font color="#ababab"># safe</font></i>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>Consider <span class='inlinecode'>set -euo pipefail</span> at the top of the remote block for stricter error handling. Example:</span><br />
@@ -173,11 +178,11 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>ssh host &lt;&lt;<font color="#808080">'EOF'</font>
- <b><u><font color="#000000">set</font></u></b> -euo pipefail
- <b><u><font color="#000000">false</font></u></b> <i><font color="silver"># causes immediate failure</font></i>
- echo never
-EOF
+<pre><font color="#ff0000">ssh host </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">'EOF'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> -euo pipefail</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">false</font></b><font color="#ff0000"> </font><i><font color="#ababab"># causes immediate failure</font></i>
+<font color="#ff0000"> echo never</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>Indent-friendly variant: use a dash to strip leading tabs in the body:</span><br />
@@ -186,10 +191,10 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>cat &lt;&lt;-EOF &gt; script.sh
- <i><font color="silver">#!/usr/bin/env bash</font></i>
- echo <font color="#808080">"tab-indented content is dedented"</font>
-EOF
+<pre><font color="#ff0000">cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">-EOF </font><font color="#F3E651">&gt;</font><font color="#ff0000"> script</font><font color="#F3E651">.</font><font color="#ff0000">sh</font>
+<font color="#ff0000"> </font><i><font color="#ababab">#!/usr/bin/env bash</font></i>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"tab-indented content is dedented"</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>Further reading:</span><br />
@@ -204,23 +209,23 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
-<b><u><font color="#000000">set</font></u></b> -euo pipefail
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
+<b><font color="#ffffff">set</font></b><font color="#ff0000"> -euo pipefail</font>
-super() {
- <b><u><font color="#000000">local</font></u></b> -r fn=${FUNCNAME[1]}
- <i><font color="silver"># Split name on :: and dispatch to base implementation</font></i>
- <b><u><font color="#000000">local</font></u></b> -a parts=( ${fn//::/ } )
- <font color="#808080">"${parts[0]}::base::${parts[2]}"</font> <font color="#808080">"$@"</font>
-}
+<font color="#7bc710">super()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">fn</font><font color="#F3E651">=</font><font color="#ff0000">${FUNCNAME[1]}</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Split name on :: and dispatch to base implementation</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -a </font><font color="#ff0000">parts</font><font color="#F3E651">=(</font><font color="#ff0000"> </font><font color="#ff0000">${</font><font color="#ff0000">fn</font><font color="#F3E651">//::/</font><font color="#ff0000"> } </font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"${parts[0]}::base::${parts[2]}"</font><font color="#ff0000"> </font><font color="#bb00ff">"$@"</font>
+<font color="#ff0000">}</font>
-foo::base::greet() { echo <font color="#808080">"base: $@"</font>; }
-foo::german::greet() { super <font color="#808080">"Guten Tag, $@!"</font>; }
-foo::english::greet() { super <font color="#808080">"Good day, $@!"</font>; }
+<font color="#ff0000">foo</font><font color="#F3E651">::</font><font color="#ff0000">base</font><font color="#F3E651">::</font><font color="#7bc710">greet()</font><font color="#ff0000"> { echo </font><font color="#bb00ff">"base: $@"</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
+<font color="#ff0000">foo</font><font color="#F3E651">::</font><font color="#ff0000">german</font><font color="#F3E651">::</font><font color="#7bc710">greet()</font><font color="#ff0000"> { super </font><font color="#bb00ff">"Guten Tag, $@!"</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
+<font color="#ff0000">foo</font><font color="#F3E651">::</font><font color="#ff0000">english</font><font color="#F3E651">::</font><font color="#7bc710">greet()</font><font color="#ff0000"> { super </font><font color="#bb00ff">"Good day, $@!"</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
-<b><u><font color="#000000">for</font></u></b> lang <b><u><font color="#000000">in</font></u></b> german english; <b><u><font color="#000000">do</font></u></b>
- foo::$lang::greet Paul
-<b><u><font color="#000000">done</font></u></b>
+<b><font color="#ffffff">for</font></b><font color="#ff0000"> lang </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> german english</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> foo</font><font color="#F3E651">::</font><font color="#ff0000">$lang</font><font color="#F3E651">::</font><font color="#ff0000">greet Paul</font>
+<b><font color="#ffffff">done</font></b>
</pre>
<br />
<span>Output:</span><br />
@@ -238,11 +243,11 @@ base: Good day, Paul!
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>user_name=paul
-<b><u><font color="#000000">declare</font></u></b> -n ref=user_name
-echo <font color="#808080">"$ref"</font> <i><font color="silver"># paul</font></i>
-ref=julia
-echo <font color="#808080">"$user_name"</font> <i><font color="silver"># julia</font></i>
+<pre><font color="#ff0000">user_name</font><font color="#F3E651">=</font><font color="#ff0000">paul</font>
+<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -n </font><font color="#ff0000">ref</font><font color="#F3E651">=</font><font color="#ff0000">user_name</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"$ref"</font><font color="#ff0000"> </font><i><font color="#ababab"># paul</font></i>
+<font color="#ff0000">ref</font><font color="#F3E651">=</font><font color="#ff0000">julia</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"$user_name"</font><font color="#ff0000"> </font><i><font color="#ababab"># julia</font></i>
</pre>
<br />
<span>Output:</span><br />
@@ -260,20 +265,20 @@ julia
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>make_var() {
- <b><u><font color="#000000">local</font></u></b> idx=$1; <b><u><font color="#000000">shift</font></u></b>
- <b><u><font color="#000000">local</font></u></b> name=<font color="#808080">"slot_$idx"</font>
- <b><u><font color="#000000">printf</font></u></b> -v <font color="#808080">"$name"</font> <font color="#808080">'%s'</font> <font color="#808080">"$*"</font> <i><font color="silver"># create variable slot_$idx</font></i>
-}
+<pre><font color="#7bc710">make_var()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">idx</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">name</font><font color="#F3E651">=</font><font color="#bb00ff">"slot_$idx"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> -v </font><font color="#bb00ff">"$name"</font><font color="#ff0000"> </font><font color="#bb00ff">'%s'</font><font color="#ff0000"> </font><font color="#bb00ff">"$*"</font><font color="#ff0000"> </font><i><font color="#ababab"># create variable slot_$idx</font></i>
+<font color="#ff0000">}</font>
-get_var() {
- <b><u><font color="#000000">local</font></u></b> idx=$1
- <b><u><font color="#000000">local</font></u></b> -n ref=<font color="#808080">"slot_$idx"</font> <i><font color="silver"># bind ref to slot_$idx</font></i>
- <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s</font>\n<font color="#808080">'</font> <font color="#808080">"$ref"</font>
-}
+<font color="#7bc710">get_var()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">idx</font><font color="#F3E651">=</font><font color="#ff0000">$1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -n </font><font color="#ff0000">ref</font><font color="#F3E651">=</font><font color="#bb00ff">"slot_$idx"</font><font color="#ff0000"> </font><i><font color="#ababab"># bind ref to slot_$idx</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#bb00ff">"$ref"</font>
+<font color="#ff0000">}</font>
-make_var <font color="#000000">7</font> <font color="#808080">"seven"</font>
-get_var <font color="#000000">7</font>
+<font color="#ff0000">make_var </font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#bb00ff">"seven"</font>
+<font color="#ff0000">get_var </font><font color="#bb00ff">7</font>
</pre>
<br />
<span>Output:</span><br />
@@ -290,9 +295,9 @@ seven
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>foo() { echo foo; }
-function foo { echo foo; }
-function foo() { echo foo; }
+<pre><font color="#7bc710">foo()</font><font color="#ff0000"> { echo foo</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
+<font color="#7bc710">function foo </font><font color="#ff0000">{ echo foo</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
+<font color="#7bc710">function foo()</font><font color="#ff0000"> { echo foo</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
</pre>
<br />
<span>Recommendation: prefer <span class='inlinecode'>name() { ... }</span> for portability and consistency.</span><br />
@@ -305,14 +310,14 @@ function foo() { echo foo; }
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>deploy_check() { <b><u><font color="#000000">test</font></u></b> -f deploy.yaml; }
-smoke_test() { curl -fsS http://localhost/healthz &gt;/dev/null; }
+<pre><font color="#7bc710">deploy_check()</font><font color="#ff0000"> { </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> -f deploy</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
+<font color="#7bc710">smoke_test()</font><font color="#ff0000"> { curl -fsS http</font><font color="#F3E651">:</font><font color="#ff0000">//localhost/healthz </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
-<b><u><font color="#000000">if</font></u></b> deploy_check || smoke_test; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"All good."</font>
-<b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Something failed."</font> &gt;&amp;<font color="#000000">2</font>
-<b><u><font color="#000000">fi</font></u></b>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> deploy_check </font><font color="#F3E651">||</font><font color="#ff0000"> smoke_test</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"All good."</font>
+<b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Something failed."</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>You can also compress it golf-style:</span><br />
@@ -321,7 +326,7 @@ smoke_test() { curl -fsS http://localhost/healthz &gt;/dev/null; }
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>deploy_check || smoke_test &amp;&amp; echo ok || echo fail &gt;&amp;<font color="#000000">2</font>
+<pre><font color="#ff0000">deploy_check </font><font color="#F3E651">||</font><font color="#ff0000"> smoke_test </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo ok </font><font color="#F3E651">||</font><font color="#ff0000"> echo fail </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
</pre>
<br />
<h2 style='display: inline' id='grep-sed-awk-quickies'>Grep, sed, awk quickies</h2><br />
@@ -332,14 +337,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>cat &gt; /tmp/ctx.txt &lt;&lt;EOF
-one
-foo
-two
-three
-bar
-EOF
-grep -C<font color="#000000">1</font> foo /tmp/ctx.txt
+<pre><font color="#ff0000">cat </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/ctx</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">EOF</font>
+<font color="#ff0000">one</font>
+<font color="#ff0000">foo</font>
+<font color="#ff0000">two</font>
+<font color="#ff0000">three</font>
+<font color="#ff0000">bar</font>
+<font color="#ff0000">EOF</font>
+<font color="#ff0000">grep -C</font><font color="#bb00ff">1</font><font color="#ff0000"> foo /tmp/ctx</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
</pre>
<br />
<span>Output:</span><br />
@@ -356,10 +361,10 @@ two
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>mkdir -p /tmp/golf/foo /tmp/golf/src
-<b><u><font color="#000000">printf</font></u></b> <font color="#808080">'bar</font>\n<font color="#808080">'</font> &gt; /tmp/golf/src/a.txt
-<b><u><font color="#000000">printf</font></u></b> <font color="#808080">'bar</font>\n<font color="#808080">'</font> &gt; /tmp/golf/foo/skip.txt
-grep -R --exclude-dir=foo <font color="#808080">'bar'</font> /tmp/golf
+<pre><font color="#ff0000">mkdir -p /tmp/golf/foo /tmp/golf/src</font>
+<b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'bar</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/golf/src/a</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'bar</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/golf/foo/skip</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000">grep -R --exclude-dir</font><font color="#F3E651">=</font><font color="#ff0000">foo </font><font color="#bb00ff">'bar'</font><font color="#ff0000"> /tmp/golf</font>
</pre>
<br />
<span>Output:</span><br />
@@ -374,8 +379,8 @@ grep -R --exclude-dir=foo <font color="#808080">'bar'</font> /tmp/golf
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">printf</font></u></b> <font color="#808080">'A</font>\n<font color="#808080">B</font>\n<font color="#808080">C</font>\n<font color="#808080">'</font> &gt; /tmp/s.txt
-sed -e <font color="#808080">'1iHEAD'</font> -e <font color="#808080">'3iMID'</font> /tmp/s.txt
+<pre><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'A</font><font color="#ffffff">\n</font><font color="#bb00ff">B</font><font color="#ffffff">\n</font><font color="#bb00ff">C</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/s</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000">sed -e </font><font color="#bb00ff">'1iHEAD'</font><font color="#ff0000"> -e </font><font color="#bb00ff">'3iMID'</font><font color="#ff0000"> /tmp/s</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
</pre>
<br />
<span>Output:</span><br />
@@ -394,10 +399,10 @@ C
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">printf</font></u></b> <font color="#808080">'a b c</font>\n<font color="#808080">x y z</font>\n<font color="#808080">'</font> &gt; /tmp/t.txt
-cat /tmp/t.txt
-echo
-awk <font color="#808080">'NF{NF-=1};1'</font> /tmp/t.txt
+<pre><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'a b c</font><font color="#ffffff">\n</font><font color="#bb00ff">x y z</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/t</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000">cat /tmp/t</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000">echo</font>
+<font color="#ff0000">awk </font><font color="#bb00ff">'NF{NF-=1};1'</font><font color="#ff0000"> /tmp/t</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
</pre>
<br />
<span>Output:</span><br />
@@ -418,7 +423,7 @@ x y
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>find . -type f -name <font color="#808080">'*.log'</font> -print<font color="#000000">0</font> | xargs -<font color="#000000">0</font> rm -f
+<pre><font color="#ff0000">find </font><font color="#F3E651">.</font><font color="#ff0000"> -type f -name </font><font color="#bb00ff">'*.log'</font><font color="#ff0000"> -print</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -</font><font color="#bb00ff">0</font><font color="#ff0000"> rm -f</font>
</pre>
<br />
<span>Example with spaces and NULs only:</span><br />
@@ -427,7 +432,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">printf</font></u></b> <font color="#808080">'a</font>\0<font color="#808080">b c</font>\0<font color="#808080">'</font> | xargs -<font color="#000000">0</font> -I{} <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'&lt;%s&gt;</font>\n<font color="#808080">'</font> {}
+<pre><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'a</font><font color="#ffffff">\0</font><font color="#bb00ff">b c</font><font color="#ffffff">\0</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -</font><font color="#bb00ff">0</font><font color="#ff0000"> -I{} </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'&lt;%s&gt;</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> {}</font>
</pre>
<br />
<span>Output:</span><br />
@@ -445,7 +450,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>cfg=$(&lt;config.ini)
+<pre><font color="#ff0000">cfg</font><font color="#F3E651">=</font><font color="#ff0000">$(&lt;config.ini)</font>
</pre>
<br />
<span>Read lines into an array safely with <span class='inlinecode'>mapfile</span> (aka <span class='inlinecode'>readarray</span>):</span><br />
@@ -454,8 +459,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>mapfile -t lines &lt; &lt;(grep -v <font color="#808080">'^#'</font> config.ini)
-<b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s</font>\n<font color="#808080">'</font> <font color="#808080">"${lines[@]}"</font>
+<pre><font color="#ff0000">mapfile -t lines </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#F3E651">&lt;(</font><font color="#ff0000">grep -v </font><font color="#bb00ff">'^#'</font><font color="#ff0000"> config</font><font color="#F3E651">.</font><font color="#ff0000">ini</font><font color="#F3E651">)</font>
+<b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#bb00ff">"${lines[@]}"</font>
</pre>
<br />
<span>Assign formatted strings without a subshell using <span class='inlinecode'>printf -v</span>:</span><br />
@@ -464,8 +469,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">printf</font></u></b> -v msg <font color="#808080">'Hello %s, id=%04d'</font> <font color="#808080">"$USER"</font> <font color="#000000">42</font>
-echo <font color="#808080">"$msg"</font>
+<pre><b><font color="#ffffff">printf</font></b><font color="#ff0000"> -v msg </font><font color="#bb00ff">'Hello %s, id=%04d'</font><font color="#ff0000"> </font><font color="#bb00ff">"$USER"</font><font color="#ff0000"> </font><font color="#bb00ff">42</font>
+<font color="#ff0000">echo </font><font color="#bb00ff">"$msg"</font>
</pre>
<br />
<span>Output:</span><br />
@@ -480,8 +485,8 @@ Hello paul, id=0042
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>mapfile -d <font color="#808080">''</font> -t files &lt; &lt;(find . -type f -print<font color="#000000">0</font>)
-<b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s</font>\n<font color="#808080">'</font> <font color="#808080">"${files[@]}"</font>
+<pre><font color="#ff0000">mapfile -d </font><font color="#bb00ff">''</font><font color="#ff0000"> -t files </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#F3E651">&lt;(</font><font color="#ff0000">find </font><font color="#F3E651">.</font><font color="#ff0000"> -type f -print</font><font color="#bb00ff">0</font><font color="#F3E651">)</font>
+<b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#bb00ff">"${files[@]}"</font>
</pre>
<br />
<h2 style='display: inline' id='quick-password-generator'>Quick password generator</h2><br />
@@ -492,7 +497,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>LC_ALL=C tr -dc <font color="#808080">'A-Za-z0-9_'</font> &lt;/dev/urandom | head -c <font color="#000000">16</font>; echo
+<pre><font color="#ff0000">LC_ALL</font><font color="#F3E651">=</font><font color="#ff0000">C tr -dc </font><font color="#bb00ff">'A-Za-z0-9_'</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">/dev/urandom </font><font color="#F3E651">|</font><font color="#ff0000"> head -c </font><font color="#bb00ff">16</font><font color="#F3E651">;</font><font color="#ff0000"> echo</font>
</pre>
<br />
<span>Alternative using <span class='inlinecode'>openssl</span>:</span><br />
@@ -501,7 +506,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>openssl rand -base<font color="#000000">64</font> <font color="#000000">16</font> | tr -d <font color="#808080">'</font>\n<font color="#808080">'</font> | cut -c<font color="#000000">1</font>-<font color="#000000">22</font>
+<pre><font color="#ff0000">openssl rand -base</font><font color="#bb00ff">64</font><font color="#ff0000"> </font><font color="#bb00ff">16</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tr -d </font><font color="#bb00ff">'</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> cut -c</font><font color="#bb00ff">1</font><font color="#ff0000">-</font><font color="#bb00ff">22</font>
</pre>
<br />
<h2 style='display: inline' id='yes-for-automation'><span class='inlinecode'>yes</span> for automation</h2><br />
@@ -512,9 +517,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>yes | rm -r large_directory <i><font color="silver"># auto-confirm</font></i>
-yes n | dangerous-command <i><font color="silver"># auto-decline</font></i>
-yes anything | head -n<font color="#000000">1</font> <i><font color="silver"># prints one line: anything</font></i>
+<pre><font color="#ff0000">yes </font><font color="#F3E651">|</font><font color="#ff0000"> rm -r large_directory </font><i><font color="#ababab"># auto-confirm</font></i>
+<font color="#ff0000">yes n </font><font color="#F3E651">|</font><font color="#ff0000"> dangerous-command </font><i><font color="#ababab"># auto-decline</font></i>
+<font color="#ff0000">yes anything </font><font color="#F3E651">|</font><font color="#ff0000"> head -n</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><i><font color="#ababab"># prints one line: anything</font></i>
</pre>
<br />
<h2 style='display: inline' id='forcing-true-to-fail-and-vice-versa'>Forcing <span class='inlinecode'>true</span> to fail (and vice versa)</h2><br />
@@ -525,15 +530,15 @@ yes anything | head -n<font color="#000000">1</font> <i><font color="
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>true() { <b><u><font color="#000000">return</font></u></b> <font color="#000000">1</font>; }
-false() { <b><u><font color="#000000">return</font></u></b> <font color="#000000">0</font>; }
+<pre><font color="#7bc710">true()</font><font color="#ff0000"> { </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
+<font color="#7bc710">false()</font><font color="#ff0000"> { </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> }</font>
-<b><u><font color="#000000">true</font></u></b> || echo <font color="#808080">'true failed'</font>
-<b><u><font color="#000000">false</font></u></b> &amp;&amp; echo <font color="#808080">'false succeeded'</font>
+<b><font color="#ffffff">true</font></b><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> echo </font><font color="#bb00ff">'true failed'</font>
+<b><font color="#ffffff">false</font></b><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo </font><font color="#bb00ff">'false succeeded'</font>
-<i><font color="silver"># Bypass function with builtin/command</font></i>
-<b><u><font color="#000000">builtin</font></u></b> <b><u><font color="#000000">true</font></u></b> <i><font color="silver"># returns 0</font></i>
-<b><u><font color="#000000">command</font></u></b> <b><u><font color="#000000">true</font></u></b> <i><font color="silver"># returns 0</font></i>
+<i><font color="#ababab"># Bypass function with builtin/command</font></i>
+<b><font color="#ffffff">builtin</font></b><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b><font color="#ff0000"> </font><i><font color="#ababab"># returns 0</font></i>
+<b><font color="#ffffff">command</font></b><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b><font color="#ff0000"> </font><i><font color="#ababab"># returns 0</font></i>
</pre>
<br />
<span>To disable a builtin entirely: <span class='inlinecode'>enable -n true</span> (re-enable with <span class='inlinecode'>enable true</span>).</span><br />
@@ -561,11 +566,11 @@ false() { <b><u><font color="#000000">return</font></u></b> <font color="#000000
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>rbash -c <font color="#808080">'cd /'</font> <i><font color="silver"># cd: restricted</font></i>
-rbash -c <font color="#808080">'PATH=/tmp'</font> <i><font color="silver"># PATH: restricted</font></i>
-rbash -c <font color="#808080">'echo hi &gt; out'</font> <i><font color="silver"># redirection: restricted</font></i>
-rbash -c <font color="#808080">'/bin/echo hi'</font> <i><font color="silver"># commands with /: restricted</font></i>
-rbash -c <font color="#808080">'exec ls'</font> <i><font color="silver"># exec: restricted</font></i>
+<pre><font color="#ff0000">rbash -c </font><font color="#bb00ff">'cd /'</font><font color="#ff0000"> </font><i><font color="#ababab"># cd: restricted</font></i>
+<font color="#ff0000">rbash -c </font><font color="#bb00ff">'PATH=/tmp'</font><font color="#ff0000"> </font><i><font color="#ababab"># PATH: restricted</font></i>
+<font color="#ff0000">rbash -c </font><font color="#bb00ff">'echo hi &gt; out'</font><font color="#ff0000"> </font><i><font color="#ababab"># redirection: restricted</font></i>
+<font color="#ff0000">rbash -c </font><font color="#bb00ff">'/bin/echo hi'</font><font color="#ff0000"> </font><i><font color="#ababab"># commands with /: restricted</font></i>
+<font color="#ff0000">rbash -c </font><font color="#bb00ff">'exec ls'</font><font color="#ff0000"> </font><i><font color="#ababab"># exec: restricted</font></i>
</pre>
<br />
<h2 style='display: inline' id='useless-use-of-cat-and-when-its-ok'>Useless use of cat (and when it’s ok)</h2><br />
@@ -576,12 +581,12 @@ rbash -c <font color="#808080">'exec ls'</font> <i><font color="silver">
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Prefer</font></i>
-grep -i foo file
-&lt;file grep -i foo <i><font color="silver"># or feed via redirection</font></i>
+<pre><i><font color="#ababab"># Prefer</font></i>
+<font color="#ff0000">grep -i foo file</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">file grep -i foo </font><i><font color="#ababab"># or feed via redirection</font></i>
-<i><font color="silver"># Over</font></i>
-cat file | grep -i foo
+<i><font color="#ababab"># Over</font></i>
+<font color="#ff0000">cat file </font><font color="#F3E651">|</font><font color="#ff0000"> grep -i foo</font>
</pre>
<br />
<span>But for interactive composition, or when you truly need to concatenate multiple sources into a single stream, <span class='inlinecode'>cat</span> is fine, as you may think, "First I need the content, then I do X." Changing the "useless use of cat" in retrospect is really a waste of time for one-time interactive use:</span><br />
@@ -590,7 +595,7 @@ cat file | grep -i foo
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>cat file1 file2 | grep -i foo
+<pre><font color="#ff0000">cat file1 file2 </font><font color="#F3E651">|</font><font color="#ff0000"> grep -i foo</font>
</pre>
<br />
<span>From notes: “Good for interactivity; Useless use of cat” — use judgment.</span><br />
@@ -603,15 +608,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>lockdir=/tmp/myjob.lock
-<b><u><font color="#000000">if</font></u></b> mkdir <font color="#808080">"$lockdir"</font> <font color="#000000">2</font>&gt;/dev/null; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">trap</font></u></b> <font color="#808080">'rmdir "$lockdir"'</font> EXIT INT TERM
- <i><font color="silver"># critical section</font></i>
- do_work
-<b><u><font color="#000000">else</font></u></b>
- echo <font color="#808080">"Another instance is running"</font> &gt;&amp;<font color="#000000">2</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
-<b><u><font color="#000000">fi</font></u></b>
+<pre><font color="#ff0000">lockdir</font><font color="#F3E651">=</font><font color="#ff0000">/tmp/myjob</font><font color="#F3E651">.</font><font color="#ff0000">lock</font>
+<b><font color="#ffffff">if</font></b><font color="#ff0000"> mkdir </font><font color="#bb00ff">"$lockdir"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">trap</font></b><font color="#ff0000"> </font><font color="#bb00ff">'rmdir "$lockdir"'</font><font color="#ff0000"> EXIT INT TERM</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># critical section</font></i>
+<font color="#ff0000"> do_work</font>
+<b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Another instance is running"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<b><font color="#ffffff">fi</font></b>
</pre>
<br />
<span>This works well on Linux. Remove the lock in <span class='inlinecode'>trap</span> so crashes don’t leave stale locks.</span><br />
@@ -626,7 +631,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>find . -name <font color="#808080">'*.log'</font> -exec gzip -<font color="#000000">9</font> {} +
+<pre><font color="#ff0000">find </font><font color="#F3E651">.</font><font color="#ff0000"> -name </font><font color="#bb00ff">'*.log'</font><font color="#ff0000"> -exec gzip -</font><font color="#bb00ff">9</font><font color="#ff0000"> {} </font><font color="#F3E651">+</font>
</pre>
<br />
<span>Example for extglob (exclude two dirs from listing):</span><br />
@@ -635,8 +640,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">shopt</font></u></b> -s extglob
-ls -d -- !(.git|node_modules) <font color="#000000">2</font>&gt;/dev/null
+<pre><b><font color="#ffffff">shopt</font></b><font color="#ff0000"> -s extglob</font>
+<font color="#ff0000">ls -d -- </font><font color="#F3E651">!(.</font><font color="#ff0000">git</font><font color="#F3E651">|</font><font color="#ff0000">node_modules</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font>
</pre>
<br />
<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
@@ -652,11 +657,12 @@ ls -d -- !(.git|node_modules) <font color="#000000">2</font>&gt;/dev/null
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html
index f638e1fc..cc44d819 100644
--- a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html
+++ b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 7: k3s and first pod deployments</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.gmi">Gemini</a>
</p>
@@ -82,10 +87,10 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git clone https://codeberg.org/snonux/conf.git
-$ cd conf
-$ git checkout 15a86f3 <i><font color="silver"># Last commit before ArgoCD migration</font></i>
-$ cd f3s/
+<pre><font color="#ff0000">$ git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/conf</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">$ cd conf</font>
+<font color="#ff0000">$ git checkout 15a86f3 </font><i><font color="#ababab"># Last commit before ArgoCD migration</font></i>
+<font color="#ff0000">$ cd f3s</font><font color="#F3E651">/</font>
</pre>
<br />
<span>**Current master branch** contains the ArgoCD-managed versions with:</span><br />
@@ -104,8 +109,8 @@ $ cd f3s/
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>dnf update -y
-reboot
+<pre><font color="#ff0000">dnf update -y</font>
+<font color="#ff0000">reboot</font>
</pre>
<br />
<span>On the FreeBSD hosts, I upgraded from FreeBSD 14.2 to 14.3-RELEASE, running this on all three hosts <span class='inlinecode'>f0</span>, <span class='inlinecode'>f1</span> and <span class='inlinecode'>f2</span>:</span><br />
@@ -114,29 +119,29 @@ reboot
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas freebsd-update fetch
-paul@f0:~ % doas freebsd-update install
-paul@f0:~ % doas reboot
-.
-.
-.
-paul@f0:~ % doas freebsd-update -r <font color="#000000">14.3</font>-RELEASE upgrade
-paul@f0:~ % doas freebsd-update install
-paul@f0:~ % doas freebsd-update install
-paul@f0:~ % doas reboot
-.
-.
-.
-paul@f0:~ % doas freebsd-update install
-paul@f0:~ % doas pkg update
-paul@f0:~ % doas pkg upgrade
-paul@f0:~ % doas reboot
-.
-.
-.
-paul@f0:~ % uname -a
-FreeBSD f0.lan.buetow.org <font color="#000000">14.3</font>-RELEASE FreeBSD <font color="#000000">14.3</font>-RELEASE
- releng/<font color="#000000">14.3</font>-n<font color="#000000">271432</font>-8c9ce319fef7 GENERIC amd64
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update fetch</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas reboot</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update -r </font><font color="#bb00ff">14.3</font><font color="#ff0000">-RELEASE upgrade</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas reboot</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas freebsd-update install</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg update</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg upgrade</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas reboot</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> uname -a</font>
+<font color="#ff0000">FreeBSD f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org </font><font color="#bb00ff">14.3</font><font color="#ff0000">-RELEASE FreeBSD </font><font color="#bb00ff">14.3</font><font color="#ff0000">-RELEASE</font>
+<font color="#ff0000"> releng</font><font color="#F3E651">/</font><font color="#bb00ff">14.3</font><font color="#ff0000">-n</font><font color="#bb00ff">271432</font><font color="#ff0000">-8c9ce319fef7 GENERIC amd64</font>
</pre>
<br />
<h2 style='display: inline' id='installing-k3s'>Installing k3s</h2><br />
@@ -149,7 +154,7 @@ FreeBSD f0.lan.buetow.org <font color="#000000">14.3</font>-RELEASE FreeBSD <fon
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># echo -n SECRET_TOKEN &gt; ~/.k3s_token</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># echo -n SECRET_TOKEN &gt; ~/.k3s_token</font></i>
</pre>
<br />
<span>The following steps are also documented on the k3s website:</span><br />
@@ -162,17 +167,17 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i>
- sh -s - server --cluster-init \
- --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.120</font> \
- --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.120</font> \
- --tls-san=r0.wg0.wan.buetow.org
-[INFO] Finding release <b><u><font color="#000000">for</font></u></b> channel stable
-[INFO] Using v1.<font color="#000000">32.6</font>+k3s1 as release
-.
-.
-.
-[INFO] systemd: Starting k3s
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i>
+<font color="#ff0000"> sh -s - server --cluster-init </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --node-ip</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --advertise-address</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --tls-san</font><font color="#F3E651">=</font><font color="#ff0000">r0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#F3E651">[</font><font color="#ff0000">INFO</font><font color="#F3E651">]</font><font color="#ff0000"> Finding release </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> channel stable</font>
+<font color="#F3E651">[</font><font color="#ff0000">INFO</font><font color="#F3E651">]</font><font color="#ff0000"> Using v1</font><font color="#F3E651">.</font><font color="#bb00ff">32.6</font><font color="#F3E651">+</font><font color="#ff0000">k3s1 as release</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">[</font><font color="#ff0000">INFO</font><font color="#F3E651">]</font><font color="#ff0000"> systemd</font><font color="#F3E651">:</font><font color="#ff0000"> Starting k3s</font>
</pre>
<br />
<span>Note: The <span class='inlinecode'>--node-ip</span> and <span class='inlinecode'>--advertise-address</span> flags are important to ensure that the embedded etcd cluster communicates over the WireGuard interface (192.168.2.x) rather than the LAN interface (192.168.1.x). This ensures that all control plane traffic is encrypted via WireGuard.</span><br />
@@ -185,20 +190,20 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r1 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i>
- sh -s - server --server https://r<font color="#000000">0</font>.wg0.wan.buetow.org:<font color="#000000">6443</font> \
- --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.121</font> \
- --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.121</font> \
- --tls-san=r1.wg0.wan.buetow.org
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r1 </font><font color="#F3E651">~]</font><i><font color="#ababab"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i>
+<font color="#ff0000"> sh -s - server --server https</font><font color="#F3E651">:</font><font color="#ff0000">//r</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">6443</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --node-ip</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --advertise-address</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --tls-san</font><font color="#F3E651">=</font><font color="#ff0000">r1</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
-[root@r2 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i>
- sh -s - server --server https://r<font color="#000000">0</font>.wg0.wan.buetow.org:<font color="#000000">6443</font> \
- --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.122</font> \
- --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.122</font> \
- --tls-san=r2.wg0.wan.buetow.org
-.
-.
-.
+<font color="#F3E651">[</font><font color="#ff0000">root@r2 </font><font color="#F3E651">~]</font><i><font color="#ababab"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i>
+<font color="#ff0000"> sh -s - server --server https</font><font color="#F3E651">:</font><font color="#ff0000">//r</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">6443</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --node-ip</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --advertise-address</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --tls-san</font><font color="#F3E651">=</font><font color="#ff0000">r2</font><font color="#F3E651">.</font><font color="#ff0000">wg0</font><font color="#F3E651">.</font><font color="#ff0000">wan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
+<font color="#F3E651">.</font>
</pre>
<br />
@@ -208,23 +213,23 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># kubectl get nodes</font></i>
-NAME STATUS ROLES AGE VERSION
-r0.lan.buetow.org Ready control-plane,etcd,master 4m44s v1.<font color="#000000">32.6</font>+k3s1
-r1.lan.buetow.org Ready control-plane,etcd,master 3m13s v1.<font color="#000000">32.6</font>+k3s1
-r2.lan.buetow.org Ready control-plane,etcd,master 30s v1.<font color="#000000">32.6</font>+k3s1
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># kubectl get nodes</font></i>
+<font color="#ff0000">NAME STATUS ROLES AGE VERSION</font>
+<font color="#ff0000">r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org Ready control-plane</font><font color="#F3E651">,</font><font color="#ff0000">etcd</font><font color="#F3E651">,</font><font color="#ff0000">master 4m44s v1</font><font color="#F3E651">.</font><font color="#bb00ff">32.6</font><font color="#F3E651">+</font><font color="#ff0000">k3s1</font>
+<font color="#ff0000">r1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org Ready control-plane</font><font color="#F3E651">,</font><font color="#ff0000">etcd</font><font color="#F3E651">,</font><font color="#ff0000">master 3m13s v1</font><font color="#F3E651">.</font><font color="#bb00ff">32.6</font><font color="#F3E651">+</font><font color="#ff0000">k3s1</font>
+<font color="#ff0000">r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org Ready control-plane</font><font color="#F3E651">,</font><font color="#ff0000">etcd</font><font color="#F3E651">,</font><font color="#ff0000">master 30s v1</font><font color="#F3E651">.</font><font color="#bb00ff">32.6</font><font color="#F3E651">+</font><font color="#ff0000">k3s1</font>
-[root@r0 ~]<i><font color="silver"># kubectl get pods --all-namespaces</font></i>
-NAMESPACE NAME READY STATUS RESTARTS AGE
-kube-system coredns-5688667fd4-fs2jj <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 5m27s
-kube-system helm-install-traefik-crd-f9hgd <font color="#000000">0</font>/<font color="#000000">1</font> Completed <font color="#000000">0</font> 5m27s
-kube-system helm-install-traefik-zqqqk <font color="#000000">0</font>/<font color="#000000">1</font> Completed <font color="#000000">2</font> 5m27s
-kube-system local-path-provisioner-774c6665dc-jqlnc <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 5m27s
-kube-system metrics-server-6f4c6675d5-5xpmp <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 5m27s
-kube-system svclb-traefik-411cec5b-cdp2l <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 78s
-kube-system svclb-traefik-411cec5b-f625r <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 4m58s
-kube-system svclb-traefik-411cec5b-twrd<font color="#000000">7</font> <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 4m2s
-kube-system traefik-c98fdf6fb-lt6fx <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 4m58s
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># kubectl get pods --all-namespaces</font></i>
+<font color="#ff0000">NAMESPACE NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">kube-system coredns-5688667fd4-fs2jj </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 5m27s</font>
+<font color="#ff0000">kube-system helm-install-traefik-crd-f9hgd </font><font color="#bb00ff">0</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Completed </font><font color="#bb00ff">0</font><font color="#ff0000"> 5m27s</font>
+<font color="#ff0000">kube-system helm-install-traefik-zqqqk </font><font color="#bb00ff">0</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Completed </font><font color="#bb00ff">2</font><font color="#ff0000"> 5m27s</font>
+<font color="#ff0000">kube-system local-path-provisioner-774c6665dc-jqlnc </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 5m27s</font>
+<font color="#ff0000">kube-system metrics-server-6f4c6675d5-5xpmp </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 5m27s</font>
+<font color="#ff0000">kube-system svclb-traefik-411cec5b-cdp2l </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 78s</font>
+<font color="#ff0000">kube-system svclb-traefik-411cec5b-f625r </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 4m58s</font>
+<font color="#ff0000">kube-system svclb-traefik-411cec5b-twrd</font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 4m2s</font>
+<font color="#ff0000">kube-system traefik-c98fdf6fb-lt6fx </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 4m58s</font>
</pre>
<br />
<span>In order to connect with <span class='inlinecode'>kubectl</span> from my Fedora laptop, I had to copy <span class='inlinecode'>/etc/rancher/k3s/k3s.yaml</span> from <span class='inlinecode'>r0</span> to <span class='inlinecode'>~/.kube/config</span> and then replace the value of the server field with <span class='inlinecode'>r0.lan.buetow.org</span>. kubectl can now manage the cluster. Note that this step has to be repeated when I want to connect to another node of the cluster (e.g. when <span class='inlinecode'>r0</span> is down).</span><br />
@@ -239,19 +244,19 @@ kube-system traefik-c98fdf6fb-lt6fx <font color="#000000">1<
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl create namespace <b><u><font color="#000000">test</font></u></b>
-namespace/test created
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl create namespace </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">namespace/test created</font>
-&gt; ~ kubectl get namespaces
-NAME STATUS AGE
-default Active 6h11m
-kube-node-lease Active 6h11m
-kube-public Active 6h11m
-kube-system Active 6h11m
-<b><u><font color="#000000">test</font></u></b> Active 5s
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl get namespaces</font>
+<font color="#ff0000">NAME STATUS AGE</font>
+<font color="#ff0000">default Active 6h11m</font>
+<font color="#ff0000">kube-node-lease Active 6h11m</font>
+<font color="#ff0000">kube-public Active 6h11m</font>
+<font color="#ff0000">kube-system Active 6h11m</font>
+<b><font color="#ffffff">test</font></b><font color="#ff0000"> Active 5s</font>
-&gt; ~ kubectl config set-context --current --namespace=<b><u><font color="#000000">test</font></u></b>
-Context <font color="#808080">"default"</font> modified.
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl config set-context --current --namespace</font><font color="#F3E651">=</font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">Context </font><font color="#bb00ff">"default"</font><font color="#ff0000"> modified</font><font color="#F3E651">.</font>
</pre>
<br />
<span>And let&#39;s also create an Apache test pod:</span><br />
@@ -260,42 +265,42 @@ Context <font color="#808080">"default"</font> modified.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ cat &lt;&lt;END &gt; apache-deployment.yaml
-<i><font color="silver"># Apache HTTP Server Deployment</font></i>
-apiVersion: apps/v<font color="#000000">1</font>
-kind: Deployment
-metadata:
- name: apache-deployment
-spec:
- replicas: <font color="#000000">1</font>
- selector:
- matchLabels:
- app: apache
- template:
- metadata:
- labels:
- app: apache
- spec:
- containers:
- - name: apache
- image: httpd:latest
- ports:
- <i><font color="silver"># Container port where Apache listens</font></i>
- - containerPort: <font color="#000000">80</font>
-END
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-deployment</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<i><font color="#ababab"># Apache HTTP Server Deployment</font></i>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> apps/v</font><font color="#bb00ff">1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> Deployment</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-deployment</font>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> replicas</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> selector</font><font color="#F3E651">:</font>
+<font color="#ff0000"> matchLabels</font><font color="#F3E651">:</font>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> template</font><font color="#F3E651">:</font>
+<font color="#ff0000"> metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> labels</font><font color="#F3E651">:</font>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> containers</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> image</font><font color="#F3E651">:</font><font color="#ff0000"> httpd</font><font color="#F3E651">:</font><font color="#ff0000">latest</font>
+<font color="#ff0000"> ports</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Container port where Apache listens</font></i>
+<font color="#ff0000"> - containerPort</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000">END</font>
-&gt; ~ kubectl apply -f apache-deployment.yaml
-deployment.apps/apache-deployment created
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-deployment</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">deployment</font><font color="#F3E651">.</font><font color="#ff0000">apps/apache-deployment created</font>
-&gt; ~ kubectl get all
-NAME READY STATUS RESTARTS AGE
-pod/apache-deployment-5fd955856f-4pjmf <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 7s
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl get all</font>
+<font color="#ff0000">NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">pod/apache-deployment-5fd955856f-4pjmf </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 7s</font>
-NAME READY UP-TO-DATE AVAILABLE AGE
-deployment.apps/apache-deployment <font color="#000000">1</font>/<font color="#000000">1</font> <font color="#000000">1</font> <font color="#000000">1</font> 7s
+<font color="#ff0000">NAME READY UP-TO-DATE AVAILABLE AGE</font>
+<font color="#ff0000">deployment</font><font color="#F3E651">.</font><font color="#ff0000">apps/apache-deployment </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> 7s</font>
-NAME DESIRED CURRENT READY AGE
-replicaset.apps/apache-deployment-5fd955856f <font color="#000000">1</font> <font color="#000000">1</font> <font color="#000000">1</font> 7s
+<font color="#ff0000">NAME DESIRED CURRENT READY AGE</font>
+<font color="#ff0000">replicaset</font><font color="#F3E651">.</font><font color="#ff0000">apps/apache-deployment-5fd955856f </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> 7s</font>
</pre>
<br />
<span>Let&#39;s also create a service: </span><br />
@@ -304,31 +309,31 @@ replicaset.apps/apache-deployment-5fd955856f <font color="#000000">1</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ cat &lt;&lt;END &gt; apache-service.yaml
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: apache
- name: apache-service
-spec:
- ports:
- - name: web
- port: <font color="#000000">80</font>
- protocol: TCP
- <i><font color="silver"># Expose port 80 on the service</font></i>
- targetPort: <font color="#000000">80</font>
- selector:
- <i><font color="silver"># Link this service to pods with the label app=apache</font></i>
- app: apache
-END
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-service</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> v1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> Service</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> labels</font><font color="#F3E651">:</font>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> ports</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> web</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> protocol</font><font color="#F3E651">:</font><font color="#ff0000"> TCP</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Expose port 80 on the service</font></i>
+<font color="#ff0000"> targetPort</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> selector</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Link this service to pods with the label app=apache</font></i>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000">END</font>
-&gt; ~ kubectl apply -f apache-service.yaml
-service/apache-service created
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-service</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">service/apache-service created</font>
-&gt; ~ kubectl get service
-NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
-apache-service ClusterIP <font color="#000000">10.43</font>.<font color="#000000">249.165</font> &lt;none&gt; <font color="#000000">80</font>/TCP 4s
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl get service</font>
+<font color="#ff0000">NAME TYPE CLUSTER-IP EXTERNAL-IP PORT</font><font color="#F3E651">(</font><font color="#ff0000">S</font><font color="#F3E651">)</font><font color="#ff0000"> AGE</font>
+<font color="#ff0000">apache-service ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">249.165</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">none</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">80</font><font color="#ff0000">/TCP 4s</font>
</pre>
<br />
<span>Now let&#39;s create an ingress:</span><br />
@@ -339,72 +344,72 @@ apache-service ClusterIP <font color="#000000">10.43</font>.<font color="#00
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ cat &lt;&lt;END &gt; apache-ingress.yaml
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-ingress</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
-apiVersion: networking.k8s.io/v<font color="#000000">1</font>
-kind: Ingress
-metadata:
- name: apache-ingress
- namespace: <b><u><font color="#000000">test</font></u></b>
- annotations:
- spec.ingressClassName: traefik
- traefik.ingress.kubernetes.io/router.entrypoints: web
-spec:
- rules:
- - host: f3s.foo.zone
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: apache-service
- port:
- number: <font color="#000000">80</font>
- - host: standby.f3s.foo.zone
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: apache-service
- port:
- number: <font color="#000000">80</font>
- - host: www.f3s.foo.zone
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: apache-service
- port:
- number: <font color="#000000">80</font>
-END
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> networking</font><font color="#F3E651">.</font><font color="#ff0000">k8s</font><font color="#F3E651">.</font><font color="#ff0000">io/v</font><font color="#bb00ff">1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> Ingress</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-ingress</font>
+<font color="#ff0000"> namespace</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000"> annotations</font><font color="#F3E651">:</font>
+<font color="#ff0000"> spec</font><font color="#F3E651">.</font><font color="#ff0000">ingressClassName</font><font color="#F3E651">:</font><font color="#ff0000"> traefik</font>
+<font color="#ff0000"> traefik</font><font color="#F3E651">.</font><font color="#ff0000">ingress</font><font color="#F3E651">.</font><font color="#ff0000">kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">io/router</font><font color="#F3E651">.</font><font color="#ff0000">entrypoints</font><font color="#F3E651">:</font><font color="#ff0000"> web</font>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> rules</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - host</font><font color="#F3E651">:</font><font color="#ff0000"> f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font>
+<font color="#ff0000"> paths</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> pathType</font><font color="#F3E651">:</font><font color="#ff0000"> Prefix</font>
+<font color="#ff0000"> backend</font><font color="#F3E651">:</font>
+<font color="#ff0000"> service</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font>
+<font color="#ff0000"> number</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> - host</font><font color="#F3E651">:</font><font color="#ff0000"> standby</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font>
+<font color="#ff0000"> paths</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> pathType</font><font color="#F3E651">:</font><font color="#ff0000"> Prefix</font>
+<font color="#ff0000"> backend</font><font color="#F3E651">:</font>
+<font color="#ff0000"> service</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font>
+<font color="#ff0000"> number</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> - host</font><font color="#F3E651">:</font><font color="#ff0000"> www</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font>
+<font color="#ff0000"> paths</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> pathType</font><font color="#F3E651">:</font><font color="#ff0000"> Prefix</font>
+<font color="#ff0000"> backend</font><font color="#F3E651">:</font>
+<font color="#ff0000"> service</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font>
+<font color="#ff0000"> number</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000">END</font>
-&gt; ~ kubectl apply -f apache-ingress.yaml
-ingress.networking.k8s.io/apache-ingress created
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-ingress</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">ingress</font><font color="#F3E651">.</font><font color="#ff0000">networking</font><font color="#F3E651">.</font><font color="#ff0000">k8s</font><font color="#F3E651">.</font><font color="#ff0000">io/apache-ingress created</font>
-&gt; ~ kubectl describe ingress
-Name: apache-ingress
-Labels: &lt;none&gt;
-Namespace: <b><u><font color="#000000">test</font></u></b>
-Address: <font color="#000000">192.168</font>.<font color="#000000">2.120</font>,<font color="#000000">192.168</font>.<font color="#000000">2.121</font>,<font color="#000000">192.168</font>.<font color="#000000">2.122</font>
-Ingress Class: traefik
-Default backend: &lt;default&gt;
-Rules:
- Host Path Backends
- ---- ---- --------
- f3s.foo.zone
- / apache-service:<font color="#000000">80</font> (<font color="#000000">10.42</font>.<font color="#000000">1.11</font>:<font color="#000000">80</font>)
- standby.f3s.foo.zone
- / apache-service:<font color="#000000">80</font> (<font color="#000000">10.42</font>.<font color="#000000">1.11</font>:<font color="#000000">80</font>)
- www.f3s.foo.zone
- / apache-service:<font color="#000000">80</font> (<font color="#000000">10.42</font>.<font color="#000000">1.11</font>:<font color="#000000">80</font>)
-Annotations: spec.ingressClassName: traefik
- traefik.ingress.kubernetes.io/router.entrypoints: web
-Events: &lt;none&gt;
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl describe ingress</font>
+<font color="#ff0000">Name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-ingress</font>
+<font color="#ff0000">Labels</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">none</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">Namespace</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">Address</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.120</font><font color="#F3E651">,</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.121</font><font color="#F3E651">,</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.122</font>
+<font color="#ff0000">Ingress Class</font><font color="#F3E651">:</font><font color="#ff0000"> traefik</font>
+<font color="#ff0000">Default backend</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">default</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">Rules</font><font color="#F3E651">:</font>
+<font color="#ff0000"> Host Path Backends</font>
+<font color="#ff0000"> ---- ---- --------</font>
+<font color="#ff0000"> f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> </font><font color="#F3E651">/</font><font color="#ff0000"> apache-service</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">10.42</font><font color="#F3E651">.</font><font color="#bb00ff">1.11</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#F3E651">)</font>
+<font color="#ff0000"> standby</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> </font><font color="#F3E651">/</font><font color="#ff0000"> apache-service</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">10.42</font><font color="#F3E651">.</font><font color="#bb00ff">1.11</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#F3E651">)</font>
+<font color="#ff0000"> www</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> </font><font color="#F3E651">/</font><font color="#ff0000"> apache-service</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">10.42</font><font color="#F3E651">.</font><font color="#bb00ff">1.11</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#F3E651">)</font>
+<font color="#ff0000">Annotations</font><font color="#F3E651">:</font><font color="#ff0000"> spec</font><font color="#F3E651">.</font><font color="#ff0000">ingressClassName</font><font color="#F3E651">:</font><font color="#ff0000"> traefik</font>
+<font color="#ff0000"> traefik</font><font color="#F3E651">.</font><font color="#ff0000">ingress</font><font color="#F3E651">.</font><font color="#ff0000">kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">io/router</font><font color="#F3E651">.</font><font color="#ff0000">entrypoints</font><font color="#F3E651">:</font><font color="#ff0000"> web</font>
+<font color="#ff0000">Events</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">none</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<span>Notes: </span><br />
@@ -418,8 +423,8 @@ Events: &lt;none&gt;
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ curl -H <font color="#808080">"Host: www.f3s.foo.zone"</font> http://r<font color="#000000">0</font>.lan.buetow.org:<font color="#000000">80</font>
-&lt;html&gt;&lt;body&gt;&lt;h1&gt;It works!&lt;/h<font color="#000000">1</font>&gt;&lt;/body&gt;&lt;/html&gt;
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> curl -H </font><font color="#bb00ff">"Host: www.f3s.foo.zone"</font><font color="#ff0000"> http</font><font color="#F3E651">:</font><font color="#ff0000">//r</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">80</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">html</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">h1</font><font color="#F3E651">&gt;</font><font color="#ff0000">It works</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">1</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/html</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<h3 style='display: inline' id='test-deployment-with-persistent-volume-claim'>Test deployment with persistent volume claim</h3><br />
@@ -430,142 +435,142 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ cat &lt;&lt;END &gt; apache-deployment.yaml
-<i><font color="silver"># Apache HTTP Server Deployment</font></i>
-apiVersion: apps/v<font color="#000000">1</font>
-kind: Deployment
-metadata:
- name: apache-deployment
- namespace: <b><u><font color="#000000">test</font></u></b>
-spec:
- replicas: <font color="#000000">2</font>
- selector:
- matchLabels:
- app: apache
- template:
- metadata:
- labels:
- app: apache
- spec:
- containers:
- - name: apache
- image: httpd:latest
- ports:
- <i><font color="silver"># Container port where Apache listens</font></i>
- - containerPort: <font color="#000000">80</font>
- readinessProbe:
- httpGet:
- path: /
- port: <font color="#000000">80</font>
- initialDelaySeconds: <font color="#000000">5</font>
- periodSeconds: <font color="#000000">10</font>
- livenessProbe:
- httpGet:
- path: /
- port: <font color="#000000">80</font>
- initialDelaySeconds: <font color="#000000">15</font>
- periodSeconds: <font color="#000000">10</font>
- volumeMounts:
- - name: apache-htdocs
- mountPath: /usr/local/apache<font color="#000000">2</font>/htdocs/
- volumes:
- - name: apache-htdocs
- persistentVolumeClaim:
- claimName: example-apache-pvc
-END
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-deployment</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<i><font color="#ababab"># Apache HTTP Server Deployment</font></i>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> apps/v</font><font color="#bb00ff">1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> Deployment</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-deployment</font>
+<font color="#ff0000"> namespace</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> replicas</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2</font>
+<font color="#ff0000"> selector</font><font color="#F3E651">:</font>
+<font color="#ff0000"> matchLabels</font><font color="#F3E651">:</font>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> template</font><font color="#F3E651">:</font>
+<font color="#ff0000"> metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> labels</font><font color="#F3E651">:</font>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> containers</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> image</font><font color="#F3E651">:</font><font color="#ff0000"> httpd</font><font color="#F3E651">:</font><font color="#ff0000">latest</font>
+<font color="#ff0000"> ports</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Container port where Apache listens</font></i>
+<font color="#ff0000"> - containerPort</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> readinessProbe</font><font color="#F3E651">:</font>
+<font color="#ff0000"> httpGet</font><font color="#F3E651">:</font>
+<font color="#ff0000"> path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> initialDelaySeconds</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">5</font>
+<font color="#ff0000"> periodSeconds</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> livenessProbe</font><font color="#F3E651">:</font>
+<font color="#ff0000"> httpGet</font><font color="#F3E651">:</font>
+<font color="#ff0000"> path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> initialDelaySeconds</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">15</font>
+<font color="#ff0000"> periodSeconds</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">10</font>
+<font color="#ff0000"> volumeMounts</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-htdocs</font>
+<font color="#ff0000"> mountPath</font><font color="#F3E651">:</font><font color="#ff0000"> /usr/local/apache</font><font color="#bb00ff">2</font><font color="#ff0000">/htdocs</font><font color="#F3E651">/</font>
+<font color="#ff0000"> volumes</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-htdocs</font>
+<font color="#ff0000"> persistentVolumeClaim</font><font color="#F3E651">:</font>
+<font color="#ff0000"> claimName</font><font color="#F3E651">:</font><font color="#ff0000"> example-apache-pvc</font>
+<font color="#ff0000">END</font>
-&gt; ~ cat &lt;&lt;END &gt; apache-ingress.yaml
-apiVersion: networking.k8s.io/v<font color="#000000">1</font>
-kind: Ingress
-metadata:
- name: apache-ingress
- namespace: <b><u><font color="#000000">test</font></u></b>
- annotations:
- spec.ingressClassName: traefik
- traefik.ingress.kubernetes.io/router.entrypoints: web
-spec:
- rules:
- - host: f3s.foo.zone
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: apache-service
- port:
- number: <font color="#000000">80</font>
- - host: standby.f3s.foo.zone
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: apache-service
- port:
- number: <font color="#000000">80</font>
- - host: www.f3s.foo.zone
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: apache-service
- port:
- number: <font color="#000000">80</font>
-END
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-ingress</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> networking</font><font color="#F3E651">.</font><font color="#ff0000">k8s</font><font color="#F3E651">.</font><font color="#ff0000">io/v</font><font color="#bb00ff">1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> Ingress</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-ingress</font>
+<font color="#ff0000"> namespace</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000"> annotations</font><font color="#F3E651">:</font>
+<font color="#ff0000"> spec</font><font color="#F3E651">.</font><font color="#ff0000">ingressClassName</font><font color="#F3E651">:</font><font color="#ff0000"> traefik</font>
+<font color="#ff0000"> traefik</font><font color="#F3E651">.</font><font color="#ff0000">ingress</font><font color="#F3E651">.</font><font color="#ff0000">kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">io/router</font><font color="#F3E651">.</font><font color="#ff0000">entrypoints</font><font color="#F3E651">:</font><font color="#ff0000"> web</font>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> rules</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - host</font><font color="#F3E651">:</font><font color="#ff0000"> f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font>
+<font color="#ff0000"> paths</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> pathType</font><font color="#F3E651">:</font><font color="#ff0000"> Prefix</font>
+<font color="#ff0000"> backend</font><font color="#F3E651">:</font>
+<font color="#ff0000"> service</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font>
+<font color="#ff0000"> number</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> - host</font><font color="#F3E651">:</font><font color="#ff0000"> standby</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font>
+<font color="#ff0000"> paths</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> pathType</font><font color="#F3E651">:</font><font color="#ff0000"> Prefix</font>
+<font color="#ff0000"> backend</font><font color="#F3E651">:</font>
+<font color="#ff0000"> service</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font>
+<font color="#ff0000"> number</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> - host</font><font color="#F3E651">:</font><font color="#ff0000"> www</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000"> http</font><font color="#F3E651">:</font>
+<font color="#ff0000"> paths</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - path</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">/</font>
+<font color="#ff0000"> pathType</font><font color="#F3E651">:</font><font color="#ff0000"> Prefix</font>
+<font color="#ff0000"> backend</font><font color="#F3E651">:</font>
+<font color="#ff0000"> service</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font>
+<font color="#ff0000"> number</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000">END</font>
-&gt; ~ cat &lt;&lt;END &gt; apache-persistent-volume.yaml
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: example-apache-pv
-spec:
- capacity:
- storage: 1Gi
- volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Retain
- hostPath:
- path: /data/nfs/k3svolumes/example-apache-volume-claim
- <b><u><font color="#000000">type</font></u></b>: Directory
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: example-apache-pvc
- namespace: <b><u><font color="#000000">test</font></u></b>
-spec:
- storageClassName: <font color="#808080">""</font>
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 1Gi
-END
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-persistent-volume</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> v1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> PersistentVolume</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> example-apache-pv</font>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> capacity</font><font color="#F3E651">:</font>
+<font color="#ff0000"> storage</font><font color="#F3E651">:</font><font color="#ff0000"> 1Gi</font>
+<font color="#ff0000"> volumeMode</font><font color="#F3E651">:</font><font color="#ff0000"> Filesystem</font>
+<font color="#ff0000"> accessModes</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - ReadWriteOnce</font>
+<font color="#ff0000"> persistentVolumeReclaimPolicy</font><font color="#F3E651">:</font><font color="#ff0000"> Retain</font>
+<font color="#ff0000"> hostPath</font><font color="#F3E651">:</font>
+<font color="#ff0000"> path</font><font color="#F3E651">:</font><font color="#ff0000"> /data/nfs/k3svolumes/example-apache-volume-claim</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">type</font></b><font color="#F3E651">:</font><font color="#ff0000"> Directory</font>
+<font color="#ff0000">---</font>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> v1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> PersistentVolumeClaim</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> example-apache-pvc</font>
+<font color="#ff0000"> namespace</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> storageClassName</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">""</font>
+<font color="#ff0000"> accessModes</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - ReadWriteOnce</font>
+<font color="#ff0000"> resources</font><font color="#F3E651">:</font>
+<font color="#ff0000"> requests</font><font color="#F3E651">:</font>
+<font color="#ff0000"> storage</font><font color="#F3E651">:</font><font color="#ff0000"> 1Gi</font>
+<font color="#ff0000">END</font>
-&gt; ~ cat &lt;&lt;END &gt; apache-service.yaml
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: apache
- name: apache-service
- namespace: <b><u><font color="#000000">test</font></u></b>
-spec:
- ports:
- - name: web
- port: <font color="#000000">80</font>
- protocol: TCP
- <i><font color="silver"># Expose port 80 on the service</font></i>
- targetPort: <font color="#000000">80</font>
- selector:
- <i><font color="silver"># Link this service to pods with the label app=apache</font></i>
- app: apache
-END
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> cat </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000">END </font><font color="#F3E651">&gt;</font><font color="#ff0000"> apache-service</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">apiVersion</font><font color="#F3E651">:</font><font color="#ff0000"> v1</font>
+<font color="#ff0000">kind</font><font color="#F3E651">:</font><font color="#ff0000"> Service</font>
+<font color="#ff0000">metadata</font><font color="#F3E651">:</font>
+<font color="#ff0000"> labels</font><font color="#F3E651">:</font>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> apache-service</font>
+<font color="#ff0000"> namespace</font><font color="#F3E651">:</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">spec</font><font color="#F3E651">:</font>
+<font color="#ff0000"> ports</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - name</font><font color="#F3E651">:</font><font color="#ff0000"> web</font>
+<font color="#ff0000"> port</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> protocol</font><font color="#F3E651">:</font><font color="#ff0000"> TCP</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Expose port 80 on the service</font></i>
+<font color="#ff0000"> targetPort</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">80</font>
+<font color="#ff0000"> selector</font><font color="#F3E651">:</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Link this service to pods with the label app=apache</font></i>
+<font color="#ff0000"> app</font><font color="#F3E651">:</font><font color="#ff0000"> apache</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>I applied the manifests:</span><br />
@@ -574,10 +579,10 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl apply -f apache-persistent-volume.yaml
-&gt; ~ kubectl apply -f apache-service.yaml
-&gt; ~ kubectl apply -f apache-deployment.yaml
-&gt; ~ kubectl apply -f apache-ingress.yaml
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-persistent-volume</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-service</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-deployment</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl apply -f apache-ingress</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
</pre>
<br />
<span>Looking at the deployment, I could see it failed because the directory didn&#39;t exist yet on the NFS share (note that I also increased the replica count to 2 so if one node goes down there&#39;s already a replica running on another node for faster failover):</span><br />
@@ -586,20 +591,20 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl get pods
-NAME READY STATUS RESTARTS AGE
-apache-deployment-5b96bd6b6b-fv2jx <font color="#000000">0</font>/<font color="#000000">1</font> ContainerCreating <font color="#000000">0</font> 9m15s
-apache-deployment-5b96bd6b6b-ax2ji <font color="#000000">0</font>/<font color="#000000">1</font> ContainerCreating <font color="#000000">0</font> 9m15s
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl get pods</font>
+<font color="#ff0000">NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">apache-deployment-5b96bd6b6b-fv2jx </font><font color="#bb00ff">0</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> ContainerCreating </font><font color="#bb00ff">0</font><font color="#ff0000"> 9m15s</font>
+<font color="#ff0000">apache-deployment-5b96bd6b6b-ax2ji </font><font color="#bb00ff">0</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> ContainerCreating </font><font color="#bb00ff">0</font><font color="#ff0000"> 9m15s</font>
-&gt; ~ kubectl describe pod apache-deployment-5b96bd6b6b-fv2jx | tail -n <font color="#000000">5</font>
-Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal Scheduled 9m34s default-scheduler Successfully
- assigned test/apache-deployment-5b96bd6b6b-fv2jx to r2.lan.buetow.org
- Warning FailedMount 80s (x12 over 9m34s) kubelet MountVolume.SetUp
- failed <b><u><font color="#000000">for</font></u></b> volume <font color="#808080">"example-apache-pv"</font> : hostPath <b><u><font color="#000000">type</font></u></b> check failed:
- /data/nfs/k3svolumes/example-apache is not a directory
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl describe pod apache-deployment-5b96bd6b6b-fv2jx </font><font color="#F3E651">|</font><font color="#ff0000"> tail -n </font><font color="#bb00ff">5</font>
+<font color="#ff0000">Events</font><font color="#F3E651">:</font>
+<font color="#ff0000"> Type Reason Age From Message</font>
+<font color="#ff0000"> ---- ------ ---- ---- -------</font>
+<font color="#ff0000"> Normal Scheduled 9m34s default-scheduler Successfully</font>
+<font color="#ff0000"> assigned test/apache-deployment-5b96bd6b6b-fv2jx to r2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000"> Warning FailedMount 80s </font><font color="#F3E651">(</font><font color="#ff0000">x12 over 9m34s</font><font color="#F3E651">)</font><font color="#ff0000"> kubelet MountVolume</font><font color="#F3E651">.</font><font color="#ff0000">SetUp</font>
+<font color="#ff0000"> failed </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> volume </font><font color="#bb00ff">"example-apache-pv"</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000"> hostPath </font><b><font color="#ffffff">type</font></b><font color="#ff0000"> check failed</font><font color="#F3E651">:</font>
+<font color="#ff0000"> /data/nfs/k3svolumes/example-apache is not a directory</font>
</pre>
<br />
<span>That&#39;s intentional—I needed to create the directory on the NFS share first, so I did that (e.g. on <span class='inlinecode'>r0</span>):</span><br />
@@ -608,20 +613,20 @@ Events:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># mkdir /data/nfs/k3svolumes/example-apache-volume-claim/</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir /data/nfs/k3svolumes/example-apache-volume-claim/</font></i>
-[root@r0 ~]<i><font color="silver"># cat &lt;&lt;END &gt; /data/nfs/k3svolumes/example-apache-volume-claim/index.html</font></i>
-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
- &lt;title&gt;Hello, it works&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
- &lt;h1&gt;Hello, it works!&lt;/h<font color="#000000">1</font>&gt;
- &lt;p&gt;This site is served via a PVC!&lt;/p&gt;
-&lt;/body&gt;
-&lt;/html&gt;
-END
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># cat &lt;&lt;END &gt; /data/nfs/k3svolumes/example-apache-volume-claim/index.html</font></i>
+<font color="#F3E651">&lt;!</font><font color="#ff0000">DOCTYPE html</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">html</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">head</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">title</font><font color="#F3E651">&gt;</font><font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> it works</font><font color="#F3E651">&lt;</font><font color="#ff0000">/title</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">/head</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">body</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">h1</font><font color="#F3E651">&gt;</font><font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> it works</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">1</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">p</font><font color="#F3E651">&gt;</font><font color="#ff0000">This site is served via a PVC</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/p</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">/body</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">/html</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000">END</font>
</pre>
<br />
<span>The <span class='inlinecode'>index.html</span> file gives us some actual content to serve. After deleting the pod, it recreates itself and the volume mounts correctly:</span><br />
@@ -630,19 +635,19 @@ END
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl delete pod apache-deployment-5b96bd6b6b-fv2jx
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl delete pod apache-deployment-5b96bd6b6b-fv2jx</font>
-&gt; ~ curl -H <font color="#808080">"Host: www.f3s.foo.zone"</font> http://r<font color="#000000">0</font>.lan.buetow.org:<font color="#000000">80</font>
-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
- &lt;title&gt;Hello, it works&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
- &lt;h1&gt;Hello, it works!&lt;/h<font color="#000000">1</font>&gt;
- &lt;p&gt;This site is served via a PVC!&lt;/p&gt;
-&lt;/body&gt;
-&lt;/html&gt;
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> curl -H </font><font color="#bb00ff">"Host: www.f3s.foo.zone"</font><font color="#ff0000"> http</font><font color="#F3E651">:</font><font color="#ff0000">//r</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">80</font>
+<font color="#F3E651">&lt;!</font><font color="#ff0000">DOCTYPE html</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">html</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">head</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">title</font><font color="#F3E651">&gt;</font><font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> it works</font><font color="#F3E651">&lt;</font><font color="#ff0000">/title</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">/head</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">body</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">h1</font><font color="#F3E651">&gt;</font><font color="#ff0000">Hello</font><font color="#F3E651">,</font><font color="#ff0000"> it works</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">1</font><font color="#F3E651">&gt;</font>
+<font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">p</font><font color="#F3E651">&gt;</font><font color="#ff0000">This site is served via a PVC</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/p</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">/body</font><font color="#F3E651">&gt;</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">/html</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<h3 style='display: inline' id='scaling-traefik-for-faster-failover'>Scaling Traefik for faster failover</h3><br />
@@ -653,7 +658,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl -n kube-system scale deployment traefik --replicas=<font color="#000000">2</font>
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl -n kube-system scale deployment traefik --replicas</font><font color="#F3E651">=</font><font color="#bb00ff">2</font>
</pre>
<br />
<span>And the result:</span><br />
@@ -662,9 +667,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl -n kube-system get pods -l app.kubernetes.io/name=traefik
-kube-system traefik-c98fdf6fb-97kqk <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">19</font> (53d ago) 64d
-kube-system traefik-c98fdf6fb-9npg2 <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">11</font> (53d ago) 61d
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl -n kube-system get pods -l app</font><font color="#F3E651">.</font><font color="#ff0000">kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">io/name</font><font color="#F3E651">=</font><font color="#ff0000">traefik</font>
+<font color="#ff0000">kube-system traefik-c98fdf6fb-97kqk </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">19</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">53d ago</font><font color="#F3E651">)</font><font color="#ff0000"> 64d</font>
+<font color="#ff0000">kube-system traefik-c98fdf6fb-9npg2 </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">11</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">53d ago</font><font color="#F3E651">)</font><font color="#ff0000"> 61d</font>
</pre>
<br />
<h2 style='display: inline' id='make-it-accessible-from-the-public-internet'>Make it accessible from the public internet</h2><br />
@@ -683,14 +688,14 @@ kube-system traefik-c98fdf6fb-9npg2 <font color="#000000">1</font>/<font col
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ curl https://f3s.foo.zone
-&lt;html&gt;&lt;body&gt;&lt;h1&gt;It works!&lt;/h<font color="#000000">1</font>&gt;&lt;/body&gt;&lt;/html&gt;
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> curl https</font><font color="#F3E651">:</font><font color="#ff0000">//f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">html</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">h1</font><font color="#F3E651">&gt;</font><font color="#ff0000">It works</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">1</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/html</font><font color="#F3E651">&gt;</font>
-&gt; ~ curl https://www.f3s.foo.zone
-&lt;html&gt;&lt;body&gt;&lt;h1&gt;It works!&lt;/h<font color="#000000">1</font>&gt;&lt;/body&gt;&lt;/html&gt;
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> curl https</font><font color="#F3E651">:</font><font color="#ff0000">//www</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">html</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">h1</font><font color="#F3E651">&gt;</font><font color="#ff0000">It works</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">1</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/html</font><font color="#F3E651">&gt;</font>
-&gt; ~ curl https://standby.f3s.foo.zone
-&lt;html&gt;&lt;body&gt;&lt;h1&gt;It works!&lt;/h<font color="#000000">1</font>&gt;&lt;/body&gt;&lt;/html&gt;
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> curl https</font><font color="#F3E651">:</font><font color="#ff0000">//standby</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">html</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">h1</font><font color="#F3E651">&gt;</font><font color="#ff0000">It works</font><font color="#F3E651">!&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">1</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/body</font><font color="#F3E651">&gt;&lt;</font><font color="#ff0000">/html</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<span>This is how it works in <span class='inlinecode'>relayd.conf</span> on OpenBSD:</span><br />
@@ -864,32 +869,32 @@ server "anki.f3s.foo.zone" {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">&lt;!DOCTYPE</font></u></b> <b><font color="#000000">html</font></b><b><u><font color="#000000">&gt;</font></u></b>
-<b><u><font color="#000000">&lt;html&gt;</font></u></b>
-<b><u><font color="#000000">&lt;head&gt;</font></u></b>
- <b><u><font color="#000000">&lt;title&gt;</font></u></b>Server turned off<b><u><font color="#000000">&lt;/title&gt;</font></u></b>
- <b><u><font color="#000000">&lt;style&gt;</font></u></b>
- body {
- font-family: <font color="#808080">sans-serif</font>;
- text-align: <font color="#808080">center</font>;
- padding-top: <font color="#808080">50px</font>;
- }
- .container {
- max-width: <font color="#808080">600px</font>;
- margin: <font color="#808080">0</font> <font color="#808080">auto</font>;
- }
- <b><u><font color="#000000">&lt;/style&gt;</font></u></b>
-<b><u><font color="#000000">&lt;/head&gt;</font></u></b>
-<b><u><font color="#000000">&lt;body&gt;</font></u></b>
- <b><u><font color="#000000">&lt;div</font></u></b> <b><font color="#000000">class</font></b>=<font color="#808080">"container"</font><b><u><font color="#000000">&gt;</font></u></b>
- <b><u><font color="#000000">&lt;h1&gt;</font></u></b>Server turned off<b><u><font color="#000000">&lt;/h1&gt;</font></u></b>
- <b><u><font color="#000000">&lt;p&gt;</font></u></b>The servers are all currently turned off.<b><u><font color="#000000">&lt;/p&gt;</font></u></b>
- <b><u><font color="#000000">&lt;p&gt;</font></u></b>Please try again later.<b><u><font color="#000000">&lt;/p&gt;</font></u></b>
- <b><u><font color="#000000">&lt;p&gt;</font></u></b>Or email <b><u><font color="#000000">&lt;a</font></u></b> <b><font color="#000000">href</font></b>=<font color="#808080">"mailto:paul@nospam.buetow.org"</font><b><u><font color="#000000">&gt;</font></u></b>paul@nospam.buetow.org<b><u><font color="#000000">&lt;/a&gt;</font></u></b>
- - so I can turn them back on for you!<b><u><font color="#000000">&lt;/p&gt;</font></u></b>
- <b><u><font color="#000000">&lt;/div&gt;</font></u></b>
-<b><u><font color="#000000">&lt;/body&gt;</font></u></b>
-<b><u><font color="#000000">&lt;/html&gt;</font></u></b>
+<pre><font color="#ababab">&lt;!DOCTYPE</font><font color="#ff0000"> </font><b><font color="#F35E1E">html</font></b><font color="#ababab">&gt;</font>
+<b><font color="#ffffff">&lt;html&gt;</font></b>
+<b><font color="#ffffff">&lt;head&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;title&gt;</font></b><font color="#ff0000">Server turned off</font><b><font color="#ffffff">&lt;/title&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;style&gt;</font></b>
+<font color="#ff0000"> body </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">font-family:</font><font color="#ff0000"> </font><font color="#bb00ff">sans-serif</font><font color="#ff0000">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">text-align:</font><font color="#ff0000"> </font><font color="#bb00ff">center</font><font color="#ff0000">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">padding-top:</font><font color="#ff0000"> </font><font color="#bb00ff">50px</font><font color="#ff0000">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#ff0000">.container</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">max-width:</font><font color="#ff0000"> </font><font color="#bb00ff">600px</font><font color="#ff0000">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">margin:</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">auto</font><font color="#ff0000">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;/style&gt;</font></b>
+<b><font color="#ffffff">&lt;/head&gt;</font></b>
+<b><font color="#ffffff">&lt;body&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;div</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">class</font></b><font color="#F3E651">=</font><font color="#bb00ff">"container"</font><b><font color="#ffffff">&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;h1&gt;</font></b><font color="#ff0000">Server turned off</font><b><font color="#ffffff">&lt;/h1&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;p&gt;</font></b><font color="#ff0000">The servers are all currently turned off.</font><b><font color="#ffffff">&lt;/p&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;p&gt;</font></b><font color="#ff0000">Please try again later.</font><b><font color="#ffffff">&lt;/p&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;p&gt;</font></b><font color="#ff0000">Or email </font><b><font color="#ffffff">&lt;a</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">href</font></b><font color="#F3E651">=</font><font color="#bb00ff">"mailto:paul@nospam.buetow.org"</font><b><font color="#ffffff">&gt;</font></b><font color="#ff0000">paul@nospam.buetow.org</font><b><font color="#ffffff">&lt;/a&gt;</font></b>
+<font color="#ff0000"> - so I can turn them back on for you!</font><b><font color="#ffffff">&lt;/p&gt;</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">&lt;/div&gt;</font></b>
+<b><font color="#ffffff">&lt;/body&gt;</font></b>
+<b><font color="#ffffff">&lt;/html&gt;</font></b>
</pre>
<br />
<span>This approach provides several benefits:</span><br />
@@ -948,17 +953,17 @@ LAN → FreeBSD CARP VIP (192.168.1.138)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd conf/f3s/cert-manager
-$ just install
-kubectl apply -f cert-manager.yaml
-<i><font color="silver"># ... cert-manager CRDs and resources created ...</font></i>
-kubectl apply -f self-signed-issuer.yaml
-clusterissuer.cert-manager.io/selfsigned-issuer created
-clusterissuer.cert-manager.io/selfsigned-ca-issuer created
-kubectl apply -f ca-certificate.yaml
-certificate.cert-manager.io/selfsigned-ca created
-kubectl apply -f wildcard-certificate.yaml
-certificate.cert-manager.io/f3s-lan-wildcard created
+<pre><font color="#ff0000">$ cd conf/f3s/cert-manager</font>
+<font color="#ff0000">$ just install</font>
+<font color="#ff0000">kubectl apply -f cert-manager</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<i><font color="#ababab"># ... cert-manager CRDs and resources created ...</font></i>
+<font color="#ff0000">kubectl apply -f self-signed-issuer</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">clusterissuer</font><font color="#F3E651">.</font><font color="#ff0000">cert-manager</font><font color="#F3E651">.</font><font color="#ff0000">io/selfsigned-issuer created</font>
+<font color="#ff0000">clusterissuer</font><font color="#F3E651">.</font><font color="#ff0000">cert-manager</font><font color="#F3E651">.</font><font color="#ff0000">io/selfsigned-ca-issuer created</font>
+<font color="#ff0000">kubectl apply -f ca-certificate</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">certificate</font><font color="#F3E651">.</font><font color="#ff0000">cert-manager</font><font color="#F3E651">.</font><font color="#ff0000">io/selfsigned-ca created</font>
+<font color="#ff0000">kubectl apply -f wildcard-certificate</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">certificate</font><font color="#F3E651">.</font><font color="#ff0000">cert-manager</font><font color="#F3E651">.</font><font color="#ff0000">io/f3s-lan-wildcard created</font>
</pre>
<br />
<span>This creates:</span><br />
@@ -975,10 +980,10 @@ certificate.cert-manager.io/f3s-lan-wildcard created
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get certificate -n cert-manager
-NAME READY SECRET AGE
-f3s-lan-wildcard True f3s-lan-tls 5m
-selfsigned-ca True selfsigned-ca-secret 5m
+<pre><font color="#ff0000">$ kubectl get certificate -n cert-manager</font>
+<font color="#ff0000">NAME READY SECRET AGE</font>
+<font color="#ff0000">f3s-lan-wildcard True f3s-lan-tls 5m</font>
+<font color="#ff0000">selfsigned-ca True selfsigned-ca-secret 5m</font>
</pre>
<br />
<span>The wildcard certificate (<span class='inlinecode'>f3s-lan-tls</span>) needs to be copied to any namespace that uses it:</span><br />
@@ -987,9 +992,9 @@ selfsigned-ca True selfsigned-ca-secret 5m
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get secret f3s-lan-tls -n cert-manager -o yaml | \
- sed <font color="#808080">'s/namespace: cert-manager/namespace: services/'</font> | \
- kubectl apply -f -
+<pre><font color="#ff0000">$ kubectl get secret f3s-lan-tls -n cert-manager -o yaml </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> sed </font><font color="#bb00ff">'s/namespace: cert-manager/namespace: services/'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> kubectl apply -f -</font>
</pre>
<br />
<h3 style='display: inline' id='configuring-freebsd-relayd-for-lan-access'>Configuring FreeBSD relayd for LAN access</h3><br />
@@ -1000,7 +1005,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install -y relayd
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install -y relayd</font>
</pre>
<br />
<span>Create <span class='inlinecode'>/usr/local/etc/relayd.conf</span>:</span><br />
@@ -1036,10 +1041,10 @@ pass out quick
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas sysrc pf_enable=YES pflog_enable=YES relayd_enable=YES
-paul@f0:~ % doas service pf start
-paul@f0:~ % doas service pflog start
-paul@f0:~ % doas service relayd start
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">pf_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES </font><font color="#ff0000">pflog_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES </font><font color="#ff0000">relayd_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service pf start</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service pflog start</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service relayd start</font>
</pre>
<br />
<span>Verify <span class='inlinecode'>relayd</span> is listening on the CARP VIP:</span><br />
@@ -1048,9 +1053,9 @@ paul@f0:~ % doas service relayd start
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas sockstat -<font color="#000000">4</font> -l | grep <font color="#000000">192.168</font>.<font color="#000000">1.138</font>
-_relayd relayd <font color="#000000">2903</font> <font color="#000000">11</font> tcp4 <font color="#000000">192.168</font>.<font color="#000000">1.138</font>:<font color="#000000">80</font> *:*
-_relayd relayd <font color="#000000">2903</font> <font color="#000000">12</font> tcp4 <font color="#000000">192.168</font>.<font color="#000000">1.138</font>:<font color="#000000">443</font> *:*
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sockstat -</font><font color="#bb00ff">4</font><font color="#ff0000"> -l </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font>
+<font color="#ff0000">_relayd relayd </font><font color="#bb00ff">2903</font><font color="#ff0000"> </font><font color="#bb00ff">11</font><font color="#ff0000"> tcp4 </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#F3E651">:</font><font color="#bb00ff">80</font><font color="#ff0000"> </font><font color="#F3E651">*:*</font>
+<font color="#ff0000">_relayd relayd </font><font color="#bb00ff">2903</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#ff0000"> tcp4 </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#F3E651">:</font><font color="#bb00ff">443</font><font color="#ff0000"> </font><font color="#F3E651">*:*</font>
</pre>
<br />
<span>Repeat the same configuration on f1. Both hosts will run <span class='inlinecode'>relayd</span> listening on the CARP VIP, but only the CARP MASTER will respond to traffic. When failover occurs, the new MASTER takes over seamlessly.</span><br />
@@ -1102,12 +1107,12 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl apply -f ingress-lan.yaml
-ingress.networking.k8s.io/ingress-lan created
+<pre><font color="#ff0000">$ kubectl apply -f ingress-lan</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">ingress</font><font color="#F3E651">.</font><font color="#ff0000">networking</font><font color="#F3E651">.</font><font color="#ff0000">k8s</font><font color="#F3E651">.</font><font color="#ff0000">io/ingress-lan created</font>
-$ curl -k https://f3s.lan.foo.zone
-HTTP/<font color="#000000">2</font> <font color="#000000">302</font>
-location: /app/
+<font color="#ff0000">$ curl -k https</font><font color="#F3E651">:</font><font color="#ff0000">//f3s</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000">HTTP</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">302</font><font color="#ff0000"> </font>
+<font color="#ff0000">location</font><font color="#F3E651">:</font><font color="#ff0000"> /app</font><font color="#F3E651">/</font>
</pre>
<br />
<h3 style='display: inline' id='client-side-dns-and-ca-setup'>Client-side DNS and CA setup</h3><br />
@@ -1120,10 +1125,10 @@ location: /app/
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ sudo tee -a /etc/hosts &lt;&lt; <font color="#808080">'EOF'</font>
-<i><font color="silver"># f3s LAN services</font></i>
-<font color="#000000">192.168</font>.<font color="#000000">1.138</font> f3s.lan.foo.zone
-EOF
+<pre><font color="#ff0000">$ sudo tee -a /etc/hosts </font><font color="#F3E651">&lt;&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">'EOF'</font>
+<i><font color="#ababab"># f3s LAN services</font></i>
+<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.138</font><font color="#ff0000"> f3s</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font>
+<font color="#ff0000">EOF</font>
</pre>
<br />
<span>The CARP VIP <span class='inlinecode'>192.168.1.138</span> provides high availability—traffic automatically fails over to the backup host if the master goes down.</span><br />
@@ -1134,8 +1139,8 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get secret selfsigned-ca-secret -n cert-manager -o jsonpath=<font color="#808080">'{.data.ca</font>\.<font color="#808080">crt}'</font> | \
- base64 -d &gt; f3s-lan-ca.crt
+<pre><font color="#ff0000">$ kubectl get secret selfsigned-ca-secret -n cert-manager -o </font><font color="#ff0000">jsonpath</font><font color="#F3E651">=</font><font color="#bb00ff">'{.data.ca</font><font color="#ffffff">\.</font><font color="#bb00ff">crt}'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> base64 -d </font><font color="#F3E651">&gt;</font><font color="#ff0000"> f3s-lan-ca</font><font color="#F3E651">.</font><font color="#ff0000">crt</font>
</pre>
<br />
<span>Install the CA certificate on Linux (Fedora/Rocky):</span><br />
@@ -1144,8 +1149,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ sudo cp f3s-lan-ca.crt /etc/pki/ca-trust/source/anchors/
-$ sudo update-ca-trust
+<pre><font color="#ff0000">$ sudo cp f3s-lan-ca</font><font color="#F3E651">.</font><font color="#ff0000">crt /etc/pki/ca-trust/source/anchors</font><font color="#F3E651">/</font>
+<font color="#ff0000">$ sudo update-ca-trust</font>
</pre>
<br />
<span>After trusting the CA, browsers will accept the LAN certificates without warnings.</span><br />
@@ -1194,7 +1199,7 @@ $ sudo update-ca-trust
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># mkdir -p /data/nfs/k3svolumes/registry</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir -p /data/nfs/k3svolumes/registry</font></i>
</pre>
<br />
<h3 style='display: inline' id='install-or-upgrade-the-chart'>Install (or upgrade) the chart</h3><br />
@@ -1205,9 +1210,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git clone https://codeberg.org/snonux/conf/f3s.git
-$ cd conf/f3s/examples/conf/f3s/registry
-$ helm upgrade --install registry ./helm-chart --namespace infra --create-namespace
+<pre><font color="#ff0000">$ git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/conf/f3s</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">$ cd conf/f3s/examples/conf/f3s/registry</font>
+<font color="#ff0000">$ helm upgrade --install registry </font><font color="#F3E651">.</font><font color="#ff0000">/helm-chart --namespace infra --create-namespace</font>
</pre>
<br />
<span>Helm creates the <span class='inlinecode'>infra</span> namespace if it does not exist, provisions a <span class='inlinecode'>PersistentVolume</span>/<span class='inlinecode'>PersistentVolumeClaim</span> pair that points at <span class='inlinecode'>/data/nfs/k3svolumes/registry</span>, and spins up a single registry pod exposed via the <span class='inlinecode'>docker-registry-service</span> NodePort (<span class='inlinecode'>30001</span>). Verify everything is up before continuing:</span><br />
@@ -1216,13 +1221,13 @@ $ helm upgrade --install registry ./helm-chart --namespace infra --create-namesp
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get pods --namespace infra
-NAME READY STATUS RESTARTS AGE
-docker-registry-6bc9bb46bb-6grkr <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">6</font> (53d ago) 54d
+<pre><font color="#ff0000">$ kubectl get pods --namespace infra</font>
+<font color="#ff0000">NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">docker-registry-6bc9bb46bb-6grkr </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">6</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">53d ago</font><font color="#F3E651">)</font><font color="#ff0000"> 54d</font>
-$ kubectl get svc docker-registry-service -n infra
-NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
-docker-registry-service NodePort <font color="#000000">10.43</font>.<font color="#000000">141.56</font> &lt;none&gt; <font color="#000000">5000</font>:<font color="#000000">30001</font>/TCP 54d
+<font color="#ff0000">$ kubectl get svc docker-registry-service -n infra</font>
+<font color="#ff0000">NAME TYPE CLUSTER-IP EXTERNAL-IP PORT</font><font color="#F3E651">(</font><font color="#ff0000">S</font><font color="#F3E651">)</font><font color="#ff0000"> AGE</font>
+<font color="#ff0000">docker-registry-service NodePort </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">141.56</font><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000">none</font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">5000</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#ff0000">/TCP 54d</font>
</pre>
<br />
<h3 style='display: inline' id='allow-nodes-and-workstations-to-trust-the-registry'>Allow nodes and workstations to trust the registry</h3><br />
@@ -1240,16 +1245,16 @@ docker-registry-service NodePort <font color="#000000">10.43</font>.<font co
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cat &lt;&lt;<font color="#808080">"EOF"</font> | sudo tee /etc/docker/daemon.json &gt;/dev/null
-{
- <font color="#808080">"insecure-registries"</font>: [
- <font color="#808080">"r0.lan.buetow.org:30001"</font>,
- <font color="#808080">"r1.lan.buetow.org:30001"</font>,
- <font color="#808080">"r2.lan.buetow.org:30001"</font>
- ]
-}
-EOF
-$ sudo systemctl restart docker
+<pre><font color="#ff0000">$ cat </font><font color="#F3E651">&lt;&lt;</font><font color="#bb00ff">"EOF"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sudo tee /etc/docker/daemon</font><font color="#F3E651">.</font><font color="#ff0000">json </font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null</font>
+<font color="#ff0000">{</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"insecure-registries"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">[</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"r0.lan.buetow.org:30001"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"r1.lan.buetow.org:30001"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"r2.lan.buetow.org:30001"</font>
+<font color="#ff0000"> </font><font color="#F3E651">]</font>
+<font color="#ff0000">}</font>
+<font color="#ff0000">EOF</font>
+<font color="#ff0000">$ sudo systemctl restart docker</font>
</pre>
<br />
<span>On each k3s node, make <span class='inlinecode'>registry.lan.buetow.org</span> resolve locally and point k3s at the NodePort:</span><br />
@@ -1258,19 +1263,19 @@ $ sudo systemctl restart docker
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ <b><u><font color="#000000">for</font></u></b> node <b><u><font color="#000000">in</font></u></b> r0 r1 r2; <b><u><font color="#000000">do</font></u></b>
-&gt; ssh root@$node <font color="#808080">"echo '127.0.0.1 registry.lan.buetow.org' &gt;&gt; /etc/hosts"</font>
-&gt; <b><u><font color="#000000">done</font></u></b>
+<pre><font color="#ff0000">$ </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> node </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> r0 r1 r2</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> ssh root@</font><font color="#ff0000">$node</font><font color="#ff0000"> </font><font color="#bb00ff">"echo '127.0.0.1 registry.lan.buetow.org' &gt;&gt; /etc/hosts"</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
-$ <b><u><font color="#000000">for</font></u></b> node <b><u><font color="#000000">in</font></u></b> r0 r1 r2; <b><u><font color="#000000">do</font></u></b>
-&gt; ssh root@$node <font color="#808080">"cat &lt;&lt;'EOF' &gt; /etc/rancher/k3s/registries.yaml</font>
-<font color="#808080">mirrors:</font>
-<font color="#808080"> "</font>registry.lan.buetow.org:<font color="#000000">30001</font><font color="#808080">":</font>
-<font color="#808080"> endpoint:</font>
-<font color="#808080"> - "</font>http://localhost:<font color="#000000">30001</font><font color="#808080">"</font>
-<font color="#808080">EOF</font>
-<font color="#808080">systemctl restart k3s"</font>
-&gt; <b><u><font color="#000000">done</font></u></b>
+<font color="#ff0000">$ </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> node </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> r0 r1 r2</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> ssh root@</font><font color="#ff0000">$node</font><font color="#ff0000"> </font><font color="#bb00ff">"cat &lt;&lt;'EOF' &gt; /etc/rancher/k3s/registries.yaml</font>
+<font color="#bb00ff">mirrors:</font>
+<font color="#bb00ff"> "</font><font color="#ff0000">registry</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#bb00ff">":</font>
+<font color="#bb00ff"> endpoint:</font>
+<font color="#bb00ff"> - "</font><font color="#ff0000">http</font><font color="#F3E651">:</font><font color="#ff0000">//localhost</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#bb00ff">"</font>
+<font color="#bb00ff">EOF</font>
+<font color="#bb00ff">systemctl restart k3s"</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
</pre>
<br />
<span>Thanks to the relayd configuration earlier in the post, the external hostnames (<span class='inlinecode'>f3s.foo.zone</span>, etc.) can already reach NodePort <span class='inlinecode'>30001</span>, so publishing the registry later to the outside world is just a matter of wiring the DNS the same way as the ingress hosts. But by default, that&#39;s not enabled for now due to security reasons.</span><br />
@@ -1283,8 +1288,8 @@ $ <b><u><font color="#000000">for</font></u></b> node <b><u><font color="#000000
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ docker tag my-app:latest r0.lan.buetow.org:<font color="#000000">30001</font>/my-app:latest
-$ docker push r0.lan.buetow.org:<font color="#000000">30001</font>/my-app:latest
+<pre><font color="#ff0000">$ docker tag my-app</font><font color="#F3E651">:</font><font color="#ff0000">latest r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#ff0000">/my-app</font><font color="#F3E651">:</font><font color="#ff0000">latest</font>
+<font color="#ff0000">$ docker push r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#ff0000">/my-app</font><font color="#F3E651">:</font><font color="#ff0000">latest</font>
</pre>
<br />
<span>Inside the cluster (or from other nodes), reference the image via the service name that Helm created:</span><br />
@@ -1299,9 +1304,9 @@ image: docker-registry-service:5000/my-app:latest
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl run registry-test \
-&gt; --image=docker-registry-service:<font color="#000000">5000</font>/my-app:latest \
-&gt; --restart=Never -n <b><u><font color="#000000">test</font></u></b> --command -- sleep <font color="#000000">300</font>
+<pre><font color="#ff0000">$ kubectl run registry-test </font><font color="#F3E651">\</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> --image</font><font color="#F3E651">=</font><font color="#ff0000">docker-registry-service</font><font color="#F3E651">:</font><font color="#bb00ff">5000</font><font color="#ff0000">/my-app</font><font color="#F3E651">:</font><font color="#ff0000">latest </font><font color="#F3E651">\</font>
+<font color="#F3E651">&gt;</font><font color="#ff0000"> --restart</font><font color="#F3E651">=</font><font color="#ff0000">Never -n </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> --command -- sleep </font><font color="#bb00ff">300</font>
</pre>
<br />
<span>If the pod pulls successfully, the private registry is ready for use by the rest of the workloads. Note, that the commands above actually don&#39;t work, they are only for illustration purpose mentioned here.</span><br />
@@ -1318,11 +1323,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd conf/f3s/examples/conf/f3s/anki-sync-server/docker-image
-$ docker build -t anki-sync-server:<font color="#000000">25.07</font>.5b --build-arg ANKI_VERSION=<font color="#000000">25.07</font>.<font color="#000000">5</font> .
-$ docker tag anki-sync-server:<font color="#000000">25.07</font>.5b \
- r0.lan.buetow.org:<font color="#000000">30001</font>/anki-sync-server:<font color="#000000">25.07</font>.5b
-$ docker push r0.lan.buetow.org:<font color="#000000">30001</font>/anki-sync-server:<font color="#000000">25.07</font>.5b
+<pre><font color="#ff0000">$ cd conf/f3s/examples/conf/f3s/anki-sync-server/docker-image</font>
+<font color="#ff0000">$ docker build -t anki-sync-server</font><font color="#F3E651">:</font><font color="#bb00ff">25.07</font><font color="#F3E651">.</font><font color="#ff0000">5b --build-arg </font><font color="#ff0000">ANKI_VERSION</font><font color="#F3E651">=</font><font color="#bb00ff">25.07</font><font color="#F3E651">.</font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#F3E651">.</font>
+<font color="#ff0000">$ docker tag anki-sync-server</font><font color="#F3E651">:</font><font color="#bb00ff">25.07</font><font color="#F3E651">.</font><font color="#ff0000">5b </font><font color="#F3E651">\</font>
+<font color="#ff0000"> r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#ff0000">/anki-sync-server</font><font color="#F3E651">:</font><font color="#bb00ff">25.07</font><font color="#F3E651">.</font><font color="#ff0000">5b</font>
+<font color="#ff0000">$ docker push r0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">30001</font><font color="#ff0000">/anki-sync-server</font><font color="#F3E651">:</font><font color="#bb00ff">25.07</font><font color="#F3E651">.</font><font color="#ff0000">5b</font>
</pre>
<br />
<span>Because every k3s node treats <span class='inlinecode'>registry.lan.buetow.org:30001</span> as an insecure mirror (see above), the push succeeds regardless of which node answers. If you prefer the shortcut, <span class='inlinecode'>just f3s</span> in that directory performs the same build/tag/push sequence.</span><br />
@@ -1335,11 +1340,11 @@ $ docker push r0.lan.buetow.org:<font color="#000000">30001</font>/anki-sync-ser
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ ssh root@r0 <font color="#808080">"mkdir -p /data/nfs/k3svolumes/anki-sync-server/anki_data"</font>
-$ kubectl create namespace services
-$ kubectl create secret generic anki-sync-server-secret \
- --from-literal=SYNC_USER1=<font color="#808080">'paul:SECRETPASSWORD'</font> \
- -n services
+<pre><font color="#ff0000">$ ssh root@r0 </font><font color="#bb00ff">"mkdir -p /data/nfs/k3svolumes/anki-sync-server/anki_data"</font>
+<font color="#ff0000">$ kubectl create namespace services</font>
+<font color="#ff0000">$ kubectl create secret generic anki-sync-server-secret </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --from-literal</font><font color="#F3E651">=</font><font color="#ff0000">SYNC_USER1</font><font color="#F3E651">=</font><font color="#bb00ff">'paul:SECRETPASSWORD'</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -n services</font>
</pre>
<br />
<span>If the <span class='inlinecode'>services</span> namespace already exists, you can skip that line or let Kubernetes tell you the namespace is unchanged.</span><br />
@@ -1352,8 +1357,8 @@ $ kubectl create secret generic anki-sync-server-secret \
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd ../helm-chart
-$ helm upgrade --install anki-sync-server . -n services
+<pre><font color="#ff0000">$ cd </font><font color="#F3E651">..</font><font color="#ff0000">/helm-chart</font>
+<font color="#ff0000">$ helm upgrade --install anki-sync-server </font><font color="#F3E651">.</font><font color="#ff0000"> -n services</font>
</pre>
<br />
<span>Helm provisions everything referenced in the templates:</span><br />
@@ -1372,9 +1377,9 @@ containers:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get pods -n services
-$ kubectl get ingress anki-sync-server-ingress -n services
-$ curl https://anki.f3s.foo.zone/health
+<pre><font color="#ff0000">$ kubectl get pods -n services</font>
+<font color="#ff0000">$ kubectl get ingress anki-sync-server-ingress -n services</font>
+<font color="#ff0000">$ curl https</font><font color="#F3E651">:</font><font color="#ff0000">//anki</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">zone/health</font>
</pre>
<br />
<span>All of this runs solely on first-party images that now live in the private registry, proving the full flow from local bild to WireGuard-exposed service.</span><br />
@@ -1389,14 +1394,14 @@ $ curl https://anki.f3s.foo.zone/health
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&gt; ~ kubectl <b><u><font color="#000000">exec</font></u></b> -n services deploy/miniflux-postgres -- id postgres
-uid=<font color="#000000">999</font>(postgres) gid=<font color="#000000">999</font>(postgres) groups=<font color="#000000">999</font>(postgres)
+<pre><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000"> kubectl </font><b><font color="#ffffff">exec</font></b><font color="#ff0000"> -n services deploy/miniflux-postgres -- id postgres</font>
+<font color="#ff0000">uid</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#ff0000">gid</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#ff0000">groups</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font>
-[root@r0 ~]<i><font color="silver"># id postgres</font></i>
-uid=<font color="#000000">999</font>(postgres) gid=<font color="#000000">999</font>(postgres) groups=<font color="#000000">999</font>(postgres)
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># id postgres</font></i>
+<font color="#ff0000">uid</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#ff0000">gid</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#ff0000">groups</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font>
-paul@f0:~ % doas id postgres
-uid=<font color="#000000">999</font>(postgres) gid=<font color="#000000">99</font>(postgres) groups=<font color="#000000">999</font>(postgres)
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas id postgres</font>
+<font color="#ff0000">uid</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#ff0000">gid</font><font color="#F3E651">=</font><font color="#bb00ff">99</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#ff0000">groups</font><font color="#F3E651">=</font><font color="#bb00ff">999</font><font color="#F3E651">(</font><font color="#ff0000">postgres</font><font color="#F3E651">)</font>
</pre>
<br />
<span>The Rocky Linux workers get their matching user with plain <span class='inlinecode'>useradd</span>/<span class='inlinecode'>groupadd</span> (repeat on <span class='inlinecode'>r0</span>, <span class='inlinecode'>r1</span>, and <span class='inlinecode'>r2</span>):</span><br />
@@ -1405,10 +1410,10 @@ uid=<font color="#000000">999</font>(postgres) gid=<font color="#000000">99</fon
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># groupadd --gid 999 postgres</font></i>
-[root@r0 ~]<i><font color="silver"># useradd --uid 999 --gid 999 \</font></i>
- --home-dir /var/lib/pgsql \
- --shell /sbin/nologin postgres
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># groupadd --gid 999 postgres</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># useradd --uid 999 --gid 999 \</font></i>
+<font color="#ff0000"> --home-dir /var/lib/pgsql </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --shell /sbin/nologin postgres</font>
</pre>
<br />
<span>FreeBSD uses <span class='inlinecode'>pw</span>, so on each NFS server (<span class='inlinecode'>f0</span>, <span class='inlinecode'>f1</span>, <span class='inlinecode'>f2</span>) I created the same account and disabled shell access:</span><br />
@@ -1417,9 +1422,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pw groupadd postgres -g <font color="#000000">999</font>
-paul@f0:~ % doas pw useradd postgres -u <font color="#000000">999</font> -g postgres \
- -d /var/db/postgres -s /usr/sbin/nologin
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pw groupadd postgres -g </font><font color="#bb00ff">999</font>
+<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pw useradd postgres -u </font><font color="#bb00ff">999</font><font color="#ff0000"> -g postgres </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -d /var/db/postgres -s /usr/sbin/nologin</font>
</pre>
<br />
<span>Once the UID/GID exist everywhere, the Miniflux chart in <span class='inlinecode'>examples/conf/f3s/miniflux</span> deploys cleanly. The chart provisions both the application and its bundled Postgres database, mounts the exported directory, and builds the DSN at runtime. The important bits live in <span class='inlinecode'>helm-chart/templates/persistent-volumes.yaml</span> and <span class='inlinecode'>deployment.yaml</span>:</span><br />
@@ -1444,13 +1449,13 @@ containers:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd examples/conf/f3s/miniflux/helm-chart
-$ mkdir -p /data/nfs/k3svolumes/miniflux/data
-$ kubectl create secret generic miniflux-db-password \
- --from-literal=fluxdb_password=<font color="#808080">'YOUR_PASSWORD'</font> -n services
-$ kubectl create secret generic miniflux-admin-password \
- --from-literal=admin_password=<font color="#808080">'YOUR_ADMIN_PASSWORD'</font> -n services
-$ helm upgrade --install miniflux . -n services --create-namespace
+<pre><font color="#ff0000">$ cd examples/conf/f3s/miniflux/helm-chart</font>
+<font color="#ff0000">$ mkdir -p /data/nfs/k3svolumes/miniflux/data</font>
+<font color="#ff0000">$ kubectl create secret generic miniflux-db-password </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --from-literal</font><font color="#F3E651">=</font><font color="#ff0000">fluxdb_password</font><font color="#F3E651">=</font><font color="#bb00ff">'YOUR_PASSWORD'</font><font color="#ff0000"> -n services</font>
+<font color="#ff0000">$ kubectl create secret generic miniflux-admin-password </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --from-literal</font><font color="#F3E651">=</font><font color="#ff0000">admin_password</font><font color="#F3E651">=</font><font color="#bb00ff">'YOUR_ADMIN_PASSWORD'</font><font color="#ff0000"> -n services</font>
+<font color="#ff0000">$ helm upgrade --install miniflux </font><font color="#F3E651">.</font><font color="#ff0000"> -n services --create-namespace</font>
</pre>
<br />
<span>And to verify it&#39;s all up:</span><br />
@@ -1510,11 +1515,12 @@ replicaset.apps/miniflux-server-85d7c64664 1 1 1 54d
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html b/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html
index 1d521fd6..c4f8a629 100644
--- a/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html
+++ b/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Key Takeaways from The Well-Grounded Rubyist</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.gmi">Gemini</a>
</p>
@@ -54,19 +59,19 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># At the top level, self is the main object</font></i>
-p <b><u><font color="#000000">self</font></u></b>
-<i><font color="silver"># =&gt; main</font></i>
-p <b><u><font color="#000000">self</font></u></b>.<b><u><font color="#000000">class</font></u></b>
-<i><font color="silver"># =&gt; Object</font></i>
+<pre><i><font color="#ababab"># At the top level, self is the main object</font></i>
+<font color="#ff0000">p </font><b><font color="#ffffff">self</font></b>
+<i><font color="#ababab"># =&gt; main</font></i>
+<font color="#ff0000">p </font><b><font color="#ffffff">self</font></b><font color="#F3E651">.</font><b><font color="#ffffff">class</font></b>
+<i><font color="#ababab"># =&gt; Object</font></i>
-<b><u><font color="#000000">def</font></u></b> foo
- <i><font color="silver"># Inside a method, self is the object that received the call</font></i>
- p <b><u><font color="#000000">self</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<b><font color="#ffffff">def</font></b><font color="#ff0000"> foo</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Inside a method, self is the object that received the call</font></i>
+<font color="#ff0000"> p </font><b><font color="#ffffff">self</font></b>
+<b><font color="#ffffff">end</font></b>
-foo
-<i><font color="silver"># =&gt; main</font></i>
+<font color="#ff0000">foo</font>
+<i><font color="#ababab"># =&gt; main</font></i>
</pre>
<br />
<span>This code demonstrates how <span class='inlinecode'>self</span> changes depending on the context. At the top level, it&#39;s <span class='inlinecode'>main</span>, an instance of <span class='inlinecode'>Object</span>. When <span class='inlinecode'>foo</span> is called without a receiver, it&#39;s called on <span class='inlinecode'>main</span>.</span><br />
@@ -79,17 +84,17 @@ foo
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>obj = <font color="#808080">"a string"</font>
+<pre><font color="#ff0000">obj </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"a string"</font>
-<b><u><font color="#000000">def</font></u></b> obj.shout
- <b><u><font color="#000000">self</font></u></b>.upcase + <font color="#808080">"!"</font>
-<b><u><font color="#000000">end</font></u></b>
+<b><font color="#ffffff">def</font></b><font color="#ff0000"> obj</font><font color="#F3E651">.</font><font color="#ff0000">shout</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">self</font></b><font color="#F3E651">.</font><font color="#ff0000">upcase </font><font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#bb00ff">"!"</font>
+<b><font color="#ffffff">end</font></b>
-p obj.shout
-<i><font color="silver"># =&gt; "A STRING!"</font></i>
+<font color="#ff0000">p obj</font><font color="#F3E651">.</font><font color="#ff0000">shout</font>
+<i><font color="#ababab"># =&gt; "A STRING!"</font></i>
-obj2 = <font color="#808080">"another string"</font>
-<i><font color="silver"># obj2.shout would raise a NoMethodError</font></i>
+<font color="#ff0000">obj2 </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"another string"</font>
+<i><font color="#ababab"># obj2.shout would raise a NoMethodError</font></i>
</pre>
<br />
<span>Here, the <span class='inlinecode'>shout</span> method is only available on the <span class='inlinecode'>obj</span> object. This is a powerful feature for adding behavior to specific instances.</span><br />
@@ -102,15 +107,15 @@ obj2 = <font color="#808080">"another string"</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>MyClass = Class.new <b><u><font color="#000000">do</font></u></b>
- <b><u><font color="#000000">def</font></u></b> say_hello
- puts <font color="#808080">"Hello from a dynamically created class!"</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">MyClass </font><font color="#F3E651">=</font><font color="#ff0000"> Class</font><font color="#F3E651">.</font><font color="#ff0000">new </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">def</font></b><font color="#ff0000"> say_hello</font>
+<font color="#ff0000"> puts </font><font color="#bb00ff">"Hello from a dynamically created class!"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
-instance = MyClass.new
-instance.say_hello
-<i><font color="silver"># =&gt; Hello from a dynamically created class!</font></i>
+<font color="#ff0000">instance </font><font color="#F3E651">=</font><font color="#ff0000"> MyClass</font><font color="#F3E651">.</font><font color="#ff0000">new</font>
+<font color="#ff0000">instance</font><font color="#F3E651">.</font><font color="#ff0000">say_hello</font>
+<i><font color="#ababab"># =&gt; Hello from a dynamically created class!</font></i>
</pre>
<br />
<span>This shows how to create a new class and assign it to a constant. This is what happens behind the scenes when you use the <span class='inlinecode'>class</span> keyword.</span><br />
@@ -127,27 +132,27 @@ instance.say_hello
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># For ranges, it checks for inclusion</font></i>
-p (<font color="#000000">1</font>..<font color="#000000">5</font>) === <font color="#000000">3</font> <i><font color="silver"># =&gt; true</font></i>
+<pre><i><font color="#ababab"># For ranges, it checks for inclusion</font></i>
+<font color="#ff0000">p </font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">..</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">===</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><i><font color="#ababab"># =&gt; true</font></i>
-<i><font color="silver"># For classes, it checks if the object is an instance of the class</font></i>
-p String === <font color="#808080">"hello"</font> <i><font color="silver"># =&gt; true</font></i>
+<i><font color="#ababab"># For classes, it checks if the object is an instance of the class</font></i>
+<font color="#ff0000">p String </font><font color="#F3E651">===</font><font color="#ff0000"> </font><font color="#bb00ff">"hello"</font><font color="#ff0000"> </font><i><font color="#ababab"># =&gt; true</font></i>
-<i><font color="silver"># For regexes, it checks for a match</font></i>
-p /llo/ === <font color="#808080">"hello"</font> <i><font color="silver"># =&gt; true</font></i>
+<i><font color="#ababab"># For regexes, it checks for a match</font></i>
+<font color="#ff0000">p </font><font color="#ff0000">/llo/</font><font color="#ff0000"> </font><font color="#F3E651">===</font><font color="#ff0000"> </font><font color="#bb00ff">"hello"</font><font color="#ff0000"> </font><i><font color="#ababab"># =&gt; true</font></i>
-<b><u><font color="#000000">def</font></u></b> check(value)
- <b><u><font color="#000000">case</font></u></b> value
- <b><u><font color="#000000">when</font></u></b> String
- <font color="#808080">"It's a string"</font>
- <b><u><font color="#000000">when</font></u></b> (<font color="#000000">1</font>..<font color="#000000">10</font>)
- <font color="#808080">"It's a number between 1 and 10"</font>
- <b><u><font color="#000000">else</font></u></b>
- <font color="#808080">"Something else"</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<b><font color="#ffffff">def</font></b><font color="#ff0000"> check</font><font color="#F3E651">(</font><font color="#ff0000">value</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">case</font></b><font color="#ff0000"> value</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">when</font></b><font color="#ff0000"> String</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"It's a string"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">when</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">..</font><font color="#bb00ff">10</font><font color="#F3E651">)</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"It's a number between 1 and 10"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> </font><font color="#bb00ff">"Something else"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
-p check(<font color="#000000">5</font>) <i><font color="silver"># =&gt; "It's a number between 1 and 10"</font></i>
+<font color="#ff0000">p check</font><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><i><font color="#ababab"># =&gt; "It's a number between 1 and 10"</font></i>
</pre>
<br />
<h3 style='display: inline' id='blocks-and-yield'>Blocks and <span class='inlinecode'>yield</span></h3><br />
@@ -158,18 +163,18 @@ p check(<font color="#000000">5</font>) <i><font color="silver"># =&gt; "It's a
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">def</font></u></b> my_iterator
- puts <font color="#808080">"Entering the method"</font>
- <b><u><font color="#000000">yield</font></u></b>
- puts <font color="#808080">"Back in the method"</font>
- <b><u><font color="#000000">yield</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">def</font></b><font color="#ff0000"> my_iterator</font>
+<font color="#ff0000"> puts </font><font color="#bb00ff">"Entering the method"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">yield</font></b>
+<font color="#ff0000"> puts </font><font color="#bb00ff">"Back in the method"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">yield</font></b>
+<b><font color="#ffffff">end</font></b>
-my_iterator { puts <font color="#808080">"Inside the block"</font> }
-<i><font color="silver"># Entering the method</font></i>
-<i><font color="silver"># Inside the block</font></i>
-<i><font color="silver"># Back in the method</font></i>
-<i><font color="silver"># Inside the block</font></i>
+<font color="#ff0000">my_iterator </font><font color="#F3E651">{</font><font color="#ff0000"> puts </font><font color="#bb00ff">"Inside the block"</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<i><font color="#ababab"># Entering the method</font></i>
+<i><font color="#ababab"># Inside the block</font></i>
+<i><font color="#ababab"># Back in the method</font></i>
+<i><font color="#ababab"># Inside the block</font></i>
</pre>
<br />
<span>This simple iterator shows how <span class='inlinecode'>yield</span> transfers control to the block. You can also pass arguments to <span class='inlinecode'>yield</span> and get a return value from the block.</span><br />
@@ -178,13 +183,13 @@ my_iterator { puts <font color="#808080">"Inside the block"</font> }
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">def</font></u></b> with_return
- result = <b><u><font color="#000000">yield</font></u></b>(<font color="#000000">5</font>)
- puts <font color="#808080">"The block returned #{result}"</font>
-<b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">def</font></b><font color="#ff0000"> with_return</font>
+<font color="#ff0000"> result </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">yield</font></b><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font>
+<font color="#ff0000"> puts </font><font color="#bb00ff">"The block returned #{result}"</font>
+<b><font color="#ffffff">end</font></b>
-with_return { |n| n * <font color="#000000">2</font> }
-<i><font color="silver"># =&gt; The block returned 10</font></i>
+<font color="#ff0000">with_return </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">n</font><font color="#F3E651">|</font><font color="#ff0000"> n </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<i><font color="#ababab"># =&gt; The block returned 10</font></i>
</pre>
<br />
<span>This demonstrates passing an argument to the block and using its return value.</span><br />
@@ -201,17 +206,17 @@ with_return { |n| n * <font color="#000000">2</font> }
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Two strings with the same content are different objects</font></i>
-p <font color="#808080">"foo"</font>.object_id
-p <font color="#808080">"foo"</font>.object_id
+<pre><i><font color="#ababab"># Two strings with the same content are different objects</font></i>
+<font color="#ff0000">p </font><font color="#bb00ff">"foo"</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font>
+<font color="#ff0000">p </font><font color="#bb00ff">"foo"</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font>
-<i><font color="silver"># Two symbols with the same content are the same object</font></i>
-p :foo.object_id
-p :foo.object_id
+<i><font color="#ababab"># Two symbols with the same content are the same object</font></i>
+<font color="#ff0000">p </font><font color="#F3E651">:</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font>
+<font color="#ff0000">p </font><font color="#F3E651">:</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font>
-<i><font color="silver"># Modern hash syntax uses symbols as keys</font></i>
-my_hash = { name: <font color="#808080">"Paul"</font>, language: <font color="#808080">"Ruby"</font> }
-p my_hash[:name] <i><font color="silver"># =&gt; "Paul"</font></i>
+<i><font color="#ababab"># Modern hash syntax uses symbols as keys</font></i>
+<font color="#ff0000">my_hash </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"Paul"</font><font color="#F3E651">,</font><font color="#ff0000"> language</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"Ruby"</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000">p my_hash</font><font color="#F3E651">[:</font><font color="#ff0000">name</font><font color="#F3E651">]</font><font color="#ff0000"> </font><i><font color="#ababab"># =&gt; "Paul"</font></i>
</pre>
<br />
<span>This code highlights the difference between strings and symbols and shows the convenient hash syntax.</span><br />
@@ -224,13 +229,13 @@ p my_hash[:name] <i><font color="silver"># =&gt; "Paul"</font></i>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Array of strings</font></i>
-p %w[one two three]
-<i><font color="silver"># =&gt; ["one", "two", "three"]</font></i>
+<pre><i><font color="#ababab"># Array of strings</font></i>
+<font color="#ff0000">p </font><font color="#F3E651">%</font><font color="#ff0000">w</font><font color="#F3E651">[</font><font color="#ff0000">one two three</font><font color="#F3E651">]</font>
+<i><font color="#ababab"># =&gt; ["one", "two", "three"]</font></i>
-<i><font color="silver"># Array of symbols</font></i>
-p %i[one two three]
-<i><font color="silver"># =&gt; [:one, :two, :three]</font></i>
+<i><font color="#ababab"># Array of symbols</font></i>
+<font color="#ff0000">p </font><font color="#F3E651">%</font><font color="#ff0000">i</font><font color="#F3E651">[</font><font color="#ff0000">one two three</font><font color="#F3E651">]</font>
+<i><font color="#ababab"># =&gt; [:one, :two, :three]</font></i>
</pre>
<br />
<span>A quick way to create arrays. You can also retrieve multiple values at once.</span><br />
@@ -239,13 +244,13 @@ p %i[one two three]
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>arr = [<font color="#000000">10</font>, <font color="#000000">20</font>, <font color="#000000">30</font>, <font color="#000000">40</font>, <font color="#000000">50</font>]
-p arr.values_at(<font color="#000000">0</font>, <font color="#000000">2</font>, <font color="#000000">4</font>)
-<i><font color="silver"># =&gt; [10, 30, 50]</font></i>
+<pre><font color="#ff0000">arr </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">10</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">20</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">30</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">40</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">50</font><font color="#F3E651">]</font>
+<font color="#ff0000">p arr</font><font color="#F3E651">.</font><font color="#ff0000">values_at</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">)</font>
+<i><font color="#ababab"># =&gt; [10, 30, 50]</font></i>
-hash = { a: <font color="#000000">1</font>, b: <font color="#000000">2</font>, c: <font color="#000000">3</font> }
-p hash.values_at(:a, :c)
-<i><font color="silver"># =&gt; [1, 3]</font></i>
+<font color="#ff0000">hash </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> a</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> c</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000">p hash</font><font color="#F3E651">.</font><font color="#ff0000">values_at</font><font color="#F3E651">(:</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">c</font><font color="#F3E651">)</font>
+<i><font color="#ababab"># =&gt; [1, 3]</font></i>
</pre>
<br />
<span>The <span class='inlinecode'>values_at</span> method is a concise way to get multiple elements.</span><br />
@@ -264,11 +269,12 @@ p hash.values_at(:a, :c)
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-11-02-perl-new-features-and-foostats.html b/gemfeed/2025-11-02-perl-new-features-and-foostats.html
index 7e3ab9c9..44f4b61c 100644
--- a/gemfeed/2025-11-02-perl-new-features-and-foostats.html
+++ b/gemfeed/2025-11-02-perl-new-features-and-foostats.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Perl New Features and Foostats</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-11-02-perl-new-features-and-foostats.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-11-02-perl-new-features-and-foostats.gmi">Gemini</a>
</p>
@@ -141,8 +146,8 @@ animation of sorts.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>fishfinger$ grep foostats /etc/daily.<b><u><font color="#000000">local</font></u></b>
-perl /usr/local/bin/foostats.pl --parse-logs --replicate --report
+<pre><font color="#ff0000">fishfinger$ grep foostats /etc/daily</font><font color="#F3E651">.</font><b><font color="#ffffff">local</font></b>
+<font color="#ff0000">perl /usr/local/bin/foostats</font><font color="#F3E651">.</font><font color="#ff0000">pl --parse-logs --replicate --report</font>
</pre>
<br />
<span>Internally, <span class='inlinecode'>Foostats::Logreader</span> parses each line of the log files <span class='inlinecode'>/var/log/daemon*</span> and <span class='inlinecode'>/var/www/logs/access_log*</span>, turns timestamps into <span class='inlinecode'>YYYYMMDD/HHMMSS</span> values, hashes IP addresses with SHA3 (for anonymization), and hands a normalized event to <span class='inlinecode'>Foostats::Filter</span>. The filter compares the URI against entries in <span class='inlinecode'>fooodds.txt</span>, tracks how many times an IP address requests within the exact second, and drops anything suspicious (e.g., from web crawlers or malicious attackers). Valid events reach <span class='inlinecode'>Foostats::Aggregator</span>, which counts requests per protocol, records unique visitors for the Gemtext and Atom feeds, and remembers page-level IP sets. <span class='inlinecode'>Foostats::FileOutputter</span> writes the result as gzipped JSON files—one per day and per protocol—with IPv4/IPv6 splits, filtered counters, feed readership, and hashes for long URLs.</span><br />
@@ -200,17 +205,17 @@ perl /usr/local/bin/foostats.pl --parse-logs --replicate --report
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> foo;
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> foo</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">sub</font></u></b> hello {
- <b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello from package foo\n"</font>;
-}
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> hello </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello from package foo\n"</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">package</font></u></b> bar;
+<b><font color="#ffffff">package</font></b><font color="#ff0000"> bar</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">sub</font></u></b> hello {
- <b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello from package bar\n"</font>;
-}
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> hello </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello from package bar\n"</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>But now it is also possible to do this:</span><br />
@@ -219,17 +224,17 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">package</font></u></b> foo {
- <b><u><font color="#000000">sub</font></u></b> hello {
- <b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello from package foo\n"</font>;
- }
-}
+<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> foo </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> hello </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello from package foo\n"</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">package</font></u></b> bar {
- <b><u><font color="#000000">sub</font></u></b> hello {
- <b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello from package bar\n"</font>;
- }
-}
+<b><font color="#ffffff">package</font></b><font color="#ff0000"> bar </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> hello </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello from package bar\n"</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<h2 style='display: inline' id='postfix-dereferencing-keeps-data-structures-tidy'>Postfix dereferencing keeps data structures tidy</h2><br />
@@ -244,9 +249,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">for</font></u></b> <b><u><font color="#000000">my</font></u></b> $elem (@{$array_ref}) {
- <b><u><font color="#000000">print</font></u></b> <font color="#808080">"$elem\n"</font>;
-}
+<pre><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$elem</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@</font><font color="#F3E651">{</font><font color="#ff0000">$array_ref</font><font color="#F3E651">}</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$elem\n"</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>one can now do:</span><br />
@@ -255,9 +260,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">for</font></u></b> <b><u><font color="#000000">my</font></u></b> $elem ($array_ref-&gt;@*) {
- <b><u><font color="#000000">print</font></u></b> <font color="#808080">"$elem\n"</font>;
-}
+<pre><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$elem</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$array_ref</font><font color="#F3E651">-&gt;</font><font color="#ff0000">@</font><font color="#F3E651">*)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$elem\n"</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>You see that this feature becomes increasingly useful with nested data structures, e.g. to print all keys of the nested hash:</span><br />
@@ -266,7 +271,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">print</font></u></b> <b><u><font color="#000000">for</font></u></b> <b><u><font color="#000000">keys</font></u></b> $hash-&gt;{stats}-&gt;%*;
+<pre><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><b><font color="#ffffff">keys</font></b><font color="#ff0000"> </font><font color="#ff0000">$hash</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">stats</font><font color="#F3E651">}</font><font color="#F3E651">-&gt;%*;</font>
</pre>
<br />
<span>Loops over like <span class='inlinecode'>$stats-&gt;{page_ips}-&gt;{urls}-&gt;%*</span> or <span class='inlinecode'>$merge{$key}-&gt;{$_}-&gt;%*</span> show which level of the structure is in play. The merger in Foostats updates host and URL statistics without building temporary arrays, and the reporter code mirrors the layout of the final tables. Before postfix dereferencing, the same code relied on braces within braces and was harder to read.</span><br />
@@ -279,10 +284,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">use</font></u></b> v5.<font color="#000000">38</font>;
+<pre><b><font color="#ffffff">use</font></b><font color="#ff0000"> v5</font><font color="#F3E651">.</font><font color="#bb00ff">38</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello, world!\n"</font>; <i><font color="silver"># old way</font></i>
-say <font color="#808080">"Hello, world!"</font>; <i><font color="silver"># new way</font></i>
+<b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello, world!\n"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab"># old way</font></i>
+<font color="#ff0000">say </font><font color="#bb00ff">"Hello, world!"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab"># new way</font></i>
</pre>
<br />
<h2 style='display: inline' id='lexical-subs-promote-local-reasoning'>Lexical subs promote local reasoning</h2><br />
@@ -295,18 +300,18 @@ say <font color="#808080">"Hello, world!"</font>; <i><font color="silver"
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">use</font></u></b> v5.<font color="#000000">38</font>;
+<pre><b><font color="#ffffff">use</font></b><font color="#ff0000"> v5</font><font color="#F3E651">.</font><font color="#bb00ff">38</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">sub</font></u></b> process_lines (@lines) {
- <b><u><font color="#000000">my</font></u></b> <b><u><font color="#000000">sub</font></u></b> trim ($str) {
- $str =~ <b><u><font color="#000000">s</font></u></b><font color="#808080">/^\s+|\s+$//</font>gr;
- }
- <b><u><font color="#000000">return</font></u></b> [ <b><u><font color="#000000">map</font></u></b> { trim($_) } @lines ];
-}
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">process_lines</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@lines</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">trim</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$str</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">$str</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><b><font color="#ffffff">s</font></b><font color="#bb00ff">/^\s+|\s+$//</font><font color="#ff0000">gr</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><b><font color="#ffffff">map</font></b><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#7bc710">trim</font><font color="#F3E651">(</font><font color="#ff0000">$_</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#ff0000">@lines</font><font color="#ff0000"> </font><font color="#F3E651">];</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">my</font></u></b> @raw = (<font color="#808080">" foo "</font>, <font color="#808080">" bar"</font>, <font color="#808080">"baz "</font>);
-<b><u><font color="#000000">my</font></u></b> $cleaned = process_lines(@raw);
-say <b><u><font color="#000000">for</font></u></b> @$cleaned; <i><font color="silver"># prints "foo", "bar", "baz"</font></i>
+<b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">@raw</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">" foo "</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">" bar"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">"baz "</font><font color="#F3E651">);</font>
+<b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$cleaned</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">process_lines</font><font color="#F3E651">(</font><font color="#ff0000">@raw</font><font color="#F3E651">);</font>
+<font color="#ff0000">say </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> @</font><font color="#ff0000">$cleaned</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab"># prints "foo", "bar", "baz"</font></i>
</pre>
<br />
<h2 style='display: inline' id='reference-aliasing-makes-intent-explicit'>Reference aliasing makes intent explicit</h2><br />
@@ -317,13 +322,13 @@ say <b><u><font color="#000000">for</font></u></b> @$cleaned; <i><font color="si
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">use</font></u></b> feature <b><u><font color="#000000">qw</font></u></b>(refaliasing);
+<pre><b><font color="#ffffff">use</font></b><font color="#ff0000"> feature </font><b><font color="#ffffff">qw</font></b><font color="#F3E651">(</font><font color="#ff0000">refaliasing</font><font color="#F3E651">);</font>
-<b><u><font color="#000000">my</font></u></b> $hash = { foo =&gt; <font color="#000000">42</font> };
-\<b><u><font color="#000000">my</font></u></b> $foo = \$hash-&gt;{foo};
+<b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$hash</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> foo </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">42</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
+<font color="#F3E651">\</font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$foo</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">\</font><font color="#ff0000">$hash</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">foo</font><font color="#F3E651">}</font><font color="#F3E651">;</font>
-$foo = <font color="#000000">99</font>;
-<b><u><font color="#000000">print</font></u></b> $hash-&gt;{foo}; <i><font color="silver"># prints 99</font></i>
+<font color="#ff0000">$foo</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">99</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#ff0000">$hash</font><font color="#F3E651">-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">foo</font><font color="#F3E651">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab"># prints 99</font></i>
</pre>
<br />
<span>The aggregator in Foostats aliases <span class='inlinecode'>$self-&gt;{stats}{$date_key}</span> before updating counters, so the structure remains intact. Combined with subroutine signatures, this makes it obvious when a piece of data is shared instead of copied, preventing silent bugs. This enables having shorter names for long nested data structures.</span><br />
@@ -338,15 +343,15 @@ $foo = <font color="#000000">99</font>;
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">sub</font></u></b> counter {
- state $count = <font color="#000000">0</font>;
- $count++;
- <b><u><font color="#000000">return</font></u></b> $count;
-}
+<pre><b><font color="#ffffff">sub</font></b><font color="#ff0000"> counter </font><font color="#F3E651">{</font>
+<font color="#ff0000"> state </font><font color="#ff0000">$count</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">$count</font><font color="#F3E651">++;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#ff0000">$count</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-say counter(); <i><font color="silver"># 1</font></i>
-say counter(); <i><font color="silver"># 2</font></i>
-say counter(); <i><font color="silver"># 3</font></i>
+<font color="#ff0000">say </font><font color="#7bc710">counter</font><font color="#F3E651">();</font><font color="#ff0000"> </font><i><font color="#ababab"># 1</font></i>
+<font color="#ff0000">say </font><font color="#7bc710">counter</font><font color="#F3E651">();</font><font color="#ff0000"> </font><i><font color="#ababab"># 2</font></i>
+<font color="#ff0000">say </font><font color="#7bc710">counter</font><font color="#F3E651">();</font><font color="#ff0000"> </font><i><font color="#ababab"># 3</font></i>
</pre>
<br />
<span>Hash and array state variables have been supported since <span class='inlinecode'>state</span> arrived in Perl 5.10. Scalar state variables were already supported previously.</span><br />
@@ -367,16 +372,16 @@ say counter(); <i><font color="silver"># 3</font></i>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver"># Old way</font></i>
-<b><u><font color="#000000">sub</font></u></b> greet_old { <b><u><font color="#000000">my</font></u></b> $name = <b><u><font color="#000000">shift</font></u></b>; <b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello, $name!\n"</font> }
+<pre><i><font color="#ababab"># Old way</font></i>
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> greet_old </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$name</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello, $name!\n"</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
-<i><font color="silver"># Another old way</font></i>
-<b><u><font color="#000000">sub</font></u></b> greet_old2 ($) { <b><u><font color="#000000">my</font></u></b> $name = <b><u><font color="#000000">shift</font></u></b>; <b><u><font color="#000000">print</font></u></b> <font color="#808080">"Hello, $name!\n"</font> }
+<i><font color="#ababab"># Another old way</font></i>
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">greet_old2</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$name</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Hello, $name!\n"</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
-<i><font color="silver"># New way</font></i>
-<b><u><font color="#000000">sub</font></u></b> greet ($name) { say <font color="#808080">"Hello, $name!"</font>; }
+<i><font color="#ababab"># New way</font></i>
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">greet</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$name</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> say </font><font color="#bb00ff">"Hello, $name!"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
-greet(<font color="#808080">"Alice"</font>); <i><font color="silver"># prints "Hello, Alice!"</font></i>
+<font color="#7bc710">greet</font><font color="#F3E651">(</font><font color="#bb00ff">"Alice"</font><font color="#F3E651">);</font><font color="#ff0000"> </font><i><font color="#ababab"># prints "Hello, Alice!"</font></i>
</pre>
<br />
<span>In Foostats, constructors declare <span class='inlinecode'>sub new ($class, $odds_file, $log_path)</span>, anonymous callbacks expose <span class='inlinecode'>sub ($event)</span>, and helper subs list the values they expect, e.g.:</span><br />
@@ -385,11 +390,11 @@ greet(<font color="#808080">"Alice"</font>); <i><font color="silver"># prints "H
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">my</font></u></b> $anon = <b><u><font color="#000000">sub</font></u></b> ($name) {
- say <font color="#808080">"Hello, $name!"</font>;
-};
+<pre><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$anon</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$name</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> say </font><font color="#bb00ff">"Hello, $name!"</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font><font color="#F3E651">;</font>
-$anon-&gt;(<font color="#808080">"World"</font>); <i><font color="silver"># prints "Hello, World!"</font></i>
+<font color="#ff0000">$anon</font><font color="#F3E651">-&gt;(</font><font color="#bb00ff">"World"</font><font color="#F3E651">);</font><font color="#ff0000"> </font><i><font color="#ababab"># prints "Hello, World!"</font></i>
</pre>
<br />
<h2 style='display: inline' id='defined-or-assignment-for-defaults-without-boilerplate'>Defined-or assignment for defaults without boilerplate</h2><br />
@@ -400,12 +405,12 @@ $anon-&gt;(<font color="#808080">"World"</font>); <i><font color="silver"># prin
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">my</font></u></b> $foo;
-$foo <font color="#808080">//</font>= <font color="#000000">42</font>;
-say $foo; <i><font color="silver"># prints 42</font></i>
+<pre><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$foo</font><font color="#F3E651">;</font>
+<font color="#ff0000">$foo</font><font color="#ff0000"> </font><font color="#bb00ff">//</font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">42</font><font color="#F3E651">;</font>
+<font color="#ff0000">say </font><font color="#ff0000">$foo</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab"># prints 42</font></i>
-$foo <font color="#808080">//</font>= <font color="#000000">99</font>;
-say $foo; <i><font color="silver"># still prints 42, because $foo was already defined</font></i>
+<font color="#ff0000">$foo</font><font color="#ff0000"> </font><font color="#bb00ff">//</font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">99</font><font color="#F3E651">;</font>
+<font color="#ff0000">say </font><font color="#ff0000">$foo</font><font color="#F3E651">;</font><font color="#ff0000"> </font><i><font color="#ababab"># still prints 42, because $foo was already defined</font></i>
</pre>
<br />
<h2 style='display: inline' id='cleanup-with-defer'>Cleanup with <span class='inlinecode'>defer</span></h2><br />
@@ -418,17 +423,17 @@ say $foo; <i><font color="silver"># still prints 42, because $foo was already de
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">use</font></u></b> feature <b><u><font color="#000000">qw</font></u></b>(defer);
+<pre><b><font color="#ffffff">use</font></b><font color="#ff0000"> feature </font><b><font color="#ffffff">qw</font></b><font color="#F3E651">(</font><font color="#ff0000">defer</font><font color="#F3E651">);</font>
-<b><u><font color="#000000">sub</font></u></b> parse_log_file ($path) {
- <b><u><font color="#000000">open</font></u></b> <b><u><font color="#000000">my</font></u></b> $fh, <font color="#808080">'&lt;'</font>, $path or <b><u><font color="#000000">die</font></u></b> <font color="#808080">"Cannot open $path: $!"</font>;
- defer { <b><u><font color="#000000">close</font></u></b> $fh };
+<b><font color="#ffffff">sub</font></b><font color="#ff0000"> </font><font color="#7bc710">parse_log_file</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$path</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">open</font></b><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$fh</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">'&lt;'</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$path</font><font color="#ff0000"> or </font><b><font color="#ffffff">die</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Cannot open $path: $!"</font><font color="#F3E651">;</font>
+<font color="#ff0000"> defer </font><font color="#F3E651">{</font><font color="#ff0000"> </font><b><font color="#ffffff">close</font></b><font color="#ff0000"> </font><font color="#ff0000">$fh</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font>
- <b><u><font color="#000000">while</font></u></b> (<b><u><font color="#000000">my</font></u></b> $line = <font color="#808080">&lt;$fh&gt;</font>) {
- <i><font color="silver"># ... parsing logic that might throw an exception ...</font></i>
- }
- <i><font color="silver"># $fh is automatically closed here</font></i>
-}
+<font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$line</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">&lt;$fh&gt;</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># ... parsing logic that might throw an exception ...</font></i>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># $fh is automatically closed here</font></i>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>This pattern replaces manual <span class='inlinecode'>close</span> calls in every exit path of the subroutine and is more robust than relying solely on object destructors.</span><br />
@@ -457,11 +462,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.html b/gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.html
index c09a659b..1f1fbabf 100644
--- a/gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.html
+++ b/gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>'The Courage To Be Disliked' book notes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-11-02-the-courage-to-be-disliked-book-notes.gmi">Gemini</a>
</p>
@@ -148,11 +153,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.html b/gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.html
index 2f72c299..eb1223a5 100644
--- a/gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.html
+++ b/gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 8: Observability</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-12-07-f3s-kubernetes-with-freebsd-part-8.gmi">Gemini</a>
</p>
@@ -87,10 +92,10 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git clone https://codeberg.org/snonux/conf.git
-$ cd conf
-$ git checkout 15a86f3 <i><font color="silver"># Last commit before ArgoCD migration</font></i>
-$ cd f3s/prometheus/
+<pre><font color="#ff0000">$ git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/conf</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">$ cd conf</font>
+<font color="#ff0000">$ git checkout 15a86f3 </font><i><font color="#ababab"># Last commit before ArgoCD migration</font></i>
+<font color="#ff0000">$ cd f3s/prometheus</font><font color="#F3E651">/</font>
</pre>
<br />
<span>**Current master branch** contains the ArgoCD-managed versions with:</span><br />
@@ -126,8 +131,8 @@ $ cd f3s/prometheus/
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl create namespace monitoring
-namespace/monitoring created
+<pre><font color="#ff0000">$ kubectl create namespace monitoring</font>
+<font color="#ff0000">namespace/monitoring created</font>
</pre>
<br />
<h2 style='display: inline' id='installing-prometheus-and-grafana'>Installing Prometheus and Grafana</h2><br />
@@ -142,8 +147,8 @@ namespace/monitoring created
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
-$ helm repo update
+<pre><font color="#ff0000">$ helm repo add prometheus-community https</font><font color="#F3E651">:</font><font color="#ff0000">//prometheus-community</font><font color="#F3E651">.</font><font color="#ff0000">github</font><font color="#F3E651">.</font><font color="#ff0000">io/helm-charts</font>
+<font color="#ff0000">$ helm repo update</font>
</pre>
<br />
<span>Create the directories on the NFS server for persistent storage:</span><br />
@@ -152,8 +157,8 @@ $ helm repo update
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># mkdir -p /data/nfs/k3svolumes/prometheus/data</font></i>
-[root@r0 ~]<i><font color="silver"># mkdir -p /data/nfs/k3svolumes/grafana/data</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir -p /data/nfs/k3svolumes/prometheus/data</font></i>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir -p /data/nfs/k3svolumes/grafana/data</font></i>
</pre>
<br />
<h3 style='display: inline' id='deploying-with-the-justfile'>Deploying with the Justfile</h3><br />
@@ -169,18 +174,18 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd conf/f3s/prometheus
-$ just install
-kubectl apply -f persistent-volumes.yaml
-persistentvolume/prometheus-data-pv created
-persistentvolume/grafana-data-pv created
-persistentvolumeclaim/grafana-data-pvc created
-helm install prometheus prometheus-community/kube-prometheus-stack \
- --namespace monitoring -f persistence-values.yaml
-NAME: prometheus
-LAST DEPLOYED: ...
-NAMESPACE: monitoring
-STATUS: deployed
+<pre><font color="#ff0000">$ cd conf/f3s/prometheus</font>
+<font color="#ff0000">$ just install</font>
+<font color="#ff0000">kubectl apply -f persistent-volumes</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">persistentvolume/prometheus-data-pv created</font>
+<font color="#ff0000">persistentvolume/grafana-data-pv created</font>
+<font color="#ff0000">persistentvolumeclaim/grafana-data-pvc created</font>
+<font color="#ff0000">helm install prometheus prometheus-community/kube-prometheus-stack </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --namespace monitoring -f persistence-values</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">NAME</font><font color="#F3E651">:</font><font color="#ff0000"> prometheus</font>
+<font color="#ff0000">LAST DEPLOYED</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#ff0000">NAMESPACE</font><font color="#F3E651">:</font><font color="#ff0000"> monitoring</font>
+<font color="#ff0000">STATUS</font><font color="#F3E651">:</font><font color="#ff0000"> deployed</font>
</pre>
<br />
<span>The <span class='inlinecode'>persistence-values.yaml</span> configures Prometheus and Grafana to use the NFS-backed persistent volumes I mentioned earlier, ensuring data survives pod restarts. It also enables scraping of etcd and kube-controller-manager metrics:</span><br />
@@ -219,11 +224,11 @@ kubeControllerManager:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># cat &gt;&gt; /etc/rancher/k3s/config.yaml &lt;&lt; 'EOF'</font></i>
-kube-controller-manager-arg:
- - bind-address=<font color="#000000">0.0</font>.<font color="#000000">0.0</font>
-EOF
-[root@r0 ~]<i><font color="silver"># systemctl restart k3s</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># cat &gt;&gt; /etc/rancher/k3s/config.yaml &lt;&lt; 'EOF'</font></i>
+<font color="#ff0000">kube-controller-manager-arg</font><font color="#F3E651">:</font>
+<font color="#ff0000"> - bind-address</font><font color="#F3E651">=</font><font color="#bb00ff">0.0</font><font color="#F3E651">.</font><font color="#bb00ff">0.0</font>
+<font color="#ff0000">EOF</font>
+<font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># systemctl restart k3s</font></i>
</pre>
<br />
<span>Repeat for <span class='inlinecode'>r1</span> and <span class='inlinecode'>r2</span>. After restarting all nodes, the controller-manager metrics endpoint will be accessible and Prometheus can scrape it.</span><br />
@@ -242,9 +247,9 @@ EOF
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get svc -n monitoring prometheus-kube-prometheus-prometheus
-NAME TYPE CLUSTER-IP PORT(S)
-prometheus-kube-prometheus-prometheus ClusterIP <font color="#000000">10.43</font>.<font color="#000000">152.163</font> <font color="#000000">9090</font>/TCP,<font color="#000000">8080</font>/TCP
+<pre><font color="#ff0000">$ kubectl get svc -n monitoring prometheus-kube-prometheus-prometheus</font>
+<font color="#ff0000">NAME TYPE CLUSTER-IP PORT</font><font color="#F3E651">(</font><font color="#ff0000">S</font><font color="#F3E651">)</font>
+<font color="#ff0000">prometheus-kube-prometheus-prometheus ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">152.163</font><font color="#ff0000"> </font><font color="#bb00ff">9090</font><font color="#ff0000">/TCP</font><font color="#F3E651">,</font><font color="#bb00ff">8080</font><font color="#ff0000">/TCP</font>
</pre>
<br />
<span>Grafana connects to Prometheus using the internal service URL <span class='inlinecode'>http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local:9090</span>. The default Grafana credentials are <span class='inlinecode'>admin</span>/<span class='inlinecode'>prom-operator</span>, which should be changed immediately after first login.</span><br />
@@ -267,7 +272,7 @@ prometheus-kube-prometheus-prometheus ClusterIP <font color="#000000">10.43<
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>[root@r0 ~]<i><font color="silver"># mkdir -p /data/nfs/k3svolumes/loki/data</font></i>
+<pre><font color="#F3E651">[</font><font color="#ff0000">root@r0 </font><font color="#F3E651">~]</font><i><font color="#ababab"># mkdir -p /data/nfs/k3svolumes/loki/data</font></i>
</pre>
<br />
<h3 style='display: inline' id='deploying-loki-and-alloy'>Deploying Loki and Alloy</h3><br />
@@ -282,24 +287,24 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd conf/f3s/loki
-$ just install
-helm repo add grafana https://grafana.github.io/helm-charts || <b><u><font color="#000000">true</font></u></b>
-helm repo update
-kubectl apply -f persistent-volumes.yaml
-persistentvolume/loki-data-pv created
-persistentvolumeclaim/loki-data-pvc created
-helm install loki grafana/loki --namespace monitoring -f values.yaml
-NAME: loki
-LAST DEPLOYED: ...
-NAMESPACE: monitoring
-STATUS: deployed
-...
-helm install alloy grafana/alloy --namespace monitoring -f alloy-values.yaml
-NAME: alloy
-LAST DEPLOYED: ...
-NAMESPACE: monitoring
-STATUS: deployed
+<pre><font color="#ff0000">$ cd conf/f3s/loki</font>
+<font color="#ff0000">$ just install</font>
+<font color="#ff0000">helm repo add grafana https</font><font color="#F3E651">:</font><font color="#ff0000">//grafana</font><font color="#F3E651">.</font><font color="#ff0000">github</font><font color="#F3E651">.</font><font color="#ff0000">io/helm-charts </font><font color="#F3E651">||</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b>
+<font color="#ff0000">helm repo update</font>
+<font color="#ff0000">kubectl apply -f persistent-volumes</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">persistentvolume/loki-data-pv created</font>
+<font color="#ff0000">persistentvolumeclaim/loki-data-pvc created</font>
+<font color="#ff0000">helm install loki grafana/loki --namespace monitoring -f values</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">NAME</font><font color="#F3E651">:</font><font color="#ff0000"> loki</font>
+<font color="#ff0000">LAST DEPLOYED</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#ff0000">NAMESPACE</font><font color="#F3E651">:</font><font color="#ff0000"> monitoring</font>
+<font color="#ff0000">STATUS</font><font color="#F3E651">:</font><font color="#ff0000"> deployed</font>
+<font color="#F3E651">...</font>
+<font color="#ff0000">helm install alloy grafana/alloy --namespace monitoring -f alloy-values</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">NAME</font><font color="#F3E651">:</font><font color="#ff0000"> alloy</font>
+<font color="#ff0000">LAST DEPLOYED</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#ff0000">NAMESPACE</font><font color="#F3E651">:</font><font color="#ff0000"> monitoring</font>
+<font color="#ff0000">STATUS</font><font color="#F3E651">:</font><font color="#ff0000"> deployed</font>
</pre>
<br />
<span>Loki runs in single-binary mode with a single replica (<span class='inlinecode'>loki-0</span>), which is appropriate for a home lab cluster. This means there&#39;s only one Loki pod running at any time. If the node hosting Loki fails, Kubernetes will automatically reschedule the pod to another worker node—but there will be a brief downtime (typically under a minute) while this happens. For my home lab use case, this is perfectly acceptable.</span><br />
@@ -314,44 +319,44 @@ STATUS: deployed
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>discovery.kubernetes <font color="#808080">"pods"</font> {
- role = <font color="#808080">"pod"</font>
-}
+<pre><font color="#ff0000">discovery</font><font color="#F3E651">.</font><font color="#ff0000">kubernetes </font><font color="#bb00ff">"pods"</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> role </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"pod"</font>
+<font color="#ff0000">}</font>
-discovery.relabel <font color="#808080">"pods"</font> {
- targets = discovery.kubernetes.pods.targets
+<font color="#ff0000">discovery</font><font color="#F3E651">.</font><font color="#ff0000">relabel </font><font color="#bb00ff">"pods"</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> targets </font><font color="#F3E651">=</font><font color="#ff0000"> discovery</font><font color="#F3E651">.</font><font color="#ff0000">kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">pods</font><font color="#F3E651">.</font><font color="#ff0000">targets</font>
- rule {
- source_labels = [<font color="#808080">"__meta_kubernetes_namespace"</font>]
- target_label = <font color="#808080">"namespace"</font>
- }
+<font color="#ff0000"> rule {</font>
+<font color="#ff0000"> source_labels </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">"__meta_kubernetes_namespace"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> target_label </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"namespace"</font>
+<font color="#ff0000"> }</font>
- rule {
- source_labels = [<font color="#808080">"__meta_kubernetes_pod_name"</font>]
- target_label = <font color="#808080">"pod"</font>
- }
+<font color="#ff0000"> rule {</font>
+<font color="#ff0000"> source_labels </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">"__meta_kubernetes_pod_name"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> target_label </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"pod"</font>
+<font color="#ff0000"> }</font>
- rule {
- source_labels = [<font color="#808080">"__meta_kubernetes_pod_container_name"</font>]
- target_label = <font color="#808080">"container"</font>
- }
+<font color="#ff0000"> rule {</font>
+<font color="#ff0000"> source_labels </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">"__meta_kubernetes_pod_container_name"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> target_label </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"container"</font>
+<font color="#ff0000"> }</font>
- rule {
- source_labels = [<font color="#808080">"__meta_kubernetes_pod_label_app"</font>]
- target_label = <font color="#808080">"app"</font>
- }
-}
+<font color="#ff0000"> rule {</font>
+<font color="#ff0000"> source_labels </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">"__meta_kubernetes_pod_label_app"</font><font color="#F3E651">]</font>
+<font color="#ff0000"> target_label </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"app"</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000">}</font>
-loki.<b><u><font color="#000000">source</font></u></b>.kubernetes <font color="#808080">"pods"</font> {
- targets = discovery.relabel.pods.output
- forward_to = [loki.write.default.receiver]
-}
+<font color="#ff0000">loki</font><font color="#F3E651">.</font><b><font color="#ffffff">source</font></b><font color="#F3E651">.</font><font color="#ff0000">kubernetes </font><font color="#bb00ff">"pods"</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> targets </font><font color="#F3E651">=</font><font color="#ff0000"> discovery</font><font color="#F3E651">.</font><font color="#ff0000">relabel</font><font color="#F3E651">.</font><font color="#ff0000">pods</font><font color="#F3E651">.</font><font color="#ff0000">output</font>
+<font color="#ff0000"> forward_to </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000">loki</font><font color="#F3E651">.</font><font color="#ff0000">write</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">receiver</font><font color="#F3E651">]</font>
+<font color="#ff0000">}</font>
-loki.write <font color="#808080">"default"</font> {
- endpoint {
- url = <font color="#808080">"http://loki.monitoring.svc.cluster.local:3100/loki/api/v1/push"</font>
- }
-}
+<font color="#ff0000">loki</font><font color="#F3E651">.</font><font color="#ff0000">write </font><font color="#bb00ff">"default"</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> endpoint {</font>
+<font color="#ff0000"> url </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"http://loki.monitoring.svc.cluster.local:3100/loki/api/v1/push"</font>
+<font color="#ff0000"> }</font>
+<font color="#ff0000">}</font>
</pre>
<br />
<span>This configuration automatically labels each log line with the namespace, pod name, container name, and app label, making it easy to filter logs in Grafana.</span><br />
@@ -364,9 +369,9 @@ loki.write <font color="#808080">"default"</font> {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get svc -n monitoring loki
-NAME TYPE CLUSTER-IP PORT(S)
-loki ClusterIP <font color="#000000">10.43</font>.<font color="#000000">64.60</font> <font color="#000000">3100</font>/TCP,<font color="#000000">9095</font>/TCP
+<pre><font color="#ff0000">$ kubectl get svc -n monitoring loki</font>
+<font color="#ff0000">NAME TYPE CLUSTER-IP PORT</font><font color="#F3E651">(</font><font color="#ff0000">S</font><font color="#F3E651">)</font>
+<font color="#ff0000">loki ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">64.60</font><font color="#ff0000"> </font><font color="#bb00ff">3100</font><font color="#ff0000">/TCP</font><font color="#F3E651">,</font><font color="#bb00ff">9095</font><font color="#ff0000">/TCP</font>
</pre>
<br />
<span>To add Loki as a data source in Grafana:</span><br />
@@ -390,20 +395,20 @@ loki ClusterIP <font color="#000000">10.43</font>.<font color="#000000">64.6
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get pods -n monitoring
-NAME READY STATUS RESTARTS AGE
-alertmanager-prometheus-kube-prometheus-alertmanager-<font color="#000000">0</font> <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 42d
-alloy-g5fgj <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 29m
-alloy-nfw8w <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 29m
-alloy-tg9vj <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 29m
-loki-<font color="#000000">0</font> <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 25m
-prometheus-grafana-868f9dc7cf-lg2vl <font color="#000000">3</font>/<font color="#000000">3</font> Running <font color="#000000">0</font> 42d
-prometheus-kube-prometheus-operator-8d7bbc48c-p4sf4 <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 42d
-prometheus-kube-state-metrics-7c5fb9d798-hh2fx <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 42d
-prometheus-prometheus-kube-prometheus-prometheus-<font color="#000000">0</font> <font color="#000000">2</font>/<font color="#000000">2</font> Running <font color="#000000">0</font> 42d
-prometheus-prometheus-node-exporter-2nsg9 <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 42d
-prometheus-prometheus-node-exporter-mqr<font color="#000000">25</font> <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 42d
-prometheus-prometheus-node-exporter-wp4ds <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 42d
+<pre><font color="#ff0000">$ kubectl get pods -n monitoring</font>
+<font color="#ff0000">NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">alertmanager-prometheus-kube-prometheus-alertmanager-</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">alloy-g5fgj </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 29m</font>
+<font color="#ff0000">alloy-nfw8w </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 29m</font>
+<font color="#ff0000">alloy-tg9vj </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 29m</font>
+<font color="#ff0000">loki-</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 25m</font>
+<font color="#ff0000">prometheus-grafana-868f9dc7cf-lg2vl </font><font color="#bb00ff">3</font><font color="#F3E651">/</font><font color="#bb00ff">3</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">prometheus-kube-prometheus-operator-8d7bbc48c-p4sf4 </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">prometheus-kube-state-metrics-7c5fb9d798-hh2fx </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">prometheus-prometheus-kube-prometheus-prometheus-</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">prometheus-prometheus-node-exporter-2nsg9 </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">prometheus-prometheus-node-exporter-mqr</font><font color="#bb00ff">25</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
+<font color="#ff0000">prometheus-prometheus-node-exporter-wp4ds </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 42d</font>
</pre>
<br />
<span>And the services:</span><br />
@@ -412,18 +417,18 @@ prometheus-prometheus-node-exporter-wp4ds <font color="#000000">1
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get svc -n monitoring
-NAME TYPE CLUSTER-IP PORT(S)
-alertmanager-operated ClusterIP None <font color="#000000">9093</font>/TCP,<font color="#000000">9094</font>/TCP
-alloy ClusterIP <font color="#000000">10.43</font>.<font color="#000000">74.14</font> <font color="#000000">12345</font>/TCP
-loki ClusterIP <font color="#000000">10.43</font>.<font color="#000000">64.60</font> <font color="#000000">3100</font>/TCP,<font color="#000000">9095</font>/TCP
-loki-headless ClusterIP None <font color="#000000">3100</font>/TCP
-prometheus-grafana ClusterIP <font color="#000000">10.43</font>.<font color="#000000">46.82</font> <font color="#000000">80</font>/TCP
-prometheus-kube-prometheus-alertmanager ClusterIP <font color="#000000">10.43</font>.<font color="#000000">208.43</font> <font color="#000000">9093</font>/TCP,<font color="#000000">8080</font>/TCP
-prometheus-kube-prometheus-operator ClusterIP <font color="#000000">10.43</font>.<font color="#000000">246.121</font> <font color="#000000">443</font>/TCP
-prometheus-kube-prometheus-prometheus ClusterIP <font color="#000000">10.43</font>.<font color="#000000">152.163</font> <font color="#000000">9090</font>/TCP,<font color="#000000">8080</font>/TCP
-prometheus-kube-state-metrics ClusterIP <font color="#000000">10.43</font>.<font color="#000000">64.26</font> <font color="#000000">8080</font>/TCP
-prometheus-prometheus-node-exporter ClusterIP <font color="#000000">10.43</font>.<font color="#000000">127.242</font> <font color="#000000">9100</font>/TCP
+<pre><font color="#ff0000">$ kubectl get svc -n monitoring</font>
+<font color="#ff0000">NAME TYPE CLUSTER-IP PORT</font><font color="#F3E651">(</font><font color="#ff0000">S</font><font color="#F3E651">)</font>
+<font color="#ff0000">alertmanager-operated ClusterIP None </font><font color="#bb00ff">9093</font><font color="#ff0000">/TCP</font><font color="#F3E651">,</font><font color="#bb00ff">9094</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">alloy ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">74.14</font><font color="#ff0000"> </font><font color="#bb00ff">12345</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">loki ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">64.60</font><font color="#ff0000"> </font><font color="#bb00ff">3100</font><font color="#ff0000">/TCP</font><font color="#F3E651">,</font><font color="#bb00ff">9095</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">loki-headless ClusterIP None </font><font color="#bb00ff">3100</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">prometheus-grafana ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">46.82</font><font color="#ff0000"> </font><font color="#bb00ff">80</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">prometheus-kube-prometheus-alertmanager ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">208.43</font><font color="#ff0000"> </font><font color="#bb00ff">9093</font><font color="#ff0000">/TCP</font><font color="#F3E651">,</font><font color="#bb00ff">8080</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">prometheus-kube-prometheus-operator ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">246.121</font><font color="#ff0000"> </font><font color="#bb00ff">443</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">prometheus-kube-prometheus-prometheus ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">152.163</font><font color="#ff0000"> </font><font color="#bb00ff">9090</font><font color="#ff0000">/TCP</font><font color="#F3E651">,</font><font color="#bb00ff">8080</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">prometheus-kube-state-metrics ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">64.26</font><font color="#ff0000"> </font><font color="#bb00ff">8080</font><font color="#ff0000">/TCP</font>
+<font color="#ff0000">prometheus-prometheus-node-exporter ClusterIP </font><font color="#bb00ff">10.43</font><font color="#F3E651">.</font><font color="#bb00ff">127.242</font><font color="#ff0000"> </font><font color="#bb00ff">9100</font><font color="#ff0000">/TCP</font>
</pre>
<br />
<span>Let me break down what each pod does:</span><br />
@@ -497,7 +502,7 @@ prometheus-prometheus-node-exporter ClusterIP <font color="#000000">10.4
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas pkg install -y node_exporter
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install -y node_exporter</font>
</pre>
<br />
<span>Enable the service to start at boot:</span><br />
@@ -506,8 +511,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas sysrc node_exporter_enable=YES
-node_exporter_enable: -&gt; YES
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">node_exporter_enable</font><font color="#F3E651">=</font><font color="#ff0000">YES</font>
+<font color="#ff0000">node_exporter_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> YES</font>
</pre>
<br />
<span>Configure node_exporter to listen on the WireGuard interface. This ensures metrics are only accessible through the secure tunnel, not the public network. Replace the IP with the host&#39;s WireGuard address:</span><br />
@@ -516,8 +521,8 @@ node_exporter_enable: -&gt; YES
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas sysrc node_exporter_args=<font color="#808080">'--web.listen-address=192.168.2.130:9100'</font>
-node_exporter_args: -&gt; --web.listen-address=<font color="#000000">192.168</font>.<font color="#000000">2.130</font>:<font color="#000000">9100</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas sysrc </font><font color="#ff0000">node_exporter_args</font><font color="#F3E651">=</font><font color="#bb00ff">'--web.listen-address=192.168.2.130:9100'</font>
+<font color="#ff0000">node_exporter_args</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">&gt;</font><font color="#ff0000"> --web</font><font color="#F3E651">.</font><font color="#ff0000">listen-address</font><font color="#F3E651">=</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#F3E651">:</font><font color="#bb00ff">9100</font>
</pre>
<br />
<span>Start the service:</span><br />
@@ -526,8 +531,8 @@ node_exporter_args: -&gt; --web.listen-address=<font color="#000000">192.168</f
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % doas service node_exporter start
-Starting node_exporter.
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas service node_exporter start</font>
+<font color="#ff0000">Starting node_exporter</font><font color="#F3E651">.</font>
</pre>
<br />
<span>Verify it&#39;s running:</span><br />
@@ -536,10 +541,10 @@ Starting node_exporter.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>paul@f0:~ % curl -s http://<font color="#000000">192.168</font>.<font color="#000000">2.130</font>:<font color="#000000">9100</font>/metrics | head -<font color="#000000">3</font>
-<i><font color="silver"># HELP go_gc_duration_seconds A summary of the wall-time pause...</font></i>
-<i><font color="silver"># TYPE go_gc_duration_seconds summary</font></i>
-go_gc_duration_seconds{quantile=<font color="#808080">"0"</font>} <font color="#000000">0</font>
+<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> curl -s http</font><font color="#F3E651">://</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.130</font><font color="#F3E651">:</font><font color="#bb00ff">9100</font><font color="#ff0000">/metrics </font><font color="#F3E651">|</font><font color="#ff0000"> head -</font><font color="#bb00ff">3</font>
+<i><font color="#ababab"># HELP go_gc_duration_seconds A summary of the wall-time pause...</font></i>
+<i><font color="#ababab"># TYPE go_gc_duration_seconds summary</font></i>
+<font color="#ff0000">go_gc_duration_seconds{</font><font color="#ff0000">quantile</font><font color="#F3E651">=</font><font color="#bb00ff">"0"</font><font color="#ff0000">} </font><font color="#bb00ff">0</font>
</pre>
<br />
<span>Repeat for the other FreeBSD hosts (<span class='inlinecode'>f1</span>, <span class='inlinecode'>f2</span>) with their respective WireGuard IPs.</span><br />
@@ -567,9 +572,9 @@ go_gc_duration_seconds{quantile=<font color="#808080">"0"</font>} <font color="#
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl create secret generic additional-scrape-configs \
- --from-file=additional-scrape-configs.yaml \
- -n monitoring
+<pre><font color="#ff0000">$ kubectl create secret generic additional-scrape-configs </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --from-file</font><font color="#F3E651">=</font><font color="#ff0000">additional-scrape-configs</font><font color="#F3E651">.</font><font color="#ff0000">yaml </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -n monitoring</font>
</pre>
<br />
<span>Update <span class='inlinecode'>persistence-values.yaml</span> to reference the secret:</span><br />
@@ -589,7 +594,7 @@ prometheus:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ just upgrade
+<pre><font color="#ff0000">$ just upgrade</font>
</pre>
<br />
<span>After a minute or so, the FreeBSD hosts appear in the Prometheus targets and in the Node Exporter dashboards in Grafana.</span><br />
@@ -651,10 +656,10 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish:~ $ doas pkg_add node_exporter
-quirks-<font color="#000000">7.103</font> signed on <font color="#000000">2025</font>-<font color="#000000">10</font>-13T22:<font color="#000000">55</font>:16Z
-The following new rcscripts were installed: /etc/rc.d/node_exporter
-See rcctl(<font color="#000000">8</font>) <b><u><font color="#000000">for</font></u></b> details.
+<pre><font color="#ff0000">blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ doas pkg_add node_exporter</font>
+<font color="#ff0000">quirks-</font><font color="#bb00ff">7.103</font><font color="#ff0000"> signed on </font><font color="#bb00ff">2025</font><font color="#ff0000">-</font><font color="#bb00ff">10</font><font color="#ff0000">-13T22</font><font color="#F3E651">:</font><font color="#bb00ff">55</font><font color="#F3E651">:</font><font color="#ff0000">16Z</font>
+<font color="#ff0000">The following new rcscripts were installed</font><font color="#F3E651">:</font><font color="#ff0000"> /etc/rc</font><font color="#F3E651">.</font><font color="#ff0000">d/node_exporter</font>
+<font color="#ff0000">See rcctl</font><font color="#F3E651">(</font><font color="#bb00ff">8</font><font color="#F3E651">)</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> details</font><font color="#F3E651">.</font>
</pre>
<br />
<span>Enable the service to start at boot:</span><br />
@@ -663,7 +668,7 @@ See rcctl(<font color="#000000">8</font>) <b><u><font color="#000000">for</font>
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish:~ $ doas rcctl <b><u><font color="#000000">enable</font></u></b> node_exporter
+<pre><font color="#ff0000">blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ doas rcctl </font><b><font color="#ffffff">enable</font></b><font color="#ff0000"> node_exporter</font>
</pre>
<br />
<span>Configure node_exporter to listen on the WireGuard interface. This ensures metrics are only accessible through the secure tunnel, not the public network. Replace the IP with the host&#39;s WireGuard address:</span><br />
@@ -672,7 +677,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish:~ $ doas rcctl <b><u><font color="#000000">set</font></u></b> node_exporter flags <font color="#808080">'--web.listen-address=192.168.2.110:9100'</font>
+<pre><font color="#ff0000">blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ doas rcctl </font><b><font color="#ffffff">set</font></b><font color="#ff0000"> node_exporter flags </font><font color="#bb00ff">'--web.listen-address=192.168.2.110:9100'</font>
</pre>
<br />
<span>Start the service:</span><br />
@@ -681,8 +686,8 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish:~ $ doas rcctl start node_exporter
-node_exporter(ok)
+<pre><font color="#ff0000">blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ doas rcctl start node_exporter</font>
+<font color="#ff0000">node_exporter</font><font color="#F3E651">(</font><font color="#ff0000">ok</font><font color="#F3E651">)</font>
</pre>
<br />
<span>Verify it&#39;s running:</span><br />
@@ -691,10 +696,10 @@ node_exporter(ok)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>blowfish:~ $ curl -s http://<font color="#000000">192.168</font>.<font color="#000000">2.110</font>:<font color="#000000">9100</font>/metrics | head -<font color="#000000">3</font>
-<i><font color="silver"># HELP go_gc_duration_seconds A summary of the wall-time pause...</font></i>
-<i><font color="silver"># TYPE go_gc_duration_seconds summary</font></i>
-go_gc_duration_seconds{quantile=<font color="#808080">"0"</font>} <font color="#000000">0</font>
+<pre><font color="#ff0000">blowfish</font><font color="#F3E651">:~</font><font color="#ff0000"> $ curl -s http</font><font color="#F3E651">://</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">2.110</font><font color="#F3E651">:</font><font color="#bb00ff">9100</font><font color="#ff0000">/metrics </font><font color="#F3E651">|</font><font color="#ff0000"> head -</font><font color="#bb00ff">3</font>
+<i><font color="#ababab"># HELP go_gc_duration_seconds A summary of the wall-time pause...</font></i>
+<i><font color="#ababab"># TYPE go_gc_duration_seconds summary</font></i>
+<font color="#ff0000">go_gc_duration_seconds{</font><font color="#ff0000">quantile</font><font color="#F3E651">=</font><font color="#bb00ff">"0"</font><font color="#ff0000">} </font><font color="#bb00ff">0</font>
</pre>
<br />
<span>Repeat for the other OpenBSD host (<span class='inlinecode'>fishfinger</span>) with its respective WireGuard IP (<span class='inlinecode'>192.168.2.111</span>).</span><br />
@@ -796,11 +801,12 @@ spec:
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2025-12-24-x-rag-observability-hackathon.html b/gemfeed/2025-12-24-x-rag-observability-hackathon.html
index d3c42ced..cc778a57 100644
--- a/gemfeed/2025-12-24-x-rag-observability-hackathon.html
+++ b/gemfeed/2025-12-24-x-rag-observability-hackathon.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>X-RAG Observability Hackathon</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-12-24-x-rag-observability-hackathon.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-12-24-x-rag-observability-hackathon.gmi">Gemini</a>
</p>
@@ -259,20 +264,20 @@ loki.write "default" {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">from</font></u></b> prometheus_client <b><u><font color="#000000">import</font></u></b> Histogram, Counter, Gauge
+<pre><font color="#ababab">from</font><font color="#ff0000"> prometheus_client </font><font color="#ababab">import</font><font color="#ff0000"> Histogram</font><font color="#F3E651">,</font><font color="#ff0000"> Counter</font><font color="#F3E651">,</font><font color="#ff0000"> Gauge</font>
-search_duration = Histogram(
- <font color="#808080">"search_service_request_duration_seconds"</font>,
- <font color="#808080">"Total duration of Search Service requests"</font>,
- [<font color="#808080">"method"</font>],
- buckets=[<font color="#000000">0.1</font>, <font color="#000000">0.25</font>, <font color="#000000">0.5</font>, <font color="#000000">1.0</font>, <font color="#000000">2.5</font>, <font color="#000000">5.0</font>, <font color="#000000">10.0</font>, <font color="#000000">20.0</font>, <font color="#000000">30.0</font>, <font color="#000000">60.0</font>],
-)
+<font color="#ff0000">search_duration </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">Histogram</font><font color="#F3E651">(</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"search_service_request_duration_seconds"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"Total duration of Search Service requests"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">"method"</font><font color="#F3E651">],</font>
+<font color="#ff0000"> buckets</font><font color="#F3E651">=[</font><font color="#bb00ff">0.1</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.25</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">0.5</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">1.0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2.5</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">5.0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">10.0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">20.0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">30.0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">60.0</font><font color="#F3E651">],</font>
+<font color="#F3E651">)</font>
-errors_total = Counter(
- <font color="#808080">"search_service_errors_total"</font>,
- <font color="#808080">"Error count by type"</font>,
- [<font color="#808080">"method"</font>, <font color="#808080">"error_type"</font>],
-)
+<font color="#ff0000">errors_total </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">Counter</font><font color="#F3E651">(</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"search_service_errors_total"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"Error count by type"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">"method"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">"error_type"</font><font color="#F3E651">],</font>
+<font color="#F3E651">)</font>
</pre>
<br />
<span>Initially, I used Prometheus scraping—each service exposed a /metrics endpoint, and Prometheus pulled metrics every 15 seconds. This worked, but I wanted a unified pipeline.</span><br />
@@ -515,17 +520,17 @@ traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">from</font></u></b> opentelemetry.instrumentation.fastapi <b><u><font color="#000000">import</font></u></b> FastAPIInstrumentor
-<b><u><font color="#000000">from</font></u></b> opentelemetry.instrumentation.grpc <b><u><font color="#000000">import</font></u></b> GrpcAioInstrumentorClient
+<pre><font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">instrumentation</font><font color="#F3E651">.</font><font color="#ff0000">fastapi </font><font color="#ababab">import</font><font color="#ff0000"> FastAPIInstrumentor</font>
+<font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">instrumentation</font><font color="#F3E651">.</font><font color="#ff0000">grpc </font><font color="#ababab">import</font><font color="#ff0000"> GrpcAioInstrumentorClient</font>
-<i><font color="silver"># Auto-instrument frameworks</font></i>
-FastAPIInstrumentor.instrument_app(app)
-GrpcAioInstrumentorClient().instrument()
+<i><font color="#ababab"># Auto-instrument frameworks</font></i>
+<font color="#ff0000">FastAPIInstrumentor</font><font color="#F3E651">.</font><font color="#7bc710">instrument_app</font><font color="#F3E651">(</font><font color="#ff0000">app</font><font color="#F3E651">)</font>
+<font color="#7bc710">GrpcAioInstrumentorClient</font><font color="#F3E651">().</font><font color="#7bc710">instrument</font><font color="#F3E651">()</font>
-<i><font color="silver"># Manual spans for custom operations</font></i>
-with tracer.start_as_current_span(<font color="#808080">"llm.rag_completion"</font>) as span:
- span.set_attribute(<font color="#808080">"llm.model"</font>, model_name)
- result = <b><u><font color="#000000">await</font></u></b> generate_answer(query, context)
+<i><font color="#ababab"># Manual spans for custom operations</font></i>
+<font color="#ff0000">with tracer</font><font color="#F3E651">.</font><font color="#7bc710">start_as_current_span</font><font color="#F3E651">(</font><font color="#bb00ff">"llm.rag_completion"</font><font color="#F3E651">)</font><font color="#ff0000"> as span</font><font color="#F3E651">:</font>
+<font color="#ff0000"> span</font><font color="#F3E651">.</font><font color="#7bc710">set_attribute</font><font color="#F3E651">(</font><font color="#bb00ff">"llm.model"</font><font color="#F3E651">,</font><font color="#ff0000"> model_name</font><font color="#F3E651">)</font>
+<font color="#ff0000"> result </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">await</font></b><font color="#ff0000"> </font><font color="#7bc710">generate_answer</font><font color="#F3E651">(</font><font color="#ff0000">query</font><font color="#F3E651">,</font><font color="#ff0000"> context</font><font color="#F3E651">)</font>
</pre>
<br />
<span><span class='inlinecode'>Auto-instrumentation</span> is the quick win: one line of code and you get spans for every HTTP request, gRPC call, or database query. The instrumentor patches the framework at runtime, so existing code works without modification. The downside? You only get what the library authors decided to capture—generic HTTP attributes like <span class='inlinecode'>http.method</span> and <span class='inlinecode'>http.status_code</span>, but nothing domain-specific. Auto-instrumented spans also can&#39;t know your business logic, so a slow request shows up as "POST /api/search took 5 seconds" without revealing which internal operation caused the delay.</span><br />
@@ -915,11 +920,12 @@ $ curl -s -G "http://localhost:3200/api/search" \
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.html b/gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.html
index d22c72d7..03dd6fea 100644
--- a/gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.html
+++ b/gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Cloudless Kobo Forma with KOReader</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-01-01-cloudless-kobo-forma-with-koreader.gmi">Gemini</a>
</p>
@@ -152,11 +157,12 @@ SideloadedMode=true
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-01-01-posts-from-july-to-december-2025.html b/gemfeed/2026-01-01-posts-from-july-to-december-2025.html
index 3478321f..174ca283 100644
--- a/gemfeed/2026-01-01-posts-from-july-to-december-2025.html
+++ b/gemfeed/2026-01-01-posts-from-july-to-december-2025.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Posts from July to December 2025</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-01-01-posts-from-july-to-december-2025.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-01-01-posts-from-july-to-december-2025.gmi">Gemini</a>
</p>
@@ -1044,11 +1049,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-01-01-using-supernote-nomad-offline.html b/gemfeed/2026-01-01-using-supernote-nomad-offline.html
index 0c1db515..7838526a 100644
--- a/gemfeed/2026-01-01-using-supernote-nomad-offline.html
+++ b/gemfeed/2026-01-01-using-supernote-nomad-offline.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Using Supernote Nomad offline</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-01-01-using-supernote-nomad-offline.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-01-01-using-supernote-nomad-offline.gmi">Gemini</a>
</p>
@@ -79,32 +84,32 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
-convert () {
- find . -name \*.note \
- | <b><u><font color="#000000">while</font></u></b> <b><u><font color="#000000">read</font></u></b> -r note; <b><u><font color="#000000">do</font></u></b>
- echo supernote-tool convert -a -t pdf <font color="#808080">"$note"</font> <font color="#808080">"${note/.note/.pdf}"</font>
- supernote-tool convert -a -t pdf <font color="#808080">"$note"</font> <font color="#808080">"${note/.note/.pdf}.tmp"</font>
- mv <font color="#808080">"${note/.note/.pdf}.tmp"</font> <font color="#808080">"${note/.note/.pdf}"</font>
- du -hs <font color="#808080">"$note"</font> <font color="#808080">"${note/.note/.pdf}"</font>
- echo
- <b><u><font color="#000000">done</font></u></b>
-}
+<font color="#7bc710">convert ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> find </font><font color="#F3E651">.</font><font color="#ff0000"> -name </font><font color="#F3E651">\*.</font><font color="#ff0000">note </font><font color="#F3E651">\</font>
+<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -r note</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> echo supernote-tool convert -a -t pdf </font><font color="#bb00ff">"$note"</font><font color="#ff0000"> </font><font color="#bb00ff">"${note/.note/.pdf}"</font>
+<font color="#ff0000"> supernote-tool convert -a -t pdf </font><font color="#bb00ff">"$note"</font><font color="#ff0000"> </font><font color="#bb00ff">"${note/.note/.pdf}.tmp"</font>
+<font color="#ff0000"> mv </font><font color="#bb00ff">"${note/.note/.pdf}.tmp"</font><font color="#ff0000"> </font><font color="#bb00ff">"${note/.note/.pdf}"</font>
+<font color="#ff0000"> du -hs </font><font color="#bb00ff">"$note"</font><font color="#ff0000"> </font><font color="#bb00ff">"${note/.note/.pdf}"</font>
+<font color="#ff0000"> echo</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Make the PDFs available on my Phone as well</font></i>
-copy () {
- <b><u><font color="#000000">if</font></u></b> [ ! -d ~/Documents/Supernote ]; <b><u><font color="#000000">then</font></u></b>
- echo <font color="#808080">"Directory ~/Documents/Supernote does not exist, skipping"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
- <b><u><font color="#000000">fi</font></u></b>
+<i><font color="#ababab"># Make the PDFs available on my Phone as well</font></i>
+<font color="#7bc710">copy ()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -d </font><font color="#F3E651">~</font><font color="#ff0000">/Documents/Supernote </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Directory ~/Documents/Supernote does not exist, skipping"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
- rsync -delete -av --include=<font color="#808080">'*/'</font> --include=<font color="#808080">'*.pdf'</font> --exclude=<font color="#808080">'*'</font> . ~/Documents/Supernote/
- echo This was copied from $(pwd) so dont edit manually &gt;~/Documents/Supernote/README.txt
-}
+<font color="#ff0000"> rsync -delete -av --include</font><font color="#F3E651">=</font><font color="#bb00ff">'*/'</font><font color="#ff0000"> --include</font><font color="#F3E651">=</font><font color="#bb00ff">'*.pdf'</font><font color="#ff0000"> --exclude</font><font color="#F3E651">=</font><font color="#bb00ff">'*'</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000"> </font><font color="#F3E651">~</font><font color="#ff0000">/Documents/Supernote</font><font color="#F3E651">/</font>
+<font color="#ff0000"> echo This was copied from </font><font color="#ff0000">$(pwd)</font><font color="#ff0000"> so dont edit manually </font><font color="#F3E651">&gt;~</font><font color="#ff0000">/Documents/Supernote/README</font><font color="#F3E651">.</font><font color="#ff0000">txt</font>
+<font color="#ff0000">}</font>
-convert
-copy
+<font color="#ff0000">convert</font>
+<font color="#ff0000">copy</font>
</pre>
<br />
<span>This script does two things:</span><br />
@@ -149,11 +154,12 @@ copy
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.html b/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.html
index 42199650..9e4932dd 100644
--- a/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.html
+++ b/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>A tmux popup editor for Cursor Agent CLI prompts</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.gmi">Gemini</a>
</p>
@@ -102,252 +107,252 @@ bind-key e run-shell -b "tmux display-message -p &#39;#{pane_id}&#39;
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/env bash</font></i>
-<b><u><font color="#000000">set</font></u></b> -u -o pipefail
+<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i>
+<b><font color="#ffffff">set</font></b><font color="#ff0000"> -u -o pipefail</font>
-LOG_ENABLED=<font color="#000000">0</font>
-log_file=<font color="#808080">"${TMPDIR:-/tmp}/tmux-edit-send.log"</font>
-log() {
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$LOG_ENABLED"</font> -eq <font color="#000000">1</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s</font>\n<font color="#808080">'</font> <font color="#808080">"$*"</font> &gt;&gt; <font color="#808080">"$log_file"</font>
- <b><u><font color="#000000">fi</font></u></b>
-}
+<font color="#ff0000">LOG_ENABLED</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000">log_file</font><font color="#F3E651">=</font><font color="#bb00ff">"${TMPDIR:-/tmp}/tmux-edit-send.log"</font>
+<font color="#7bc710">log()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$LOG_ENABLED"</font><font color="#ff0000"> -eq </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#bb00ff">"$*"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">"$log_file"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Read the target pane id from a temp file created by tmux binding.</font></i>
-read_target_from_file() {
- <b><u><font color="#000000">local</font></u></b> file_path=<font color="#808080">"$1"</font>
- <b><u><font color="#000000">local</font></u></b> pane_id
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$file_path"</font> ] &amp;&amp; [ -f <font color="#808080">"$file_path"</font> ]; <b><u><font color="#000000">then</font></u></b>
- pane_id=<font color="#808080">"$(sed -n '1p' "</font>$file_path<font color="#808080">" | tr -d '[:space:]')"</font>
- <i><font color="silver"># Ensure pane ID has % prefix</font></i>
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$pane_id"</font> ] &amp;&amp; [[ <font color="#808080">"$pane_id"</font> != %* ]]; <b><u><font color="#000000">then</font></u></b>
- pane_id=<font color="#808080">"%${pane_id}"</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s'</font> <font color="#808080">"$pane_id"</font>
- <b><u><font color="#000000">fi</font></u></b>
-}
+<i><font color="#ababab"># Read the target pane id from a temp file created by tmux binding.</font></i>
+<font color="#7bc710">read_target_from_file()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">file_path</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> pane_id</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$file_path"</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$file_path"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">pane_id</font><font color="#F3E651">=</font><font color="#bb00ff">"$(sed -n '1p' "</font><font color="#ff0000">$file_path</font><font color="#bb00ff">" | tr -d '[:space:]')"</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Ensure pane ID has % prefix</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$pane_id"</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$pane_id"</font><font color="#ff0000"> </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#F3E651">%*</font><font color="#ff0000"> </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">pane_id</font><font color="#F3E651">=</font><font color="#bb00ff">"%${pane_id}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s'</font><font color="#ff0000"> </font><font color="#bb00ff">"$pane_id"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Read the target pane id from tmux environment if present.</font></i>
-read_target_from_env() {
- <b><u><font color="#000000">local</font></u></b> env_line pane_id
- env_line=<font color="#808080">"$(tmux show-environment -g TMUX_EDIT_TARGET 2&gt;/dev/null || true)"</font>
- <b><u><font color="#000000">case</font></u></b> <font color="#808080">"$env_line"</font> <b><u><font color="#000000">in</font></u></b>
- TMUX_EDIT_TARGET=*)
- pane_id=<font color="#808080">"${env_line#TMUX_EDIT_TARGET=}"</font>
- <i><font color="silver"># Ensure pane ID has % prefix</font></i>
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$pane_id"</font> ] &amp;&amp; [[ <font color="#808080">"$pane_id"</font> != %* ]] &amp;&amp; [[ <font color="#808080">"$pane_id"</font> =~ ^[<font color="#000000">0</font>-<font color="#000000">9</font>]+$ ]]; <b><u><font color="#000000">then</font></u></b>
- pane_id=<font color="#808080">"%${pane_id}"</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s'</font> <font color="#808080">"$pane_id"</font>
- ;;
- <b><u><font color="#000000">esac</font></u></b>
-}
+<i><font color="#ababab"># Read the target pane id from tmux environment if present.</font></i>
+<font color="#7bc710">read_target_from_env()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> env_line pane_id</font>
+<font color="#ff0000"> </font><font color="#ff0000">env_line</font><font color="#F3E651">=</font><font color="#bb00ff">"$(tmux show-environment -g TMUX_EDIT_TARGET 2&gt;/dev/null || true)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">case</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$env_line"</font><font color="#ff0000"> </font><b><font color="#ffffff">in</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">TMUX_EDIT_TARGET</font><font color="#F3E651">=*)</font>
+<font color="#ff0000"> </font><font color="#ff0000">pane_id</font><font color="#F3E651">=</font><font color="#bb00ff">"${env_line#TMUX_EDIT_TARGET=}"</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Ensure pane ID has % prefix</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$pane_id"</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$pane_id"</font><font color="#ff0000"> </font><font color="#F3E651">!=</font><font color="#ff0000"> </font><font color="#F3E651">%*</font><font color="#ff0000"> </font><font color="#F3E651">]]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$pane_id"</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#F3E651">^[</font><font color="#bb00ff">0</font><font color="#ff0000">-</font><font color="#bb00ff">9</font><font color="#F3E651">]+</font><font color="#ff0000">$ </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">pane_id</font><font color="#F3E651">=</font><font color="#bb00ff">"%${pane_id}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s'</font><font color="#ff0000"> </font><font color="#bb00ff">"$pane_id"</font>
+<font color="#ff0000"> </font><font color="#F3E651">;;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">esac</font></b>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Resolve the target pane id, falling back to the last pane.</font></i>
-resolve_target_pane() {
- <b><u><font color="#000000">local</font></u></b> candidate=<font color="#808080">"$1"</font>
- <b><u><font color="#000000">local</font></u></b> current_pane last_pane
+<i><font color="#ababab"># Resolve the target pane id, falling back to the last pane.</font></i>
+<font color="#7bc710">resolve_target_pane()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">candidate</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> current_pane last_pane</font>
- current_pane=<font color="#808080">"$(tmux display-message -p "</font><i><font color="silver">#{pane_id}" 2&gt;/dev/null || true)"</font></i>
- log <font color="#808080">"current pane=${current_pane:-&lt;empty&gt;}"</font>
-
- <i><font color="silver"># Ensure candidate has % prefix if it's a pane ID</font></i>
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$candidate"</font> ] &amp;&amp; [[ <font color="#808080">"$candidate"</font> =~ ^[<font color="#000000">0</font>-<font color="#000000">9</font>]+$ ]]; <b><u><font color="#000000">then</font></u></b>
- candidate=<font color="#808080">"%${candidate}"</font>
- log <font color="#808080">"normalized candidate to $candidate"</font>
- <b><u><font color="#000000">fi</font></u></b>
-
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$candidate"</font> ] &amp;&amp; [[ <font color="#808080">"$candidate"</font> == *<font color="#808080">"#{"</font>* ]]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"format target detected, clearing"</font>
- candidate=<font color="#808080">""</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$candidate"</font> ]; <b><u><font color="#000000">then</font></u></b>
- candidate=<font color="#808080">"$(tmux display-message -p "</font><i><font color="silver">#{last_pane}" 2&gt;/dev/null || true)"</font></i>
- log <font color="#808080">"using last pane as fallback: $candidate"</font>
- <b><u><font color="#000000">elif</font></u></b> [ <font color="#808080">"$candidate"</font> = <font color="#808080">"$current_pane"</font> ]; <b><u><font color="#000000">then</font></u></b>
- last_pane=<font color="#808080">"$(tmux display-message -p "</font><i><font color="silver">#{last_pane}" 2&gt;/dev/null || true)"</font></i>
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$last_pane"</font> ]; <b><u><font color="#000000">then</font></u></b>
- candidate=<font color="#808080">"$last_pane"</font>
- log <font color="#808080">"candidate was current, using last pane: $candidate"</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s'</font> <font color="#808080">"$candidate"</font>
-}
+<font color="#ff0000"> </font><font color="#ff0000">current_pane</font><font color="#F3E651">=</font><font color="#bb00ff">"$(tmux display-message -p "</font><i><font color="#ababab">#{pane_id}" 2&gt;/dev/null || true)"</font></i>
+<font color="#ff0000"> log </font><font color="#bb00ff">"current pane=${current_pane:-&lt;empty&gt;}"</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Ensure candidate has % prefix if it's a pane ID</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$candidate"</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$candidate"</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#F3E651">^[</font><font color="#bb00ff">0</font><font color="#ff0000">-</font><font color="#bb00ff">9</font><font color="#F3E651">]+</font><font color="#ff0000">$ </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">candidate</font><font color="#F3E651">=</font><font color="#bb00ff">"%${candidate}"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"normalized candidate to $candidate"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$candidate"</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$candidate"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#bb00ff">"#{"</font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"format target detected, clearing"</font>
+<font color="#ff0000"> </font><font color="#ff0000">candidate</font><font color="#F3E651">=</font><font color="#bb00ff">""</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$candidate"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">candidate</font><font color="#F3E651">=</font><font color="#bb00ff">"$(tmux display-message -p "</font><i><font color="#ababab">#{last_pane}" 2&gt;/dev/null || true)"</font></i>
+<font color="#ff0000"> log </font><font color="#bb00ff">"using last pane as fallback: $candidate"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">elif</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$candidate"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"$current_pane"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">last_pane</font><font color="#F3E651">=</font><font color="#bb00ff">"$(tmux display-message -p "</font><i><font color="#ababab">#{last_pane}" 2&gt;/dev/null || true)"</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$last_pane"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">candidate</font><font color="#F3E651">=</font><font color="#bb00ff">"$last_pane"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"candidate was current, using last pane: $candidate"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s'</font><font color="#ff0000"> </font><font color="#bb00ff">"$candidate"</font>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Capture the latest multi-line prompt content from the pane.</font></i>
-capture_prompt_text() {
- <b><u><font color="#000000">local</font></u></b> target=<font color="#808080">"$1"</font>
- tmux capture-pane -p -t <font color="#808080">"$target"</font> -S -<font color="#000000">2000</font> <font color="#000000">2</font>&gt;/dev/null | awk <font color="#808080">'</font>
-<font color="#808080"> function trim_box(line) {</font>
-<font color="#808080"> sub(/^ *│ ?/, "", line)</font>
-<font color="#808080"> sub(/ *│ *$/, "", line)</font>
-<font color="#808080"> sub(/[[:space:]]+$/, "", line)</font>
-<font color="#808080"> return line</font>
-<font color="#808080"> }</font>
-<font color="#808080"> /^ *│ *→/ &amp;&amp; index($0,"INSERT")==0 &amp;&amp; index($0,"Add a follow-up")==0 {</font>
-<font color="#808080"> if (text != "") last = text</font>
-<font color="#808080"> text = ""</font>
-<font color="#808080"> capture = 1</font>
-<font color="#808080"> line = $0</font>
-<font color="#808080"> sub(/^.*→ ?/, "", line)</font>
-<font color="#808080"> line = trim_box(line)</font>
-<font color="#808080"> if (line != "") text = line</font>
-<font color="#808080"> next</font>
-<font color="#808080"> }</font>
-<font color="#808080"> capture {</font>
-<font color="#808080"> if ($0 ~ /^ *└/) {</font>
-<font color="#808080"> capture = 0</font>
-<font color="#808080"> if (text != "") last = text</font>
-<font color="#808080"> next</font>
-<font color="#808080"> }</font>
-<font color="#808080"> if ($0 ~ /^ *│/ &amp;&amp; index($0,"INSERT")==0 &amp;&amp; index($0,"Add a follow-up")==0) {</font>
-<font color="#808080"> line = trim_box($0)</font>
-<font color="#808080"> if (line != "") {</font>
-<font color="#808080"> if (text != "") text = text " " line</font>
-<font color="#808080"> else text = line</font>
-<font color="#808080"> }</font>
-<font color="#808080"> }</font>
-<font color="#808080"> }</font>
-<font color="#808080"> END {</font>
-<font color="#808080"> if (text != "") last = text</font>
-<font color="#808080"> if (last != "") print last</font>
-<font color="#808080"> }</font>
-<font color="#808080"> '</font>
-}
+<i><font color="#ababab"># Capture the latest multi-line prompt content from the pane.</font></i>
+<font color="#7bc710">capture_prompt_text()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000"> tmux capture-pane -p -t </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> -S -</font><font color="#bb00ff">2000</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#F3E651">|</font><font color="#ff0000"> awk </font><font color="#bb00ff">'</font>
+<font color="#bb00ff"> function trim_box(line) {</font>
+<font color="#bb00ff"> sub(/^ *│ ?/, "", line)</font>
+<font color="#bb00ff"> sub(/ *│ *$/, "", line)</font>
+<font color="#bb00ff"> sub(/[[:space:]]+$/, "", line)</font>
+<font color="#bb00ff"> return line</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> /^ *│ *→/ &amp;&amp; index($0,"INSERT")==0 &amp;&amp; index($0,"Add a follow-up")==0 {</font>
+<font color="#bb00ff"> if (text != "") last = text</font>
+<font color="#bb00ff"> text = ""</font>
+<font color="#bb00ff"> capture = 1</font>
+<font color="#bb00ff"> line = $0</font>
+<font color="#bb00ff"> sub(/^.*→ ?/, "", line)</font>
+<font color="#bb00ff"> line = trim_box(line)</font>
+<font color="#bb00ff"> if (line != "") text = line</font>
+<font color="#bb00ff"> next</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> capture {</font>
+<font color="#bb00ff"> if ($0 ~ /^ *└/) {</font>
+<font color="#bb00ff"> capture = 0</font>
+<font color="#bb00ff"> if (text != "") last = text</font>
+<font color="#bb00ff"> next</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> if ($0 ~ /^ *│/ &amp;&amp; index($0,"INSERT")==0 &amp;&amp; index($0,"Add a follow-up")==0) {</font>
+<font color="#bb00ff"> line = trim_box($0)</font>
+<font color="#bb00ff"> if (line != "") {</font>
+<font color="#bb00ff"> if (text != "") text = text " " line</font>
+<font color="#bb00ff"> else text = line</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> END {</font>
+<font color="#bb00ff"> if (text != "") last = text</font>
+<font color="#bb00ff"> if (last != "") print last</font>
+<font color="#bb00ff"> }</font>
+<font color="#bb00ff"> '</font>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Write captured prompt text into the temp file if available.</font></i>
-prefill_tmpfile() {
- <b><u><font color="#000000">local</font></u></b> tmpfile=<font color="#808080">"$1"</font>
- <b><u><font color="#000000">local</font></u></b> prompt_text=<font color="#808080">"$2"</font>
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$prompt_text"</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">printf</font></u></b> <font color="#808080">'%s</font>\n<font color="#808080">'</font> <font color="#808080">"$prompt_text"</font> &gt; <font color="#808080">"$tmpfile"</font>
- <b><u><font color="#000000">fi</font></u></b>
-}
+<i><font color="#ababab"># Write captured prompt text into the temp file if available.</font></i>
+<font color="#7bc710">prefill_tmpfile()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">tmpfile</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">prompt_text</font><font color="#F3E651">=</font><font color="#bb00ff">"$2"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$prompt_text"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">printf</font></b><font color="#ff0000"> </font><font color="#bb00ff">'%s</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#bb00ff">"$prompt_text"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;</font><font color="#ff0000"> </font><font color="#bb00ff">"$tmpfile"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Ensure the target pane exists before sending keys.</font></i>
-validate_target_pane() {
- <b><u><font color="#000000">local</font></u></b> target=<font color="#808080">"$1"</font>
- <b><u><font color="#000000">local</font></u></b> pane target_found
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$target"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"error: no target pane determined"</font>
- echo <font color="#808080">"Could not determine target pane."</font> &gt;&amp;<font color="#000000">2</font>
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">1</font>
- <b><u><font color="#000000">fi</font></u></b>
- target_found=<font color="#000000">0</font>
- log <font color="#808080">"validate: looking for target='$target' in all panes:"</font>
- <b><u><font color="#000000">for</font></u></b> pane <b><u><font color="#000000">in</font></u></b> $(tmux list-panes -a -F <font color="#808080">"#{pane_id}"</font> <font color="#000000">2</font>&gt;/dev/null || <b><u><font color="#000000">true</font></u></b>); <b><u><font color="#000000">do</font></u></b>
- log <font color="#808080">"validate: checking pane='$pane'"</font>
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$pane"</font> = <font color="#808080">"$target"</font> ]; <b><u><font color="#000000">then</font></u></b>
- target_found=<font color="#000000">1</font>
- log <font color="#808080">"validate: MATCH FOUND!"</font>
- <b><u><font color="#000000">break</font></u></b>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">done</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$target_found"</font> -ne <font color="#000000">1</font> ]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"error: target pane not found: $target"</font>
- echo <font color="#808080">"Target pane not found: $target"</font> &gt;&amp;<font color="#000000">2</font>
- <b><u><font color="#000000">return</font></u></b> <font color="#000000">1</font>
- <b><u><font color="#000000">fi</font></u></b>
- log <font color="#808080">"validate: target pane validated successfully"</font>
-}
+<i><font color="#ababab"># Ensure the target pane exists before sending keys.</font></i>
+<font color="#7bc710">validate_target_pane()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> pane target_found</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"error: no target pane determined"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Could not determine target pane."</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">target_found</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"validate: looking for target='$target' in all panes:"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> pane </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#ff0000">$(</font><font color="#ff0000">tmux list-panes -a -F </font><font color="#bb00ff">"#{pane_id}"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#F3E651">||</font><font color="#ff0000"> </font><b><font color="#ffffff">true</font></b><font color="#F3E651">);</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"validate: checking pane='$pane'"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$pane"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">target_found</font><font color="#F3E651">=</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"validate: MATCH FOUND!"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">break</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$target_found"</font><font color="#ff0000"> -ne </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"error: target pane not found: $target"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"Target pane not found: $target"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"validate: target pane validated successfully"</font>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Send temp file contents to the target pane line by line.</font></i>
-send_content() {
- <b><u><font color="#000000">local</font></u></b> target=<font color="#808080">"$1"</font>
- <b><u><font color="#000000">local</font></u></b> tmpfile=<font color="#808080">"$2"</font>
- <b><u><font color="#000000">local</font></u></b> prompt_text=<font color="#808080">"$3"</font>
- <b><u><font color="#000000">local</font></u></b> first_line=<font color="#000000">1</font>
- <b><u><font color="#000000">local</font></u></b> line
- log <font color="#808080">"send_content: target=$target, prompt_text='$prompt_text'"</font>
- <b><u><font color="#000000">while</font></u></b> IFS= <b><u><font color="#000000">read</font></u></b> -r line || [ -n <font color="#808080">"$line"</font> ]; <b><u><font color="#000000">do</font></u></b>
- log <font color="#808080">"send_content: read line='$line'"</font>
- <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$first_line"</font> -eq <font color="#000000">1</font> ] &amp;&amp; [ -n <font color="#808080">"$prompt_text"</font> ]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [[ <font color="#808080">"$line"</font> == <font color="#808080">"$prompt_text"</font>* ]]; <b><u><font color="#000000">then</font></u></b>
- <b><u><font color="#000000">local</font></u></b> old_line=<font color="#808080">"$line"</font>
- line=<font color="#808080">"${line#"</font>$prompt_text<font color="#808080">"}"</font>
- log <font color="#808080">"send_content: stripped prompt, was='$old_line' now='$line'"</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">fi</font></u></b>
- first_line=<font color="#000000">0</font>
- log <font color="#808080">"send_content: sending line='$line'"</font>
- tmux send-keys -t <font color="#808080">"$target"</font> -l <font color="#808080">"$line"</font>
- tmux send-keys -t <font color="#808080">"$target"</font> Enter
- <b><u><font color="#000000">done</font></u></b> &lt; <font color="#808080">"$tmpfile"</font>
- log <font color="#808080">"sent content to $target"</font>
-}
+<i><font color="#ababab"># Send temp file contents to the target pane line by line.</font></i>
+<font color="#7bc710">send_content()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">tmpfile</font><font color="#F3E651">=</font><font color="#bb00ff">"$2"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">prompt_text</font><font color="#F3E651">=</font><font color="#bb00ff">"$3"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">first_line</font><font color="#F3E651">=</font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> line</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"send_content: target=$target, prompt_text='$prompt_text'"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><font color="#ff0000">IFS</font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -r line </font><font color="#F3E651">||</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$line"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"send_content: read line='$line'"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$first_line"</font><font color="#ff0000"> -eq </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$prompt_text"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$line"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> </font><font color="#bb00ff">"$prompt_text"</font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">old_line</font><font color="#F3E651">=</font><font color="#bb00ff">"$line"</font>
+<font color="#ff0000"> </font><font color="#ff0000">line</font><font color="#F3E651">=</font><font color="#bb00ff">"${line#"</font><font color="#ff0000">$prompt_text</font><font color="#bb00ff">"}"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"send_content: stripped prompt, was='$old_line' now='$line'"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">first_line</font><font color="#F3E651">=</font><font color="#bb00ff">0</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"send_content: sending line='$line'"</font>
+<font color="#ff0000"> tmux send-keys -t </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> -l </font><font color="#bb00ff">"$line"</font>
+<font color="#ff0000"> tmux send-keys -t </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> Enter</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">&lt;</font><font color="#ff0000"> </font><font color="#bb00ff">"$tmpfile"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"sent content to $target"</font>
+<font color="#ff0000">}</font>
-<i><font color="silver"># Main entry point.</font></i>
-main() {
- <b><u><font color="#000000">local</font></u></b> target_file=<font color="#808080">"${1:-}"</font>
- <b><u><font color="#000000">local</font></u></b> target
- <b><u><font color="#000000">local</font></u></b> editor=<font color="#808080">"${EDITOR:-vi}"</font>
- <b><u><font color="#000000">local</font></u></b> tmpfile
- <b><u><font color="#000000">local</font></u></b> prompt_text
+<i><font color="#ababab"># Main entry point.</font></i>
+<font color="#7bc710">main()</font><font color="#ff0000"> {</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">target_file</font><font color="#F3E651">=</font><font color="#bb00ff">"${1:-}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> target</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">editor</font><font color="#F3E651">=</font><font color="#bb00ff">"${EDITOR:-vi}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> tmpfile</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> prompt_text</font>
- log <font color="#808080">"=== tmux-edit-send starting ==="</font>
- log <font color="#808080">"target_file=$target_file"</font>
- log <font color="#808080">"EDITOR=$editor"</font>
-
- target=<font color="#808080">"$(read_target_from_file "</font>$target_file<font color="#808080">" || true)"</font>
- <b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$target"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"file target=${target:-&lt;empty&gt;}"</font>
- rm -f <font color="#808080">"$target_file"</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$target"</font> ]; <b><u><font color="#000000">then</font></u></b>
- target=<font color="#808080">"${TMUX_EDIT_TARGET:-}"</font>
- <b><u><font color="#000000">fi</font></u></b>
- log <font color="#808080">"env target=${target:-&lt;empty&gt;}"</font>
- <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$target"</font> ]; <b><u><font color="#000000">then</font></u></b>
- target=<font color="#808080">"$(read_target_from_env || true)"</font>
- <b><u><font color="#000000">fi</font></u></b>
- log <font color="#808080">"tmux env target=${target:-&lt;empty&gt;}"</font>
- target=<font color="#808080">"$(resolve_target_pane "</font>$target<font color="#808080">")"</font>
- log <font color="#808080">"fallback target=${target:-&lt;empty&gt;}"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"=== tmux-edit-send starting ==="</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"target_file=$target_file"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"EDITOR=$editor"</font>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"$(read_target_from_file "</font><font color="#ff0000">$target_file</font><font color="#bb00ff">" || true)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"file target=${target:-&lt;empty&gt;}"</font>
+<font color="#ff0000"> rm -f </font><font color="#bb00ff">"$target_file"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"${TMUX_EDIT_TARGET:-}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"env target=${target:-&lt;empty&gt;}"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"$(read_target_from_env || true)"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"tmux env target=${target:-&lt;empty&gt;}"</font>
+<font color="#ff0000"> </font><font color="#ff0000">target</font><font color="#F3E651">=</font><font color="#bb00ff">"$(resolve_target_pane "</font><font color="#ff0000">$target</font><font color="#bb00ff">")"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"fallback target=${target:-&lt;empty&gt;}"</font>
- tmpfile=<font color="#808080">"$(mktemp)"</font>
- log <font color="#808080">"created tmpfile=$tmpfile"</font>
- <b><u><font color="#000000">if</font></u></b> [ ! -f <font color="#808080">"$tmpfile"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"ERROR: mktemp failed to create file"</font>
- echo <font color="#808080">"ERROR: mktemp failed"</font> &gt;&amp;<font color="#000000">2</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
- <b><u><font color="#000000">fi</font></u></b>
- mv <font color="#808080">"$tmpfile"</font> <font color="#808080">"${tmpfile}.md"</font> <font color="#000000">2</font>&gt;&amp;<font color="#000000">1</font> | <b><u><font color="#000000">while</font></u></b> <b><u><font color="#000000">read</font></u></b> -r line; <b><u><font color="#000000">do</font></u></b> log <font color="#808080">"mv output: $line"</font>; <b><u><font color="#000000">done</font></u></b>
- tmpfile=<font color="#808080">"${tmpfile}.md"</font>
- log <font color="#808080">"renamed to tmpfile=$tmpfile"</font>
- <b><u><font color="#000000">if</font></u></b> [ ! -f <font color="#808080">"$tmpfile"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"ERROR: tmpfile does not exist after rename"</font>
- echo <font color="#808080">"ERROR: tmpfile rename failed"</font> &gt;&amp;<font color="#000000">2</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">1</font>
- <b><u><font color="#000000">fi</font></u></b>
- <b><u><font color="#000000">trap</font></u></b> <font color="#808080">'rm -f "$tmpfile"'</font> EXIT
+<font color="#ff0000"> </font><font color="#ff0000">tmpfile</font><font color="#F3E651">=</font><font color="#bb00ff">"$(mktemp)"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"created tmpfile=$tmpfile"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$tmpfile"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"ERROR: mktemp failed to create file"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"ERROR: mktemp failed"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> mv </font><font color="#bb00ff">"$tmpfile"</font><font color="#ff0000"> </font><font color="#bb00ff">"${tmpfile}.md"</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -r line</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> log </font><font color="#bb00ff">"mv output: $line"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b>
+<font color="#ff0000"> </font><font color="#ff0000">tmpfile</font><font color="#F3E651">=</font><font color="#bb00ff">"${tmpfile}.md"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"renamed to tmpfile=$tmpfile"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$tmpfile"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"ERROR: tmpfile does not exist after rename"</font>
+<font color="#ff0000"> echo </font><font color="#bb00ff">"ERROR: tmpfile rename failed"</font><font color="#ff0000"> </font><font color="#F3E651">&gt;&amp;</font><font color="#bb00ff">2</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">trap</font></b><font color="#ff0000"> </font><font color="#bb00ff">'rm -f "$tmpfile"'</font><font color="#ff0000"> EXIT</font>
- log <font color="#808080">"capturing prompt text from target=$target"</font>
- prompt_text=<font color="#808080">"$(capture_prompt_text "</font>$target<font color="#808080">")"</font>
- log <font color="#808080">"captured prompt_text='$prompt_text'"</font>
- prefill_tmpfile <font color="#808080">"$tmpfile"</font> <font color="#808080">"$prompt_text"</font>
- log <font color="#808080">"prefilled tmpfile"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"capturing prompt text from target=$target"</font>
+<font color="#ff0000"> </font><font color="#ff0000">prompt_text</font><font color="#F3E651">=</font><font color="#bb00ff">"$(capture_prompt_text "</font><font color="#ff0000">$target</font><font color="#bb00ff">")"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"captured prompt_text='$prompt_text'"</font>
+<font color="#ff0000"> prefill_tmpfile </font><font color="#bb00ff">"$tmpfile"</font><font color="#ff0000"> </font><font color="#bb00ff">"$prompt_text"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"prefilled tmpfile"</font>
- log <font color="#808080">"launching editor: $editor $tmpfile"</font>
- <font color="#808080">"$editor"</font> <font color="#808080">"$tmpfile"</font>
- <b><u><font color="#000000">local</font></u></b> editor_exit=$?
- log <font color="#808080">"editor exited with status $editor_exit"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"launching editor: $editor $tmpfile"</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"$editor"</font><font color="#ff0000"> </font><font color="#bb00ff">"$tmpfile"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">editor_exit</font><font color="#F3E651">=</font><font color="#ff0000">$?</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"editor exited with status $editor_exit"</font>
- <b><u><font color="#000000">if</font></u></b> [ ! -s <font color="#808080">"$tmpfile"</font> ]; <b><u><font color="#000000">then</font></u></b>
- log <font color="#808080">"empty file, nothing sent"</font>
- <b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font>
- <b><u><font color="#000000">fi</font></u></b>
-
- log <font color="#808080">"tmpfile contents:"</font>
- log <font color="#808080">"$(cat "</font>$tmpfile<font color="#808080">")"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> -s </font><font color="#bb00ff">"$tmpfile"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b>
+<font color="#ff0000"> log </font><font color="#bb00ff">"empty file, nothing sent"</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b>
+<font color="#ff0000"> </font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"tmpfile contents:"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"$(cat "</font><font color="#ff0000">$tmpfile</font><font color="#bb00ff">")"</font>
- log <font color="#808080">"validating target pane"</font>
- validate_target_pane <font color="#808080">"$target"</font>
- log <font color="#808080">"sending content to target=$target"</font>
- send_content <font color="#808080">"$target"</font> <font color="#808080">"$tmpfile"</font> <font color="#808080">"$prompt_text"</font>
- log <font color="#808080">"=== tmux-edit-send completed ==="</font>
-}
+<font color="#ff0000"> log </font><font color="#bb00ff">"validating target pane"</font>
+<font color="#ff0000"> validate_target_pane </font><font color="#bb00ff">"$target"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"sending content to target=$target"</font>
+<font color="#ff0000"> send_content </font><font color="#bb00ff">"$target"</font><font color="#ff0000"> </font><font color="#bb00ff">"$tmpfile"</font><font color="#ff0000"> </font><font color="#bb00ff">"$prompt_text"</font>
+<font color="#ff0000"> log </font><font color="#bb00ff">"=== tmux-edit-send completed ==="</font>
+<font color="#ff0000">}</font>
-main <font color="#808080">"$@"</font>
+<font color="#ff0000">main </font><font color="#bb00ff">"$@"</font>
</pre>
<br />
<h2 style='display: inline' id='challenges-and-small-discoveries'>Challenges and small discoveries</h2><br />
@@ -393,11 +398,12 @@ main <font color="#808080">"$@"</font>
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-02-22-my-desk-rack.html b/gemfeed/2026-02-22-my-desk-rack.html
index aaf2b45d..61aaccdd 100644
--- a/gemfeed/2026-02-22-my-desk-rack.html
+++ b/gemfeed/2026-02-22-my-desk-rack.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My desk rack: DeskPi RackMate T0</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-02-22-my-desk-rack.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-02-22-my-desk-rack.gmi">Gemini</a>
</p>
@@ -120,11 +125,12 @@
<br />
<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-03-01-loadbars-0.13.0-released.html b/gemfeed/2026-03-01-loadbars-0.13.0-released.html
index 201d4966..b97cc2f8 100644
--- a/gemfeed/2026-03-01-loadbars-0.13.0-released.html
+++ b/gemfeed/2026-03-01-loadbars-0.13.0-released.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Loadbars 0.13.0 released</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-03-01-loadbars-0.13.0-released.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-03-01-loadbars-0.13.0-released.gmi">Gemini</a>
</p>
@@ -219,11 +224,12 @@ mage test
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-03-01-site-reliability-engineering-part-5.html b/gemfeed/2026-03-01-site-reliability-engineering-part-5.html
index deaccb8f..1f2498e7 100644
--- a/gemfeed/2026-03-01-site-reliability-engineering-part-5.html
+++ b/gemfeed/2026-03-01-site-reliability-engineering-part-5.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Site Reliability Engineering - Part 5: System Design, Incidents, and Learning</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-03-01-site-reliability-engineering-part-5.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-03-01-site-reliability-engineering-part-5.gmi">Gemini</a>
</p>
@@ -78,11 +83,12 @@
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.html b/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.html
index ac88d6bb..0971d924 100644
--- a/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.html
+++ b/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>RCM: The Ruby Configuration Management DSL</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.gmi">Gemini</a>
</p>
@@ -64,20 +69,20 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- given { hostname is :earth }
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> given </font><font color="#F3E651">{</font><font color="#ff0000"> hostname is </font><font color="#F3E651">:</font><font color="#ff0000">earth </font><font color="#F3E651">}</font>
- file <font color="#808080">'/tmp/test/wg0.conf'</font> <b><u><font color="#000000">do</font></u></b>
- requires file <font color="#808080">'/etc/hosts.test'</font>
- manage directory
- from template
- <font color="#808080">'content with &lt;%= 1 + 2 %&gt;'</font>
- <b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000"> file </font><font color="#bb00ff">'/tmp/test/wg0.conf'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> requires file </font><font color="#bb00ff">'/etc/hosts.test'</font>
+<font color="#ff0000"> manage directory</font>
+<font color="#ff0000"> from template</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'content with &lt;%= 1 + 2 %&gt;'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
- file <font color="#808080">'/etc/hosts.test'</font> <b><u><font color="#000000">do</font></u></b>
- line <font color="#808080">'192.168.1.101 earth'</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000"> file </font><font color="#bb00ff">'/etc/hosts.test'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> line </font><font color="#bb00ff">'192.168.1.101 earth'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>Which would look like this when run:</span><br />
@@ -86,14 +91,14 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>% sudo ruby example.rb
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> dsl(<font color="#000000">0</font>) =&gt; Configuring...
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> file(<font color="#808080">'/tmp/test/wg0.conf'</font>) =&gt; Registered dependency on file(<font color="#808080">'/etc/hosts.test'</font>)
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> file(<font color="#808080">'/tmp/test/wg0.conf'</font>) =&gt; Evaluating...
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> file(<font color="#808080">'/etc/hosts.test'</font>) =&gt; Evaluating...
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> file(<font color="#808080">'/etc/hosts.test'</font>) =&gt; Writing file /etc/hosts.<b><u><font color="#000000">test</font></u></b>
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> file(<font color="#808080">'/tmp/test/wg0.conf'</font>) =&gt; Creating parent directory /tmp/test
-INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> file(<font color="#808080">'/tmp/test/wg0.conf'</font>) =&gt; Writing file /tmp/test/wg<font color="#000000">0</font>.conf
+<pre><font color="#F3E651">%</font><font color="#ff0000"> sudo ruby example</font><font color="#F3E651">.</font><font color="#ff0000">rb</font>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> dsl</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Configuring</font><font color="#F3E651">...</font>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> file</font><font color="#F3E651">(</font><font color="#bb00ff">'/tmp/test/wg0.conf'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Registered dependency on file</font><font color="#F3E651">(</font><font color="#bb00ff">'/etc/hosts.test'</font><font color="#F3E651">)</font>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> file</font><font color="#F3E651">(</font><font color="#bb00ff">'/tmp/test/wg0.conf'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Evaluating</font><font color="#F3E651">...</font>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> file</font><font color="#F3E651">(</font><font color="#bb00ff">'/etc/hosts.test'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Evaluating</font><font color="#F3E651">...</font>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> file</font><font color="#F3E651">(</font><font color="#bb00ff">'/etc/hosts.test'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Writing file /etc/hosts</font><font color="#F3E651">.</font><b><font color="#ffffff">test</font></b>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> file</font><font color="#F3E651">(</font><font color="#bb00ff">'/tmp/test/wg0.conf'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Creating parent directory /tmp/test</font>
+<font color="#ff0000">INFO </font><font color="#bb00ff">20260301</font><font color="#ff0000">-</font><font color="#bb00ff">213817</font><font color="#ff0000"> file</font><font color="#F3E651">(</font><font color="#bb00ff">'/tmp/test/wg0.conf'</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">=&gt;</font><font color="#ff0000"> Writing file /tmp/test/wg</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">conf</font>
</pre>
<br />
<span>The idea is that you describe the desired state and RCM worries about the steps. The <span class='inlinecode'>given</span> block can short‑circuit the whole run (for example, only run on a specific hostname). Each <span class='inlinecode'>file</span> resource can either manage a complete file (from a template) or just make sure individual lines are present.</span><br />
@@ -129,9 +134,9 @@ INFO <font color="#000000">20260301</font>-<font color="#000000">213817</font> f
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>file <font color="#808080">'/etc/hosts.test'</font> <b><u><font color="#000000">do</font></u></b>
- line <font color="#808080">'192.168.1.101 earth'</font>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">file </font><font color="#bb00ff">'/etc/hosts.test'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> line </font><font color="#bb00ff">'192.168.1.101 earth'</font>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>Ruby turns <span class='inlinecode'>file</span> into a method call and <span class='inlinecode'>&#39;/etc/hosts.test&#39;</span> into a normal argument. Inside RCM, that method builds a <span class='inlinecode'>File</span> resource object and stores it for later. The block you pass is just a Ruby block; RCM calls it with the file resource as <span class='inlinecode'>self</span>, so method calls like <span class='inlinecode'>line</span> configure that resource. There is no special parser here, just plain Ruby method and block dispatch.</span><br />
@@ -142,7 +147,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>given { hostname is :earth }
+<pre><font color="#ff0000">given </font><font color="#F3E651">{</font><font color="#ff0000"> hostname is </font><font color="#F3E651">:</font><font color="#ff0000">earth </font><font color="#F3E651">}</font>
</pre>
<br />
<span>RCM uses Ruby&#39;s dynamic method lookup to interpret <span class='inlinecode'>hostname</span> and <span class='inlinecode'>is</span> in that block and to decide whether the rest of the configuration should run at all. Features like <span class='inlinecode'>method_missing</span>, blocks, and the ability to change what <span class='inlinecode'>self</span> means in a block make this kind of DSL possible with very little code. You still get all the power of Ruby (conditionals, loops, helper methods), but the surface reads like a small language of its own.</span><br />
@@ -157,7 +162,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>given { hostname is :earth }
+<pre><font color="#ff0000">given </font><font color="#F3E651">{</font><font color="#ff0000"> hostname is </font><font color="#F3E651">:</font><font color="#ff0000">earth </font><font color="#F3E651">}</font>
</pre>
<br />
<span>Inside that block, calls such as <span class='inlinecode'>hostname</span> and <span class='inlinecode'>is</span> don&#39;t map to normal Ruby methods. Instead, RCM&#39;s DSL objects see those calls in <span class='inlinecode'>method_missing</span>, and interpret them as "check the current hostname" and "compare it to this symbol". This lets the DSL stay small and flexible: adding a new keyword can be as simple as handling another case in <span class='inlinecode'>method_missing</span>, without changing the Ruby syntax at all.</span><br />
@@ -170,25 +175,25 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">class</font></u></b> HostCondition
- <b><u><font color="#000000">def</font></u></b> initialize
- <b><font color="#000000">@current_hostname</font></b> = Socket.gethostname.to_sym
- <b><u><font color="#000000">end</font></u></b>
+<pre><b><font color="#ffffff">class</font></b><font color="#ff0000"> HostCondition</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">def</font></b><font color="#ff0000"> initialize</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">@current_hostname</font></b><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> Socket</font><font color="#F3E651">.</font><font color="#ff0000">gethostname</font><font color="#F3E651">.</font><font color="#ff0000">to_sym</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
- <b><u><font color="#000000">def</font></u></b> method_missing(name, *args, &amp;)
- <b><u><font color="#000000">case</font></u></b> name
- <b><u><font color="#000000">when</font></u></b> :hostname
- <b><font color="#000000">@left</font></b> = <b><font color="#000000">@current_hostname</font></b>
- <b><u><font color="#000000">self</font></u></b> <i><font color="silver"># allow chaining: hostname is :earth</font></i>
- <b><u><font color="#000000">when</font></u></b> :is
- <b><font color="#000000">@left</font></b> == args.first
- <b><u><font color="#000000">else</font></u></b>
- <b><u><font color="#000000">super</font></u></b>
- <b><u><font color="#000000">end</font></u></b>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">def</font></b><font color="#ff0000"> method_missing</font><font color="#F3E651">(</font><font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">args</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">&amp;)</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">case</font></b><font color="#ff0000"> name</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">when</font></b><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">hostname</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">@left</font></b><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#F35E1E">@current_hostname</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">self</font></b><font color="#ff0000"> </font><i><font color="#ababab"># allow chaining: hostname is :earth</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">when</font></b><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">is</font>
+<font color="#ff0000"> </font><b><font color="#F35E1E">@left</font></b><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> args</font><font color="#F3E651">.</font><font color="#ff0000">first</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">super</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
-HostCondition.new.hostname.is(:earth)
+<font color="#ff0000">HostCondition</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">hostname</font><font color="#F3E651">.</font><font color="#ff0000">is</font><font color="#F3E651">(:</font><font color="#ff0000">earth</font><font color="#F3E651">)</font>
</pre>
<br />
<span>RCM&#39;s real code is more sophisticated, but the idea is the same: Ruby happily calls <span class='inlinecode'>method_missing</span> for unknown methods like <span class='inlinecode'>hostname</span> and <span class='inlinecode'>is</span>, and the DSL turns those calls into a value (<span class='inlinecode'>true</span>/<span class='inlinecode'>false</span>) that decides whether the rest of the configuration should run.</span><br />
@@ -259,12 +264,12 @@ HostCondition.new.hostname.is(:earth)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- file <font color="#808080">'./.file_example.rcmtmp'</font> <b><u><font color="#000000">do</font></u></b>
- from template
- <font color="#808080">'One plus two is &lt;%= 1 + 2 %&gt;!'</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> file </font><font color="#bb00ff">'./.file_example.rcmtmp'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> from template</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'One plus two is &lt;%= 1 + 2 %&gt;!'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='ensuring-a-line-is-absent-from-a-file'>Ensuring a line is absent from a file</h3><br />
@@ -273,12 +278,12 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- file <font color="#808080">'./.file_example.rcmtmp'</font> <b><u><font color="#000000">do</font></u></b>
- line <font color="#808080">'Whats up?'</font>
- is absent
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> file </font><font color="#bb00ff">'./.file_example.rcmtmp'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> line </font><font color="#bb00ff">'Whats up?'</font>
+<font color="#ff0000"> is absent</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='guarding-a-configuration-run-on-the-current-hostname'>Guarding a configuration run on the current hostname</h3><br />
@@ -287,10 +292,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- given { hostname Socket.gethostname }
- ...
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> given </font><font color="#F3E651">{</font><font color="#ff0000"> hostname Socket</font><font color="#F3E651">.</font><font color="#ff0000">gethostname </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">...</font>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='creating-and-deleting-directories-and-purging-a-directory-tree'>Creating and deleting directories, and purging a directory tree</h3><br />
@@ -299,16 +304,16 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- directory <font color="#808080">'./.directory_example.rcmtmp'</font> <b><u><font color="#000000">do</font></u></b>
- is present
- <b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> directory </font><font color="#bb00ff">'./.directory_example.rcmtmp'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> is present</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
- directory delete <b><u><font color="#000000">do</font></u></b>
- path <font color="#808080">'./.directory_example.rcmtmp'</font>
- is absent
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000"> directory delete </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> path </font><font color="#bb00ff">'./.directory_example.rcmtmp'</font>
+<font color="#ff0000"> is absent</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='managing-file-and-directory-modes-and-ownership'>Managing file and directory modes and ownership</h3><br />
@@ -317,15 +322,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- touch <font color="#808080">'./.mode_example.rcmtmp'</font> <b><u><font color="#000000">do</font></u></b>
- mode 0o600
- <b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> touch </font><font color="#bb00ff">'./.mode_example.rcmtmp'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> mode 0o600</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
- directory <font color="#808080">'./.mode_example_dir.rcmtmp'</font> <b><u><font color="#000000">do</font></u></b>
- mode 0o705
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000"> directory </font><font color="#bb00ff">'./.mode_example_dir.rcmtmp'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> mode 0o705</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='using-a-chained-more-natural-language-style-for-notifications'>Using a chained, more natural language style for notifications</h3><br />
@@ -336,11 +341,11 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- notify hello dear world <b><u><font color="#000000">do</font></u></b>
- thank you to be part of you
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> notify hello dear world </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> thank you to be part of you</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='touching-files-and-updating-their-timestamps'>Touching files and updating their timestamps</h3><br />
@@ -349,9 +354,9 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- touch <font color="#808080">'./.touch_example.rcmtmp'</font>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> touch </font><font color="#bb00ff">'./.touch_example.rcmtmp'</font>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='expressing-dependencies-between-notifications'>Expressing dependencies between notifications</h3><br />
@@ -360,19 +365,19 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- notify foo <b><u><font color="#000000">do</font></u></b>
- requires notify bar <b><u><font color="#000000">and</font></u></b> requires notify baz
- <font color="#808080">'foo_message'</font>
- <b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> notify foo </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> requires notify bar </font><b><font color="#ffffff">and</font></b><font color="#ff0000"> requires notify baz</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'foo_message'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
- notify bar
+<font color="#ff0000"> notify bar</font>
- notify baz <b><u><font color="#000000">do</font></u></b>
- requires notify bar
- <font color="#808080">'baz_message'</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<font color="#ff0000"> notify baz </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> requires notify bar</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'baz_message'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='creating-and-updating-symbolic-links'>Creating and updating symbolic links</h3><br />
@@ -381,12 +386,12 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- symlink <font color="#808080">'./.symlink_example.rcmtmp'</font> <b><u><font color="#000000">do</font></u></b>
- manage directory
- <font color="#808080">'./.symlink_target_example.rcmtmp'</font>
- <b><u><font color="#000000">end</font></u></b>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> symlink </font><font color="#bb00ff">'./.symlink_example.rcmtmp'</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> manage directory</font>
+<font color="#ff0000"> </font><font color="#bb00ff">'./.symlink_target_example.rcmtmp'</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<h3 style='display: inline' id='detecting-duplicate-resource-definitions-at-configure-time'>Detecting duplicate resource definitions at configure time</h3><br />
@@ -395,10 +400,10 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>configure <b><u><font color="#000000">do</font></u></b>
- notify :foo
- notify :foo <i><font color="silver"># raises RCM::DSL::DuplicateResource</font></i>
-<b><u><font color="#000000">end</font></u></b>
+<pre><font color="#ff0000">configure </font><b><font color="#ffffff">do</font></b>
+<font color="#ff0000"> notify </font><font color="#F3E651">:</font><font color="#ff0000">foo</font>
+<font color="#ff0000"> notify </font><font color="#F3E651">:</font><font color="#ff0000">foo </font><i><font color="#ababab"># raises RCM::DSL::DuplicateResource</font></i>
+<b><font color="#ffffff">end</font></b>
</pre>
<br />
<span>If you find RCM interesting, feel free to browse the code, adapt it to your own setup, or just steal ideas for your own Ruby DSLs. I will probably extend it with more features over time as my own needs evolve.</span><br />
@@ -414,11 +419,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/DRAFT-distributed-systems-simulator.html b/gemfeed/DRAFT-distributed-systems-simulator.html
index 9a9f51ef..683b8bc2 100644
--- a/gemfeed/DRAFT-distributed-systems-simulator.html
+++ b/gemfeed/DRAFT-distributed-systems-simulator.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Distributed Systems Simulator</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-distributed-systems-simulator.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-distributed-systems-simulator.gmi">Gemini</a>
</p>
@@ -312,11 +317,12 @@ Table 2.1: Color differentiation of processes and messages
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html
index 59b4996f..a3fa3c2e 100644
--- a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html
+++ b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part 9: Enabling etcd Metrics</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-8b.gmi">Gemini</a>
</p>
@@ -29,10 +34,10 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git clone https://codeberg.org/snonux/conf.git
-$ cd conf
-$ git checkout 15a86f3 <i><font color="silver"># Last commit before ArgoCD migration</font></i>
-$ cd f3s/prometheus/
+<pre><font color="#ff0000">$ git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/conf</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">$ cd conf</font>
+<font color="#ff0000">$ git checkout 15a86f3 </font><i><font color="#ababab"># Last commit before ArgoCD migration</font></i>
+<font color="#ff0000">$ cd f3s/prometheus</font><font color="#F3E651">/</font>
</pre>
<br />
<span>**Current master branch** uses ArgoCD with:</span><br />
@@ -767,35 +772,35 @@ opentelemetry-instrumentation-requests==0.49b0
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">from</font></u></b> opentelemetry <b><u><font color="#000000">import</font></u></b> trace
-<b><u><font color="#000000">from</font></u></b> opentelemetry.sdk.trace <b><u><font color="#000000">import</font></u></b> TracerProvider
-<b><u><font color="#000000">from</font></u></b> opentelemetry.exporter.otlp.proto.grpc.trace_exporter <b><u><font color="#000000">import</font></u></b> OTLPSpanExporter
-<b><u><font color="#000000">from</font></u></b> opentelemetry.instrumentation.flask <b><u><font color="#000000">import</font></u></b> FlaskInstrumentor
-<b><u><font color="#000000">from</font></u></b> opentelemetry.instrumentation.requests <b><u><font color="#000000">import</font></u></b> RequestsInstrumentor
-<b><u><font color="#000000">from</font></u></b> opentelemetry.sdk.resources <b><u><font color="#000000">import</font></u></b> Resource
+<pre><font color="#ababab">from</font><font color="#ff0000"> opentelemetry </font><font color="#ababab">import</font><font color="#ff0000"> trace</font>
+<font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">sdk</font><font color="#F3E651">.</font><font color="#ff0000">trace </font><font color="#ababab">import</font><font color="#ff0000"> TracerProvider</font>
+<font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">exporter</font><font color="#F3E651">.</font><font color="#ff0000">otlp</font><font color="#F3E651">.</font><font color="#ff0000">proto</font><font color="#F3E651">.</font><font color="#ff0000">grpc</font><font color="#F3E651">.</font><font color="#ff0000">trace_exporter </font><font color="#ababab">import</font><font color="#ff0000"> OTLPSpanExporter</font>
+<font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">instrumentation</font><font color="#F3E651">.</font><font color="#ff0000">flask </font><font color="#ababab">import</font><font color="#ff0000"> FlaskInstrumentor</font>
+<font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">instrumentation</font><font color="#F3E651">.</font><font color="#ff0000">requests </font><font color="#ababab">import</font><font color="#ff0000"> RequestsInstrumentor</font>
+<font color="#ababab">from</font><font color="#ff0000"> opentelemetry</font><font color="#F3E651">.</font><font color="#ff0000">sdk</font><font color="#F3E651">.</font><font color="#ff0000">resources </font><font color="#ababab">import</font><font color="#ff0000"> Resource</font>
-<i><font color="silver"># Define service identity</font></i>
-resource = Resource(attributes={
- <font color="#808080">"service.name"</font>: <font color="#808080">"frontend"</font>,
- <font color="#808080">"service.namespace"</font>: <font color="#808080">"tracing-demo"</font>,
- <font color="#808080">"service.version"</font>: <font color="#808080">"1.0.0"</font>
-})
+<i><font color="#ababab"># Define service identity</font></i>
+<font color="#ff0000">resource </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">Resource</font><font color="#F3E651">(</font><font color="#ff0000">attributes</font><font color="#F3E651">={</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"service.name"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"frontend"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"service.namespace"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"tracing-demo"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#bb00ff">"service.version"</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"1.0.0"</font>
+<font color="#F3E651">})</font>
-provider = TracerProvider(resource=resource)
+<font color="#ff0000">provider </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">TracerProvider</font><font color="#F3E651">(</font><font color="#ff0000">resource</font><font color="#F3E651">=</font><font color="#ff0000">resource</font><font color="#F3E651">)</font>
-<i><font color="silver"># Export to Alloy</font></i>
-otlp_exporter = OTLPSpanExporter(
- endpoint=<font color="#808080">"http://alloy.monitoring.svc.cluster.local:4317"</font>,
- insecure=True
-)
+<i><font color="#ababab"># Export to Alloy</font></i>
+<font color="#ff0000">otlp_exporter </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">OTLPSpanExporter</font><font color="#F3E651">(</font>
+<font color="#ff0000"> endpoint</font><font color="#F3E651">=</font><font color="#bb00ff">"http://alloy.monitoring.svc.cluster.local:4317"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> insecure</font><font color="#F3E651">=</font><font color="#ff0000">True</font>
+<font color="#F3E651">)</font>
-processor = BatchSpanProcessor(otlp_exporter)
-provider.add_span_processor(processor)
-trace.set_tracer_provider(provider)
+<font color="#ff0000">processor </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">BatchSpanProcessor</font><font color="#F3E651">(</font><font color="#ff0000">otlp_exporter</font><font color="#F3E651">)</font>
+<font color="#ff0000">provider</font><font color="#F3E651">.</font><font color="#7bc710">add_span_processor</font><font color="#F3E651">(</font><font color="#ff0000">processor</font><font color="#F3E651">)</font>
+<font color="#ff0000">trace</font><font color="#F3E651">.</font><font color="#7bc710">set_tracer_provider</font><font color="#F3E651">(</font><font color="#ff0000">provider</font><font color="#F3E651">)</font>
-<i><font color="silver"># Auto-instrument Flask and requests</font></i>
-FlaskInstrumentor().instrument_app(app)
-RequestsInstrumentor().instrument()
+<i><font color="#ababab"># Auto-instrument Flask and requests</font></i>
+<font color="#7bc710">FlaskInstrumentor</font><font color="#F3E651">().</font><font color="#7bc710">instrument_app</font><font color="#F3E651">(</font><font color="#ff0000">app</font><font color="#F3E651">)</font>
+<font color="#7bc710">RequestsInstrumentor</font><font color="#F3E651">().</font><font color="#7bc710">instrument</font><font color="#F3E651">()</font>
</pre>
<br />
<span>The auto-instrumentation automatically:</span><br />
@@ -972,29 +977,29 @@ curl -H "Host: tracing-demo.f3s.buetow.org" http://r0/api/process
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>{
- "middleware_response": {
- "backend_data": {
- "data": {
- "id": <font color="#000000">12345</font>,
- "query_time_ms": <font color="#000000">100.0</font>,
- "timestamp": "<font color="#808080">2025-12-28T18:35:01.064538</font>",
- "value": "<font color="#808080">Sample data from backend service</font>"
- },
- "service": "<font color="#808080">backend</font>"
- },
- "middleware_processed": <b><u><font color="#000000">true</font></u></b>,
- "original_data": {
- "source": "<font color="#808080">GET request</font>"
- },
- "transformation_time_ms": <font color="#000000">50</font>
- },
- "request_data": {
- "source": "<font color="#808080">GET request</font>"
- },
- "service": "<font color="#808080">frontend</font>",
- "status": "<font color="#808080">success</font>"
-}
+<pre><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">middleware_response</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">backend_data</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">data</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">id</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">12345</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">query_time_ms</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">100.0</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">timestamp</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">2025-12-28T18:35:01.064538</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">value</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">Sample data from backend service</font><font color="#ff0000">"</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">service</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">backend</font><font color="#ff0000">"</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">middleware_processed</font><font color="#ff0000">"</font><font color="#ff0000">: </font><b><font color="#ffffff">true</font></b><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">original_data</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">source</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">GET request</font><font color="#ff0000">"</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">transformation_time_ms</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">50</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">request_data</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">source</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">GET request</font><font color="#ff0000">"</font>
+<font color="#ff0000"> </font><font color="#F3E651">},</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">service</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">frontend</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">status</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">success</font><font color="#ff0000">"</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>**2. Find the trace in Tempo via API:**</span><br />
@@ -1013,12 +1018,12 @@ kubectl exec -n monitoring tempo-0 -- wget -qO- \
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>{
- "traceID": "<font color="#808080">4be1151c0bdcd5625ac7e02b98d95bd5</font>",
- "rootServiceName": "<font color="#808080">frontend</font>",
- "rootTraceName": "<font color="#808080">GET /api/process</font>",
- "durationMs": <font color="#000000">221</font>
-}
+<pre><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">traceID</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">4be1151c0bdcd5625ac7e02b98d95bd5</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">rootServiceName</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">frontend</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">rootTraceName</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">GET /api/process</font><font color="#ff0000">"</font><font color="#F3E651">,</font>
+<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">durationMs</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">221</font>
+<font color="#F3E651">}</font>
</pre>
<br />
<span>**3. Fetch complete trace details:**</span><br />
@@ -1149,11 +1154,12 @@ kubectl exec -n monitoring &lt;tempo-pod&gt; -- df -h /var/tempo
<a class='textlink' href='https://codeberg.org/snonux/conf/src/branch/master/f3s/loki'>Alloy configuration (updated for traces)</a><br />
<a class='textlink' href='https://codeberg.org/snonux/conf/src/branch/master/f3s/tracing-demo'>Demo tracing application</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.html b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.html
index 5d58d4c5..b4e9758c 100644
--- a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.html
+++ b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>f3s: Kubernetes with FreeBSD - Part X: GitOps with ArgoCD</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-part-X.gmi">Gemini</a>
</p>
@@ -155,8 +160,8 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl create namespace cicd
-namespace/cicd created
+<pre><font color="#ff0000">$ kubectl create namespace cicd</font>
+<font color="#ff0000">namespace/cicd created</font>
</pre>
<br />
<h3 style='display: inline' id='installing-argocd'>Installing ArgoCD</h3><br />
@@ -171,18 +176,18 @@ namespace/cicd created
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd conf/f3s/argocd
-$ just install
-helm repo add argo https://argoproj.github.io/argo-helm
-helm repo update
-helm install argocd argo/argo-cd \
- --namespace cicd \
- --version <font color="#000000">7.7</font>.<font color="#000000">12</font> \
- -f values.yaml
-NAME: argocd
-LAST DEPLOYED: ...
-NAMESPACE: cicd
-STATUS: deployed
+<pre><font color="#ff0000">$ cd conf/f3s/argocd</font>
+<font color="#ff0000">$ just install</font>
+<font color="#ff0000">helm repo add argo https</font><font color="#F3E651">:</font><font color="#ff0000">//argoproj</font><font color="#F3E651">.</font><font color="#ff0000">github</font><font color="#F3E651">.</font><font color="#ff0000">io/argo-helm</font>
+<font color="#ff0000">helm repo update</font>
+<font color="#ff0000">helm install argocd argo/argo-cd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --namespace cicd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --version </font><font color="#bb00ff">7.7</font><font color="#F3E651">.</font><font color="#bb00ff">12</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -f values</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">NAME</font><font color="#F3E651">:</font><font color="#ff0000"> argocd</font>
+<font color="#ff0000">LAST DEPLOYED</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#ff0000">NAMESPACE</font><font color="#F3E651">:</font><font color="#ff0000"> cicd</font>
+<font color="#ff0000">STATUS</font><font color="#F3E651">:</font><font color="#ff0000"> deployed</font>
</pre>
<br />
<span>The <span class='inlinecode'>values.yaml</span> file configures several important aspects:</span><br />
@@ -214,12 +219,12 @@ configs:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ ARGOCD_ADMIN_PASSWORD=$(pwgen -s <font color="#000000">32</font> <font color="#000000">1</font>)
-$ BCRYPT_HASH=$(htpasswd -nbBC <font color="#000000">10</font> <font color="#808080">""</font> <font color="#808080">"$ARGOCD_ADMIN_PASSWORD"</font> | tr -d <font color="#808080">':</font>\n<font color="#808080">'</font> | sed <font color="#808080">'s/$2y/$2a/'</font>)
-$ kubectl create secret generic argocd-secret \
- --from-literal=admin.password=<font color="#808080">"$BCRYPT_HASH"</font> \
- -n cicd
-$ echo <font color="#808080">"ArgoCD admin password: $ARGOCD_ADMIN_PASSWORD"</font>
+<pre><font color="#ff0000">$ </font><font color="#ff0000">ARGOCD_ADMIN_PASSWORD</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">pwgen -s </font><font color="#bb00ff">32</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">)</font>
+<font color="#ff0000">$ </font><font color="#ff0000">BCRYPT_HASH</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">htpasswd -nbBC </font><font color="#bb00ff">10</font><font color="#ff0000"> </font><font color="#bb00ff">""</font><font color="#ff0000"> </font><font color="#bb00ff">"$ARGOCD_ADMIN_PASSWORD"</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tr -d </font><font color="#bb00ff">':</font><font color="#ffffff">\n</font><font color="#bb00ff">'</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sed </font><font color="#bb00ff">'s/$2y/$2a/'</font><font color="#F3E651">)</font>
+<font color="#ff0000">$ kubectl create secret generic argocd-secret </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --from-literal</font><font color="#F3E651">=</font><font color="#ff0000">admin</font><font color="#F3E651">.</font><font color="#ff0000">password</font><font color="#F3E651">=</font><font color="#bb00ff">"$BCRYPT_HASH"</font><font color="#ff0000"> </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -n cicd</font>
+<font color="#ff0000">$ echo </font><font color="#bb00ff">"ArgoCD admin password: $ARGOCD_ADMIN_PASSWORD"</font>
</pre>
<br />
<span>**Server configuration**: Enabled insecure mode since TLS is handled by the OpenBSD edge relays:</span><br />
@@ -237,15 +242,15 @@ server:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get pods -n cicd
-NAME READY STATUS RESTARTS AGE
-argocd-application-controller-<font color="#000000">0</font> <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
-argocd-applicationset-controller-66d6b9b8f4-vhm9k <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
-argocd-dex-server-7fb556b7dd-xjr2l <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
-argocd-notifications-controller-6d8dd4c5f5-b8vwl <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
-argocd-redis-77b8d6c6d4-mz9hg <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
-argocd-repo-server-5f98f77b97-8xtcq <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
-argocd-server-6b9c4b4f8d-kxw7p <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 45d
+<pre><font color="#ff0000">$ kubectl get pods -n cicd</font>
+<font color="#ff0000">NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">argocd-application-controller-</font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
+<font color="#ff0000">argocd-applicationset-controller-66d6b9b8f4-vhm9k </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
+<font color="#ff0000">argocd-dex-server-7fb556b7dd-xjr2l </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
+<font color="#ff0000">argocd-notifications-controller-6d8dd4c5f5-b8vwl </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
+<font color="#ff0000">argocd-redis-77b8d6c6d4-mz9hg </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
+<font color="#ff0000">argocd-repo-server-5f98f77b97-8xtcq </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
+<font color="#ff0000">argocd-server-6b9c4b4f8d-kxw7p </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 45d</font>
</pre>
<br />
<span>I created an ingress to expose the ArgoCD web UI:</span><br />
@@ -283,8 +288,8 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ argocd login argocd.f3s.buetow.org
-$ argocd app list
+<pre><font color="#ff0000">$ argocd login argocd</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">$ argocd app list</font>
</pre>
<br />
<h2 style='display: inline' id='argocd-application-structure'>ArgoCD Application Structure</h2><br />
@@ -455,22 +460,22 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>NAMESPACE := <font color="#808080">"services"</font>
-APP_NAME := <font color="#808080">"miniflux"</font>
+<pre><font color="#F3E651">NAMESPACE :=</font><font color="#ff0000"> </font><font color="#bb00ff">"services"</font>
+<font color="#F3E651">APP_NAME :=</font><font color="#ff0000"> </font><font color="#bb00ff">"miniflux"</font>
-install:
- kubectl apply -f helm-chart/persistent-volumes.yaml
- helm install {{APP_NAME}} ./helm-chart --namespace {{NAMESPACE}}
+<font color="#F3E651">install:</font>
+<font color="#ff0000"> kubectl apply -f helm-chart/persistent-volumes.yaml</font>
+<font color="#ff0000"> helm install {{APP_NAME}} </font><font color="#F3E651">.</font><font color="#ff0000">/helm-chart --namespace {{NAMESPACE}}</font>
-upgrade:
- helm upgrade {{APP_NAME}} ./helm-chart --namespace {{NAMESPACE}}
+<font color="#F3E651">upgrade:</font>
+<font color="#ff0000"> helm upgrade {{APP_NAME}} </font><font color="#F3E651">.</font><font color="#ff0000">/helm-chart --namespace {{NAMESPACE}}</font>
-uninstall:
- helm uninstall {{APP_NAME}} --namespace {{NAMESPACE}}
- kubectl delete -f helm-chart/persistent-volumes.yaml
+<font color="#F3E651">uninstall:</font>
+<font color="#ff0000"> helm uninstall {{APP_NAME}} --namespace {{NAMESPACE}}</font>
+<font color="#ff0000"> kubectl delete -f helm-chart/persistent-volumes.yaml</font>
-status:
- @kubectl get all -n {{NAMESPACE}} -l app={{APP_NAME}}
+<font color="#F3E651">status:</font>
+<font color="#ff0000"> @kubectl get all -n {{NAMESPACE}} -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">{{APP_NAME}}</font>
</pre>
<br />
<span>Workflow:</span><br />
@@ -519,30 +524,30 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>NAMESPACE := <font color="#808080">"services"</font>
-APP_NAME := <font color="#808080">"miniflux"</font>
+<pre><font color="#F3E651">NAMESPACE :=</font><font color="#ff0000"> </font><font color="#bb00ff">"services"</font>
+<font color="#F3E651">APP_NAME :=</font><font color="#ff0000"> </font><font color="#bb00ff">"miniflux"</font>
-status:
- @echo <font color="#808080">"=== Pods ==="</font>
- @kubectl get pods -n {{NAMESPACE}} -l app={{APP_NAME}}
- @echo <font color="#808080">""</font>
- @echo <font color="#808080">"=== Services ==="</font>
- @kubectl get svc -n {{NAMESPACE}} -l app={{APP_NAME}}
- @echo <font color="#808080">""</font>
- @echo <font color="#808080">"=== ArgoCD Status ==="</font>
- @kubectl get application {{APP_NAME}} -n cicd -o jsonpath=<font color="#808080">'Sync: {.status.sync.status}, Health: {.status.health.status}'</font> <font color="#000000">2</font>&gt;/dev/null &amp;&amp; echo <font color="#808080">""</font>
+<font color="#F3E651">status:</font>
+<font color="#ff0000"> @echo </font><font color="#bb00ff">"=== Pods ==="</font>
+<font color="#ff0000"> @kubectl get pods -n {{NAMESPACE}} -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">{{APP_NAME}}</font>
+<font color="#ff0000"> @echo </font><font color="#bb00ff">""</font>
+<font color="#ff0000"> @echo </font><font color="#bb00ff">"=== Services ==="</font>
+<font color="#ff0000"> @kubectl get svc -n {{NAMESPACE}} -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">{{APP_NAME}}</font>
+<font color="#ff0000"> @echo </font><font color="#bb00ff">""</font>
+<font color="#ff0000"> @echo </font><font color="#bb00ff">"=== ArgoCD Status ==="</font>
+<font color="#ff0000"> @kubectl get application {{APP_NAME}} -n cicd -o </font><font color="#ff0000">jsonpath</font><font color="#F3E651">=</font><font color="#bb00ff">'Sync: {.status.sync.status}, Health: {.status.health.status}'</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">&gt;</font><font color="#ff0000">/dev/null </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo </font><font color="#bb00ff">""</font>
-sync:
- @echo <font color="#808080">"Triggering ArgoCD sync..."</font>
- @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite
- @sleep <font color="#000000">2</font>
- @kubectl get application {{APP_NAME}} -n cicd -o jsonpath=<font color="#808080">'Sync: {.status.sync.status}, Health: {.status.health.status}'</font> &amp;&amp; echo <font color="#808080">""</font>
+<font color="#F3E651">sync:</font>
+<font color="#ff0000"> @echo </font><font color="#bb00ff">"Triggering ArgoCD sync..."</font>
+<font color="#ff0000"> @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh</font><font color="#F3E651">=</font><font color="#ff0000">normal --overwrite</font>
+<font color="#ff0000"> @sleep </font><font color="#bb00ff">2</font>
+<font color="#ff0000"> @kubectl get application {{APP_NAME}} -n cicd -o </font><font color="#ff0000">jsonpath</font><font color="#F3E651">=</font><font color="#bb00ff">'Sync: {.status.sync.status}, Health: {.status.health.status}'</font><font color="#ff0000"> </font><font color="#F3E651">&amp;&amp;</font><font color="#ff0000"> echo </font><font color="#bb00ff">""</font>
-argocd-status:
- argocd app get {{APP_NAME}} --core
+<font color="#F3E651">argocd-status:</font>
+<font color="#ff0000"> argocd app get {{APP_NAME}} --core</font>
-logs:
- kubectl logs -n {{NAMESPACE}} -l app={{APP_NAME}} --tail=<font color="#000000">100</font> -f
+<font color="#F3E651">logs:</font>
+<font color="#ff0000"> kubectl logs -n {{NAMESPACE}} -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">{{APP_NAME}} --tail</font><font color="#F3E651">=</font><font color="#bb00ff">100</font><font color="#ff0000"> -f</font>
</pre>
<br />
<span>New workflow:</span><br />
@@ -558,8 +563,8 @@ logs:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ helm get values miniflux -n services &gt; /tmp/miniflux-backup-values.yaml
-$ kubectl get all,ingress -n services -o yaml &gt; /tmp/miniflux-backup.yaml
+<pre><font color="#ff0000">$ helm get values miniflux -n services </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/miniflux-backup-values</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">$ kubectl get all</font><font color="#F3E651">,</font><font color="#ff0000">ingress -n services -o yaml </font><font color="#F3E651">&gt;</font><font color="#ff0000"> /tmp/miniflux-backup</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
</pre>
<br />
<span>2. **Create Application manifest**:</span><br />
@@ -567,8 +572,8 @@ $ kubectl get all,ingress -n services -o yaml &gt; /tmp/miniflux-backup.yaml
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl apply -f argocd-apps/services/miniflux.yaml
-application.argoproj.io/miniflux created
+<pre><font color="#ff0000">$ kubectl apply -f argocd-apps/services/miniflux</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">application</font><font color="#F3E651">.</font><font color="#ff0000">argoproj</font><font color="#F3E651">.</font><font color="#ff0000">io/miniflux created</font>
</pre>
<br />
<span>3. **Verify ArgoCD adopted the resources**:</span><br />
@@ -576,19 +581,19 @@ application.argoproj.io/miniflux created
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ argocd app get miniflux
-Name: miniflux
-Project: default
-Server: https://kubernetes.default.svc
-Namespace: services
-URL: https://argocd.f3s.buetow.org/applications/miniflux
-Repo: https://codeberg.org/snonux/conf.git
-Target: master
-Path: f3s/miniflux/helm-chart
-SyncWindow: Sync Allowed
-Sync Policy: Automated (Prune)
-Sync Status: Synced to master (4e3c216)
-Health Status: Healthy
+<pre><font color="#ff0000">$ argocd app get miniflux</font>
+<font color="#ff0000">Name</font><font color="#F3E651">:</font><font color="#ff0000"> miniflux</font>
+<font color="#ff0000">Project</font><font color="#F3E651">:</font><font color="#ff0000"> default</font>
+<font color="#ff0000">Server</font><font color="#F3E651">:</font><font color="#ff0000"> https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc</font>
+<font color="#ff0000">Namespace</font><font color="#F3E651">:</font><font color="#ff0000"> services</font>
+<font color="#ff0000">URL</font><font color="#F3E651">:</font><font color="#ff0000"> https</font><font color="#F3E651">:</font><font color="#ff0000">//argocd</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org/applications/miniflux</font>
+<font color="#ff0000">Repo</font><font color="#F3E651">:</font><font color="#ff0000"> https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/conf</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">Target</font><font color="#F3E651">:</font><font color="#ff0000"> master</font>
+<font color="#ff0000">Path</font><font color="#F3E651">:</font><font color="#ff0000"> f3s/miniflux/helm-chart</font>
+<font color="#ff0000">SyncWindow</font><font color="#F3E651">:</font><font color="#ff0000"> Sync Allowed</font>
+<font color="#ff0000">Sync Policy</font><font color="#F3E651">:</font><font color="#ff0000"> Automated </font><font color="#F3E651">(</font><font color="#ff0000">Prune</font><font color="#F3E651">)</font>
+<font color="#ff0000">Sync Status</font><font color="#F3E651">:</font><font color="#ff0000"> Synced to master </font><font color="#F3E651">(</font><font color="#ff0000">4e3c216</font><font color="#F3E651">)</font>
+<font color="#ff0000">Health Status</font><font color="#F3E651">:</font><font color="#ff0000"> Healthy</font>
</pre>
<br />
<span>4. **Monitor for issues**:</span><br />
@@ -596,10 +601,10 @@ Health Status: Healthy
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl get pods -n services -l app=miniflux -w
-NAME READY STATUS RESTARTS AGE
-miniflux-postgres-556444cb8d-xvv2p <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 54d
-miniflux-server-85d7c64664-stmt<font color="#000000">9</font> <font color="#000000">1</font>/<font color="#000000">1</font> Running <font color="#000000">0</font> 54d
+<pre><font color="#ff0000">$ kubectl get pods -n services -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">miniflux -w</font>
+<font color="#ff0000">NAME READY STATUS RESTARTS AGE</font>
+<font color="#ff0000">miniflux-postgres-556444cb8d-xvv2p </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 54d</font>
+<font color="#ff0000">miniflux-server-85d7c64664-stmt</font><font color="#bb00ff">9</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">/</font><font color="#bb00ff">1</font><font color="#ff0000"> Running </font><font color="#bb00ff">0</font><font color="#ff0000"> 54d</font>
</pre>
<br />
<span>5. **Test the application**:</span><br />
@@ -607,8 +612,8 @@ miniflux-server-85d7c64664-stmt<font color="#000000">9</font> <font color="#0
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ curl -I https://flux.f3s.buetow.org
-HTTP/<font color="#000000">2</font> <font color="#000000">200</font>
+<pre><font color="#ff0000">$ curl -I https</font><font color="#F3E651">:</font><font color="#ff0000">//flux</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000">HTTP</font><font color="#F3E651">/</font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">200</font>
</pre>
<br />
<span>6. **Update Justfile** and commit changes</span><br />
@@ -742,30 +747,30 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ argocd app list
-NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY
-alloy https://kubernetes.default.svc monitoring default Synced Healthy Auto-Prune
-anki-sync-server https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-audiobookshelf https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-example-apache https://kubernetes.default.svc <b><u><font color="#000000">test</font></u></b> default Synced Healthy Auto-Prune
-example-apache-volume-... https://kubernetes.default.svc <b><u><font color="#000000">test</font></u></b> default Synced Healthy Auto-Prune
-filebrowser https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-freshrss https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-grafana-ingress https://kubernetes.default.svc monitoring default Synced Healthy Auto-Prune
-immich https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-keybr https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-kobo-sync-server https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-loki https://kubernetes.default.svc monitoring default Synced Healthy Auto-Prune
-miniflux https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-opodsync https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-prometheus https://kubernetes.default.svc monitoring default Synced Healthy Auto
-pushgateway https://kubernetes.default.svc monitoring default Synced Healthy Auto-Prune
-radicale https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-registry https://kubernetes.default.svc infra default Synced Healthy Auto-Prune
-syncthing https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-tempo https://kubernetes.default.svc monitoring default Synced Healthy Auto-Prune
-wallabag https://kubernetes.default.svc services default Synced Healthy Auto-Prune
-webdav https://kubernetes.default.svc services default Synced Healthy Auto-Prune
+<pre><font color="#ff0000">$ argocd app list</font>
+<font color="#ff0000">NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY</font>
+<font color="#ff0000">alloy https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc monitoring default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">anki-sync-server https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">audiobookshelf https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">example-apache https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">example-apache-volume-</font><font color="#F3E651">...</font><font color="#ff0000"> https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">filebrowser https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">freshrss https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">grafana-ingress https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc monitoring default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">immich https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">keybr https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">kobo-sync-server https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">loki https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc monitoring default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">miniflux https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">opodsync https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">prometheus https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc monitoring default Synced Healthy Auto</font>
+<font color="#ff0000">pushgateway https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc monitoring default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">radicale https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">registry https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc infra default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">syncthing https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">tempo https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc monitoring default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">wallabag https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
+<font color="#ff0000">webdav https</font><font color="#F3E651">:</font><font color="#ff0000">//kubernetes</font><font color="#F3E651">.</font><font color="#ff0000">default</font><font color="#F3E651">.</font><font color="#ff0000">svc services default Synced Healthy Auto-Prune</font>
</pre>
<br />
<span>All 21 applications: **Synced** and **Healthy**.</span><br />
@@ -786,10 +791,10 @@ webdav https://kubernetes.default.svc services default
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git clone https://codeberg.org/snonux/conf.git
-$ cd conf/f3s
-$ ls argocd-apps/
-alloy.yaml anki-sync-server.yaml audiobookshelf.yaml ...
+<pre><font color="#ff0000">$ git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/conf</font><font color="#F3E651">.</font><font color="#ff0000">git</font>
+<font color="#ff0000">$ cd conf/f3s</font>
+<font color="#ff0000">$ ls argocd-apps</font><font color="#F3E651">/</font>
+<font color="#ff0000">alloy</font><font color="#F3E651">.</font><font color="#ff0000">yaml anki-sync-server</font><font color="#F3E651">.</font><font color="#ff0000">yaml audiobookshelf</font><font color="#F3E651">.</font><font color="#ff0000">yaml </font><font color="#F3E651">...</font>
</pre>
<br />
<h3 style='display: inline' id='2-automatic-synchronization'>2. Automatic Synchronization</h3><br />
@@ -800,12 +805,12 @@ alloy.yaml anki-sync-server.yaml audiobookshelf.yaml ...
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ cd conf/f3s/miniflux/helm-chart
-$ vim values.yaml <i><font color="silver"># Change replica count from 1 to 2</font></i>
-$ git add values.yaml
-$ git commit -m <font color="#808080">"Scale miniflux to 2 replicas"</font>
-$ git push
-<i><font color="silver"># ArgoCD detects change within 3 minutes and syncs automatically</font></i>
+<pre><font color="#ff0000">$ cd conf/f3s/miniflux/helm-chart</font>
+<font color="#ff0000">$ vim values</font><font color="#F3E651">.</font><font color="#ff0000">yaml </font><i><font color="#ababab"># Change replica count from 1 to 2</font></i>
+<font color="#ff0000">$ git add values</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">$ git commit -m </font><font color="#bb00ff">"Scale miniflux to 2 replicas"</font>
+<font color="#ff0000">$ git push</font>
+<i><font color="#ababab"># ArgoCD detects change within 3 minutes and syncs automatically</font></i>
</pre>
<br />
<span>No need to SSH to a workstation, pull the repo, and run <span class='inlinecode'>just upgrade</span>.</span><br />
@@ -818,13 +823,13 @@ $ git push
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl scale deployment miniflux-server -n services --replicas=<font color="#000000">3</font>
-deployment.apps/miniflux-server scaled
+<pre><font color="#ff0000">$ kubectl scale deployment miniflux-server -n services --replicas</font><font color="#F3E651">=</font><font color="#bb00ff">3</font>
+<font color="#ff0000">deployment</font><font color="#F3E651">.</font><font color="#ff0000">apps/miniflux-server scaled</font>
-<i><font color="silver"># ArgoCD detects drift within 3 minutes</font></i>
-$ argocd app get miniflux
-...
-Sync Status: OutOfSync from master (4e3c216)
+<i><font color="#ababab"># ArgoCD detects drift within 3 minutes</font></i>
+<font color="#ff0000">$ argocd app get miniflux</font>
+<font color="#F3E651">...</font>
+<font color="#ff0000">Sync Status</font><font color="#F3E651">:</font><font color="#ff0000"> OutOfSync from master </font><font color="#F3E651">(</font><font color="#ff0000">4e3c216</font><font color="#F3E651">)</font>
</pre>
<br />
<span>With <span class='inlinecode'>selfHeal: true</span>, ArgoCD automatically reverts the change back to 2 replicas (the value in Git).</span><br />
@@ -837,9 +842,9 @@ Sync Status: OutOfSync from master (4e3c216)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git revert HEAD
-$ git push
-<i><font color="silver"># ArgoCD automatically rolls back to the previous state</font></i>
+<pre><font color="#ff0000">$ git revert HEAD</font>
+<font color="#ff0000">$ git push</font>
+<i><font color="#ababab"># ArgoCD automatically rolls back to the previous state</font></i>
</pre>
<br />
<span>Or rollback to a specific commit:</span><br />
@@ -848,7 +853,7 @@ $ git push
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ argocd app rollback miniflux &lt;revision-id&gt;
+<pre><font color="#ff0000">$ argocd app rollback miniflux </font><font color="#F3E651">&lt;</font><font color="#ff0000">revision-id</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<h3 style='display: inline' id='5-disaster-recovery'>5. Disaster Recovery</h3><br />
@@ -863,7 +868,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl apply -f argocd-apps/
+<pre><font color="#ff0000">$ kubectl apply -f argocd-apps</font><font color="#F3E651">/</font>
</pre>
<span>5. ArgoCD deploys all 21 applications to their desired state</span><br />
<br />
@@ -889,19 +894,19 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ git checkout -b test-prometheus-upgrade
-$ vim argocd-apps/prometheus.yaml <i><font color="silver"># Bump chart version</font></i>
-$ git commit -am <font color="#808080">"Test Prometheus 56.0.0"</font>
-$ git push origin test-prometheus-upgrade
+<pre><font color="#ff0000">$ git checkout -b test-prometheus-upgrade</font>
+<font color="#ff0000">$ vim argocd-apps/prometheus</font><font color="#F3E651">.</font><font color="#ff0000">yaml </font><i><font color="#ababab"># Bump chart version</font></i>
+<font color="#ff0000">$ git commit -am </font><font color="#bb00ff">"Test Prometheus 56.0.0"</font>
+<font color="#ff0000">$ git push origin test-prometheus-upgrade</font>
-<i><font color="silver"># Temporarily point ArgoCD at the feature branch</font></i>
-$ kubectl patch application prometheus -n cicd \
- --type merge \
- -p <font color="#808080">'{"spec":{"source":{"targetRevision":"test-prometheus-upgrade"}}}'</font>
+<i><font color="#ababab"># Temporarily point ArgoCD at the feature branch</font></i>
+<font color="#ff0000">$ kubectl patch application prometheus -n cicd </font><font color="#F3E651">\</font>
+<font color="#ff0000"> --type merge </font><font color="#F3E651">\</font>
+<font color="#ff0000"> -p </font><font color="#bb00ff">'{"spec":{"source":{"targetRevision":"test-prometheus-upgrade"}}}'</font>
-<i><font color="silver"># Verify changes in ArgoCD Web UI</font></i>
-<i><font color="silver"># If good: merge to master</font></i>
-<i><font color="silver"># If bad: revert the patch</font></i>
+<i><font color="#ababab"># Verify changes in ArgoCD Web UI</font></i>
+<i><font color="#ababab"># If good: merge to master</font></i>
+<i><font color="#ababab"># If bad: revert the patch</font></i>
</pre>
<br />
<h2 style='display: inline' id='challenges-and-solutions'>Challenges and Solutions</h2><br />
@@ -975,14 +980,14 @@ The Helm operation failed with an error: release miniflux failed, and has been u
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>install:
- helm install miniflux ./helm-chart -n services
+<pre><font color="#F3E651">install:</font>
+<font color="#ff0000"> helm install miniflux </font><font color="#F3E651">.</font><font color="#ff0000">/helm-chart -n services</font>
-upgrade:
- helm upgrade miniflux ./helm-chart -n services
+<font color="#F3E651">upgrade:</font>
+<font color="#ff0000"> helm upgrade miniflux </font><font color="#F3E651">.</font><font color="#ff0000">/helm-chart -n services</font>
-uninstall:
- helm uninstall miniflux -n services
+<font color="#F3E651">uninstall:</font>
+<font color="#ff0000"> helm uninstall miniflux -n services</font>
</pre>
<br />
<span>**After (ArgoCD utilities)**:</span><br />
@@ -990,18 +995,18 @@ uninstall:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>status:
- @kubectl get pods -n services -l app=miniflux
- @kubectl get application miniflux -n cicd -o jsonpath=<font color="#808080">'Sync: {.status.sync.status}, Health: {.status.health.status}'</font>
+<pre><font color="#F3E651">status:</font>
+<font color="#ff0000"> @kubectl get pods -n services -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">miniflux</font>
+<font color="#ff0000"> @kubectl get application miniflux -n cicd -o </font><font color="#ff0000">jsonpath</font><font color="#F3E651">=</font><font color="#bb00ff">'Sync: {.status.sync.status}, Health: {.status.health.status}'</font>
-sync:
- @kubectl annotate application miniflux -n cicd argocd.argoproj.io/refresh=normal --overwrite
+<font color="#F3E651">sync:</font>
+<font color="#ff0000"> @kubectl annotate application miniflux -n cicd argocd.argoproj.io/refresh</font><font color="#F3E651">=</font><font color="#ff0000">normal --overwrite</font>
-argocd-status:
- argocd app get miniflux --core
+<font color="#F3E651">argocd-status:</font>
+<font color="#ff0000"> argocd app get miniflux --core</font>
-logs:
- kubectl logs -n services -l app=miniflux --tail=<font color="#000000">100</font> -f
+<font color="#F3E651">logs:</font>
+<font color="#ff0000"> kubectl logs -n services -l </font><font color="#ff0000">app</font><font color="#F3E651">=</font><font color="#ff0000">miniflux --tail</font><font color="#F3E651">=</font><font color="#bb00ff">100</font><font color="#ff0000"> -f</font>
</pre>
<br />
<span>The Justfiles now provide:</span><br />
@@ -1137,13 +1142,13 @@ spec:
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ kubectl apply -f root-app.yaml
-<i><font color="silver"># Root app deploys all 21 applications automatically</font></i>
+<pre><font color="#ff0000">$ kubectl apply -f root-app</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<i><font color="#ababab"># Root app deploys all 21 applications automatically</font></i>
-<i><font color="silver"># Or apply by namespace</font></i>
-$ kubectl apply -f root-monitoring.yaml
-$ kubectl apply -f root-services.yaml
-$ kubectl apply -f root-infra.yaml
+<i><font color="#ababab"># Or apply by namespace</font></i>
+<font color="#ff0000">$ kubectl apply -f root-monitoring</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">$ kubectl apply -f root-services</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
+<font color="#ff0000">$ kubectl apply -f root-infra</font><font color="#F3E651">.</font><font color="#ff0000">yaml</font>
</pre>
<br />
<h3 style='display: inline' id='4-argocd-image-updater'>4. ArgoCD Image Updater</h3><br />
@@ -1217,11 +1222,12 @@ metadata:
<br />
<a class='textlink' href='../'>Back to the main site</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/DRAFT-ipv6test-deployment.html b/gemfeed/DRAFT-ipv6test-deployment.html
index 9bc33ffb..f74e27f7 100644
--- a/gemfeed/DRAFT-ipv6test-deployment.html
+++ b/gemfeed/DRAFT-ipv6test-deployment.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Deploying an IPv6 Test Service on Kubernetes</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-ipv6test-deployment.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-ipv6test-deployment.gmi">Gemini</a>
</p>
@@ -43,15 +48,15 @@ Client → relayd (OpenBSD) → Traefik (k3s) → Apache + CGI (Pod)
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="silver">#!/usr/bin/perl</font></i>
-<b><u><font color="#000000">use</font></u></b> strict;
-<b><u><font color="#000000">use</font></u></b> warnings;
+<pre><i><font color="#ababab">#!/usr/bin/perl</font></i>
+<b><font color="#ffffff">use</font></b><font color="#ff0000"> strict</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">use</font></b><font color="#ff0000"> warnings</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">print</font></u></b> <font color="#808080">"Content-type: text/html\n\n"</font>;
+<b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Content-type: text/html\n\n"</font><font color="#F3E651">;</font>
-<b><u><font color="#000000">my</font></u></b> $is_ipv4 = ($ENV{REMOTE_ADDR} =~ <font color="#808080">/(?:\d+\.){3}\d/</font>);
-<b><u><font color="#000000">print</font></u></b> <font color="#808080">"You are using: "</font> . ($is_ipv4 ? <font color="#808080">"IPv4"</font> : <font color="#808080">"IPv6"</font>) . <font color="#808080">"\n"</font>;
-<b><u><font color="#000000">print</font></u></b> <font color="#808080">"Client address: $ENV{REMOTE_ADDR}\n"</font>;
+<b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$is_ipv4</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$ENV</font><font color="#F3E651">{</font><font color="#ff0000">REMOTE_ADDR</font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#bb00ff">/(?:\d+\.){3}\d/</font><font color="#F3E651">);</font>
+<b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"You are using: "</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$is_ipv4</font><font color="#ff0000"> </font><font color="#F3E651">?</font><font color="#ff0000"> </font><font color="#bb00ff">"IPv4"</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"IPv6"</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">.</font><font color="#ff0000"> </font><font color="#bb00ff">"\n"</font><font color="#F3E651">;</font>
+<b><font color="#ffffff">print</font></b><font color="#ff0000"> </font><font color="#bb00ff">"Client address: $ENV{REMOTE_ADDR}\n"</font><font color="#F3E651">;</font>
</pre>
<br />
<h2 style='display: inline' id='docker-image'>Docker Image</h2><br />
@@ -148,17 +153,17 @@ http protocol "https" {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&lt;% <b><u><font color="#000000">for</font></u></b> <b><u><font color="#000000">my</font></u></b> $host (@$f3s_hosts) {
- <b><u><font color="#000000">my</font></u></b> $is_ipv6_only = $host =~ <font color="#808080">/^ipv6\./</font>;
- <b><u><font color="#000000">my</font></u></b> $is_ipv4_only = $host =~ <font color="#808080">/^ipv4\./</font>;
--%&gt;
-<font color="#808080">&lt;% unless ($is_ipv6_only) { -%&gt;</font>
-<font color="#808080">&lt;%= $host %&gt;</font>. <font color="#000000">300</font> IN A <font color="#808080">&lt;%= $ips-&gt;</font>{current_master}{ipv4} %&gt;
-<font color="#808080">&lt;% } -%&gt;</font>
-<font color="#808080">&lt;% unless ($is_ipv4_only) { -%&gt;</font>
-<font color="#808080">&lt;%= $host %&gt;</font>. <font color="#000000">300</font> IN AAAA <font color="#808080">&lt;%= $ips-&gt;</font>{current_master}{ipv6} %&gt;
-<font color="#808080">&lt;% } -%&gt;</font>
-<font color="#808080">&lt;% } -%&gt;</font>
+<pre><font color="#F3E651">&lt;%</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$host</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@</font><font color="#ff0000">$f3s_hosts</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$is_ipv6_only</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$host</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#bb00ff">/^ipv6\./</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$is_ipv4_only</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#ff0000">$host</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#bb00ff">/^ipv4\./</font><font color="#F3E651">;</font>
+<font color="#F3E651">-%&gt;</font>
+<font color="#bb00ff">&lt;% unless ($is_ipv6_only) { -%&gt;</font>
+<font color="#bb00ff">&lt;%= $host %&gt;</font><font color="#F3E651">.</font><font color="#ff0000"> </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">&lt;%= $ips-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">current_master</font><font color="#F3E651">}{</font><font color="#ff0000">ipv4</font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#F3E651">%&gt;</font>
+<font color="#bb00ff">&lt;% } -%&gt;</font>
+<font color="#bb00ff">&lt;% unless ($is_ipv4_only) { -%&gt;</font>
+<font color="#bb00ff">&lt;%= $host %&gt;</font><font color="#F3E651">.</font><font color="#ff0000"> </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA </font><font color="#bb00ff">&lt;%= $ips-&gt;</font><font color="#F3E651">{</font><font color="#ff0000">current_master</font><font color="#F3E651">}{</font><font color="#ff0000">ipv6</font><font color="#F3E651">}</font><font color="#ff0000"> </font><font color="#F3E651">%&gt;</font>
+<font color="#bb00ff">&lt;% } -%&gt;</font>
+<font color="#bb00ff">&lt;% } -%&gt;</font>
</pre>
<br />
<span>This ensures:</span><br />
@@ -179,22 +184,22 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>&lt;% <b><u><font color="#000000">for</font></u></b> <b><u><font color="#000000">my</font></u></b> $host (@$acme_hosts) {
- <i><font color="silver"># Skip ipv4/ipv6 subdomains - they're included as SANs in parent cert</font></i>
- <b><u><font color="#000000">next</font></u></b> <b><u><font color="#000000">if</font></u></b> $host =~ <font color="#808080">/^(ipv4|ipv6)\./</font>;
--%&gt;
-&lt;% <b><u><font color="#000000">my</font></u></b> @alt_names = (<font color="#808080">"www.$host"</font>);
- <b><u><font color="#000000">for</font></u></b> <b><u><font color="#000000">my</font></u></b> $sub_host (@$acme_hosts) {
- <b><u><font color="#000000">if</font></u></b> ($sub_host =~ <font color="#808080">/^(ipv4|ipv6)\.\Q$host\E$/</font>) {
- <b><u><font color="#000000">push</font></u></b> @alt_names, $sub_host;
- }
- }
--%&gt;
-domain <font color="#808080">&lt;%= $host %&gt;</font> {
- alternative names { <font color="#808080">&lt;%= join(' ', @alt_names) %&gt;</font> }
- ...
-}
-<font color="#808080">&lt;% } -%&gt;</font>
+<pre><font color="#F3E651">&lt;%</font><font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$host</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@</font><font color="#ff0000">$acme_hosts</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><i><font color="#ababab"># Skip ipv4/ipv6 subdomains - they're included as SANs in parent cert</font></i>
+<font color="#ff0000"> </font><b><font color="#ffffff">next</font></b><font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#ff0000">$host</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#bb00ff">/^(ipv4|ipv6)\./</font><font color="#F3E651">;</font>
+<font color="#F3E651">-%&gt;</font>
+<font color="#F3E651">&lt;%</font><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">@alt_names</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">"www.$host"</font><font color="#F3E651">);</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$sub_host</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">@</font><font color="#ff0000">$acme_hosts</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#ff0000">$sub_host</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><font color="#bb00ff">/^(ipv4|ipv6)\.\Q$host\E$/</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">push</font></b><font color="#ff0000"> </font><font color="#ff0000">@alt_names</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">$sub_host</font><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#F3E651">-%&gt;</font>
+<font color="#ff0000">domain </font><font color="#bb00ff">&lt;%= $host %&gt;</font><font color="#ff0000"> </font><font color="#F3E651">{</font>
+<font color="#ff0000"> alternative names </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#bb00ff">&lt;%= join(' ', @alt_names) %&gt;</font><font color="#ff0000"> </font><font color="#F3E651">}</font>
+<font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#F3E651">}</font>
+<font color="#bb00ff">&lt;% } -%&gt;</font>
</pre>
<br />
<span>This generates a single certificate for <span class='inlinecode'>ipv6test.f3s.buetow.org</span> that includes:</span><br />
@@ -211,19 +216,19 @@ domain <font color="#808080">&lt;%= $host %&gt;</font> {
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">our</font></u></b> @f3s_hosts = <b><u><font color="#000000">qw</font></u></b>/
- ...
- ipv6test.f3s.buetow.org
- ipv4.ipv6test.f3s.buetow.org
- ipv6.ipv6test.f3s.buetow.org
-/;
+<pre><b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">@f3s_hosts</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">qw</font></b><font color="#F3E651">/</font>
+<font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#ff0000"> ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000"> ipv4</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000"> ipv6</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#F3E651">/;</font>
-<b><u><font color="#000000">our</font></u></b> @acme_hosts = <b><u><font color="#000000">qw</font></u></b>/
- ...
- ipv6test.f3s.buetow.org
- ipv4.ipv6test.f3s.buetow.org
- ipv6.ipv6test.f3s.buetow.org
-/;
+<b><font color="#ffffff">our</font></b><font color="#ff0000"> </font><font color="#ff0000">@acme_hosts</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">qw</font></b><font color="#F3E651">/</font>
+<font color="#ff0000"> </font><font color="#F3E651">...</font>
+<font color="#ff0000"> ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000"> ipv4</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#ff0000"> ipv6</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font>
+<font color="#F3E651">/;</font>
</pre>
<br />
<span>Running <span class='inlinecode'>rex nsd httpd acme acme_invoke relayd</span> deploys the DNS zone, configures httpd for ACME challenges, obtains the certificates, and reloads relayd.</span><br />
@@ -236,17 +241,17 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ dig ipv4.ipv6test.f3s.buetow.org A +short
-<font color="#000000">46.23</font>.<font color="#000000">94.99</font>
+<pre><font color="#ff0000">$ dig ipv4</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org A </font><font color="#F3E651">+</font><font color="#ff0000">short</font>
+<font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font>
-$ dig ipv4.ipv6test.f3s.buetow.org AAAA +short
-(no output - IPv4 only)
+<font color="#ff0000">$ dig ipv4</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org AAAA </font><font color="#F3E651">+</font><font color="#ff0000">short</font>
+<font color="#F3E651">(</font><font color="#ff0000">no output - IPv4 only</font><font color="#F3E651">)</font>
-$ dig ipv6.ipv6test.f3s.buetow.org AAAA +short
-2a03:<font color="#000000">6000</font>:6f67:<font color="#000000">624</font>::<font color="#000000">99</font>
+<font color="#ff0000">$ dig ipv6</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org AAAA </font><font color="#F3E651">+</font><font color="#ff0000">short</font>
+<font color="#ff0000">2a03</font><font color="#F3E651">:</font><font color="#bb00ff">6000</font><font color="#F3E651">:</font><font color="#ff0000">6f67</font><font color="#F3E651">:</font><font color="#bb00ff">624</font><font color="#F3E651">::</font><font color="#bb00ff">99</font>
-$ dig ipv6.ipv6test.f3s.buetow.org A +short
-(no output - IPv6 only)
+<font color="#ff0000">$ dig ipv6</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org A </font><font color="#F3E651">+</font><font color="#ff0000">short</font>
+<font color="#F3E651">(</font><font color="#ff0000">no output - IPv6 only</font><font color="#F3E651">)</font>
</pre>
<br />
<span>Verify the application shows the correct test type:</span><br />
@@ -255,8 +260,8 @@ $ dig ipv6.ipv6test.f3s.buetow.org A +short
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre>$ curl -s https://ipv<font color="#000000">4</font>.ipv6test.f3s.buetow.org/cgi-bin/index.pl | grep <font color="#808080">"Test Results"</font>
-&lt;h3&gt;IPv4 Only Test Results:&lt;/h<font color="#000000">3</font>&gt;
+<pre><font color="#ff0000">$ curl -s https</font><font color="#F3E651">:</font><font color="#ff0000">//ipv</font><font color="#bb00ff">4</font><font color="#F3E651">.</font><font color="#ff0000">ipv6test</font><font color="#F3E651">.</font><font color="#ff0000">f3s</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org/cgi-bin/index</font><font color="#F3E651">.</font><font color="#ff0000">pl </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">"Test Results"</font>
+<font color="#F3E651">&lt;</font><font color="#ff0000">h3</font><font color="#F3E651">&gt;</font><font color="#ff0000">IPv4 Only Test Results</font><font color="#F3E651">:&lt;</font><font color="#ff0000">/h</font><font color="#bb00ff">3</font><font color="#F3E651">&gt;</font>
</pre>
<br />
<span>The displayed IP should be the real client IP, not an internal cluster address.</span><br />
@@ -273,15 +278,15 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><b><u><font color="#000000">sub</font></u></b> html_escape {
- <b><u><font color="#000000">my</font></u></b> $str = <b><u><font color="#000000">shift</font></u></b>;
- $str =~ <b><u><font color="#000000">s</font></u></b>/&amp;/&amp;amp;/<b><u><font color="#000000">g</font></u></b>;
- $str =~ <b><u><font color="#000000">s</font></u></b>/&lt;/&amp;lt;/<b><u><font color="#000000">g</font></u></b>;
- $str =~ <b><u><font color="#000000">s</font></u></b>/&gt;/&amp;gt;/<b><u><font color="#000000">g</font></u></b>;
- <b><u><font color="#000000">return</font></u></b> $str;
-}
+<pre><b><font color="#ffffff">sub</font></b><font color="#ff0000"> html_escape </font><font color="#F3E651">{</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$str</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">$str</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><b><font color="#ffffff">s</font></b><font color="#ff0000">/&amp;/&amp;amp;/</font><b><font color="#ffffff">g</font></b><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">$str</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><b><font color="#ffffff">s</font></b><font color="#ff0000">/&lt;/&amp;lt;/</font><b><font color="#ffffff">g</font></b><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><font color="#ff0000">$str</font><font color="#ff0000"> </font><font color="#F3E651">=~</font><font color="#ff0000"> </font><b><font color="#ffffff">s</font></b><font color="#ff0000">/&gt;/&amp;gt;/</font><b><font color="#ffffff">g</font></b><font color="#F3E651">;</font>
+<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#ff0000">$str</font><font color="#F3E651">;</font>
+<font color="#F3E651">}</font>
-<b><u><font color="#000000">my</font></u></b> $digremote = html_escape(`dig -<b><u><font color="#000000">x</font></u></b> $ENV{REMOTE_ADDR}`);
+<b><font color="#ffffff">my</font></b><font color="#ff0000"> </font><font color="#ff0000">$digremote</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#7bc710">html_escape</font><font color="#F3E651">(</font><font color="#ff0000">`dig </font><font color="#F3E651">-</font><b><font color="#ffffff">x</font></b><font color="#ff0000"> </font><font color="#ff0000">$ENV</font><font color="#F3E651">{</font><font color="#ff0000">REMOTE_ADDR</font><font color="#F3E651">}</font><font color="#ff0000">`</font><font color="#F3E651">);</font>
</pre>
<br />
<span>You can verify the output passes validation:</span><br />
@@ -312,11 +317,12 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a class='textlink' href='./index.html'>← Back to the index</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>
diff --git a/gemfeed/index.html b/gemfeed/index.html
index 77f396d0..9bdafee9 100644
--- a/gemfeed/index.html
+++ b/gemfeed/index.html
@@ -2,12 +2,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gemfeed of foo.zone</title>
<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
<link rel="stylesheet" href="../style.css" />
<link rel="stylesheet" href="style-override.css" />
</head>
-<body>
+<body class="rfx-boot">
+<div class="rfx-overlay-grid"></div>
+<div class="rfx-overlay-scanlines"></div>
+<div id="rfx-stars"></div>
+<div class="rfx-vignette"></div>
<p class="header">
<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/index.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/index.gmi">Gemini</a>
</p>
@@ -118,11 +123,12 @@
<a class='textlink' href='./2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html'>2008-12-29 - Using my Nokia N95 for fixing my MTA</a><br />
<a class='textlink' href='./2008-06-26-perl-poetry.html'>2008-06-26 - Perl Poetry</a><br />
<p class="footer">
- Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
- served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
- <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
- <br />
- Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
+ Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> |
+ served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> |
+ <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a>
+ <br />
+ Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a>
</p>
+<script type="text/javascript" src="../retrofuturistic.js"></script>
</body>
</html>