diff options
| -rw-r--r-- | about/newsletters.txt | 2 | ||||
| -rw-r--r-- | about/resources.html | 178 | ||||
| -rw-r--r-- | gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html | 3 | ||||
| -rw-r--r-- | gemfeed/2025-01-15-working-with-an-sre-interview.html | 200 | ||||
| -rw-r--r-- | gemfeed/DRAFT-f3s-kubernetes-with-freebsd-bhyve.html | 100 | ||||
| -rw-r--r-- | gemfeed/atom.xml | 568 | ||||
| -rw-r--r-- | gemfeed/index.html | 1 | ||||
| -rw-r--r-- | index.html | 3 | ||||
| -rw-r--r-- | uptime-stats.html | 2 |
9 files changed, 578 insertions, 479 deletions
diff --git a/about/newsletters.txt b/about/newsletters.txt index c0593078..4bf9e1ca 100644 --- a/about/newsletters.txt +++ b/about/newsletters.txt @@ -9,4 +9,4 @@ * VK Newsletter * Monospace Mentor * Changelog News -* The Prgagmatic Engineer +* The Pragmatic Engineer diff --git a/about/resources.html b/about/resources.html index f6aa070e..079ef987 100644 --- a/about/resources.html +++ b/about/resources.html @@ -50,102 +50,102 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte <span>In random order:</span><br /> <br /> <ul> -<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> -<li>Modern Perl; Chromatic ; Onyx Neon Press</li> -<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> -<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> -<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> -<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> -<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> -<li>Developing Games in Java; David Brackeen and others...; New Riders</li> -<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> -<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> -<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> -<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> +<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> <li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> -<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> <li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> -<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> -<li>Leanring eBPF; Liz Rice; O'Reilly</li> -<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> -<li>Effective awk programming; Arnold Robbins; O'Reilly</li> -<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> -<li>Java ist auch eine Insel; Christian Ullenboom; </li> -<li>C++ Programming Language; Bjarne Stroustrup;</li> +<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> +<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> <li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li> -<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> +<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Java ist auch eine Insel; Christian Ullenboom; </li> +<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> <li>The Docker Book; James Turnbull; Kindle</li> -<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> -<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> -<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> -<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> -<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> +<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> +<li>Raku Recipes; J.J. Merelo; Apress</li> +<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> +<li>Funktionale Programmierung; Peter Pepper; Springer</li> <li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li> -<li>DNS and BIND; Cricket Liu; O'Reilly</li> -<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> +<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> +<li>C++ Programming Language; Bjarne Stroustrup;</li> +<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> +<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> +<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> +<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> <li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> -<li>Raku Recipes; J.J. Merelo; Apress</li> +<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> <li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> -<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> -<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> -<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> +<li>Developing Games in Java; David Brackeen and others...; New Riders</li> +<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> +<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> +<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> +<li>Effective awk programming; Arnold Robbins; O'Reilly</li> +<li>DNS and BIND; Cricket Liu; O'Reilly</li> +<li>Leanring eBPF; Liz Rice; O'Reilly</li> +<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> +<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> <li>Raku Fundamentals; Moritz Lenz; Apress</li> -<li>Funktionale Programmierung; Peter Pepper; Springer</li> +<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> +<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> <li>Ultimate Go Notebook; Bill Kennedy</li> <li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> +<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> +<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> +<li>Modern Perl; Chromatic ; Onyx Neon Press</li> +<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> <li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> -<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> +<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> </ul><br /> <h2 style='display: inline' id='technical-references'>Technical references</h2><br /> <br /> <span>I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order:</span><br /> <br /> <ul> +<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> +<li>Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly</li> <li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> +<li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> <li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> <li>Relayd and Httpd Mastery; Michael W Lucas</li> -<li>Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly</li> -<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> <li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> -<li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> </ul><br /> <h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br /> <br /> <span>In random order:</span><br /> <br /> <ul> -<li>Solve for Happy; Mo Gawdat</li> -<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> -<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> -<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> -<li>The Off Switch; Mark Cropley; Virgin Books</li> +<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion </li> <li>Ultralearning; Anna Laurent; Self-published via Amazon</li> -<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> +<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> <li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> -<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> +<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> +<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> +<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> <li>The Power of Now; Eckhard Tolle; Yellow Kite</li> -<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> -<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> -<li>101 Essays that change the way you think; Brianna Wiest; Audible</li> -<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audible</li> +<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> +<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> +<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> <li>Soft Skills; John Sommez; Manning Publications</li> +<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> <li>Eat That Frog; Brian Tracy</li> -<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> -<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> -<li>Ultralearning; Scott Young; Thorsons</li> -<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> -<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li> <li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> +<li>Slow Productivity; Cal Newport; Penguin Random House</li> <li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> -<li>Deep Work; Cal Newport; Piatkus</li> +<li>101 Essays that change the way you think; Brianna Wiest; Audible</li> +<li>Solve for Happy; Mo Gawdat</li> <li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> +<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> +<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> +<li>The Off Switch; Mark Cropley; Virgin Books</li> <li>Atomic Habits; James Clear; Random House Business</li> +<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li> +<li>Deep Work; Cal Newport; Piatkus</li> +<li>Ultralearning; Scott Young; Thorsons</li> +<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> <li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> -<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> -<li>Slow Productivity; Cal Newport; Penguin Random House</li> +<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> +<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audible</li> <li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> -<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> -<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion </li> </ul><br /> <a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br /> <br /> @@ -154,31 +154,31 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte <span>Some of these were in-person with exams; others were online learning lectures only. In random order:</span><br /> <br /> <ul> -<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> -<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> -<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li> -<li>Protocol buffers; O'Reilly Online</li> -<li>MySQL Deep Dive Workshop; 2-day on-site training</li> -<li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> -<li>Apache Tomcat Best Practises; 3-day on-site training</li> -<li>Functional programming lecture; Remote University of Hagen</li> -<li>Scripting Vim; Damian Conway; O'Reilly Online</li> <li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li> -<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online</li> -<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> +<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> <li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> +<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> +<li>Scripting Vim; Damian Conway; O'Reilly Online</li> +<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> <li>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> +<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> +<li>Protocol buffers; O'Reilly Online</li> +<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li> +<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online</li> +<li>Functional programming lecture; Remote University of Hagen</li> <li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li> -<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> +<li>Apache Tomcat Best Practises; 3-day on-site training</li> +<li>MySQL Deep Dive Workshop; 2-day on-site training</li> +<li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> </ul><br /> <h2 style='display: inline' id='technical-guides'>Technical guides</h2><br /> <br /> <span>These are not whole books, but guides (smaller or larger) which I found very useful. in random order:</span><br /> <br /> <ul> +<li>How CPUs work at https://cpu.land</li> <li>Raku Guide at https://raku.guide </li> <li>Advanced Bash-Scripting Guide </li> -<li>How CPUs work at https://cpu.land</li> </ul><br /> <h2 style='display: inline' id='podcasts'>Podcasts</h2><br /> <br /> @@ -187,47 +187,47 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte <span>In random order:</span><br /> <br /> <ul> +<li>The Pragmatic Engineer Podcast</li> +<li>Cup o' Go [Golang]</li> +<li>Backend Banter</li> +<li>Deep Questions with Cal Newport</li> +<li>Dev Interrupted</li> <li>Fallthrough [Golang]</li> <li>The ProdCast (Google SRE Podcast)</li> -<li>Dev Interrupted</li> -<li>Deep Questions with Cal Newport</li> +<li>Fork Around And Find Out</li> +<li>Hidden Brain</li> <li>Maintainable</li> -<li>The Pragmatic Engineer Podcast</li> -<li>Backend Banter</li> <li>The Changelog Podcast(s)</li> -<li>Hidden Brain</li> -<li>Cup o' Go [Golang]</li> -<li>Fork Around And Find Out</li> </ul><br /> <h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br /> <br /> <span>I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests.</span><br /> <br /> <ul> -<li>Modern Mentor</li> -<li>FLOSS weekly</li> -<li>Ship It (predecessor of Fork Around And Find Out)</li> <li>Go Time (predecessor of fallthrough)</li> -<li>Java Pub House</li> <li>CRE: Chaosradio Express [german]</li> +<li>Ship It (predecessor of Fork Around And Find Out)</li> +<li>Modern Mentor</li> +<li>Java Pub House</li> +<li>FLOSS weekly</li> </ul><br /> <h2 style='display: inline' id='newsletters-i-like'>Newsletters I like</h2><br /> <br /> <span>This is a mix of tech and non-tech newsletters I am subscribed to. In random order:</span><br /> <br /> <ul> +<li>Golang Weekly</li> <li>Applied Go Weekly Newsletter</li> -<li>Register Spill</li> -<li>Monospace Mentor</li> +<li>Ruby Weekly</li> +<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> <li>Changelog News</li> -<li>Golang Weekly</li> -<li>The Prgagmatic Engineer</li> +<li>The Pragmatic Engineer</li> +<li>VK Newsletter</li> <li>The Imperfectionist</li> -<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> +<li>Register Spill</li> <li>byteSizeGo</li> -<li>VK Newsletter</li> -<li>Ruby Weekly</li> <li>The Valuable Dev</li> +<li>Monospace Mentor</li> </ul><br /> <h1 style='display: inline' id='formal-education'>Formal education</h1><br /> <br /> 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 6ea80fc3..cfa8ac68 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 @@ -154,6 +154,7 @@ root@f0:~ <i><font color="silver"># 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 /> +<br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it @@ -165,6 +166,8 @@ http://www.gnu.org/software/src-highlite --> END </pre> <br /> +<span>You might wonder why bother using the hosts file? Why not use DNS properly? The reason is simplicity. I don'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'll do that later. For now, keep it simple and straightforward.</span><br /> +<br /> <h2 style='display: inline' id='after-install'>After install</h2><br /> <br /> <span>After that, I installed the following additional packages:</span><br /> diff --git a/gemfeed/2025-01-15-working-with-an-sre-interview.html b/gemfeed/2025-01-15-working-with-an-sre-interview.html new file mode 100644 index 00000000..f4e85097 --- /dev/null +++ b/gemfeed/2025-01-15-working-with-an-sre-interview.html @@ -0,0 +1,200 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<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" /> +<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> +<p class="header"> +View this page as <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">Gemtext</a> +</p> +<h1 style='display: inline' id='working-with-an-sre-interview'>Working with an SRE Interview</h1><br /> +<br /> +<span class='quote'>Published at 2025-01-15T00:16:04+02:00</span><br /> +<br /> +<span>I have been interviewed by Florian Buetow about what it's like working with a Site Reliability Engineer from the point of view of a Software Engineer, Data Scientist, and AI Engineer. </span><br /> +<br /> +<a class='textlink' href='https://www.cracking-ai-engineering.com/writing/2025/01/12/working-with-an-sre-interview/'>See original interview here</a><br /> +<br /> +<span>Below, I am posting the interview here on my blog as well.</span><br /> +<br /> +<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> +<br /> +<ul> +<li><a href='#working-with-an-sre-interview'>Working with an SRE Interview</a></li> +<li>⇢ <a href='#preamble-'>Preamble </a></li> +<li>⇢ <a href='#introducing-paul'>Introducing Paul</a></li> +<li>⇢ <a href='#how-did-you-get-started'>How did you get started?</a></li> +<li>⇢ <a href='#roles-and-career-progression'>Roles and Career Progression</a></li> +<li>⇢ <a href='#anecdotes-and-best-practices'>Anecdotes and Best Practices</a></li> +<li>⇢ <a href='#working-with-different-teams'>Working with Different Teams</a></li> +<li>⇢ <a href='#using-ai-tools'>Using AI Tools</a></li> +<li>⇢ <a href='#sre-learning-resources'>SRE Learning Resources</a></li> +<li>⇢ <a href='#blogging'>Blogging</a></li> +<li>⇢ <a href='#wrap-up'>Wrap-up</a></li> +<li>⇢ <a href='#closing-comments'>Closing comments</a></li> +</ul><br /> +<h2 style='display: inline' id='preamble-'>Preamble </h2><br /> +<br /> +<span>In this insightful interview, Paul Bütow, a Principal Site Reliability Engineer at Mimecast, shares over a decade of experience in the field. Paul highlights the role of an Embedded SRE, emphasizing the importance of automation, observability, and effective incident management. We also focused on the key question of how you can work effectively with an SRE weather you are an individual contributor or a manager, a software engineer or data scientist. And how you can learn more about site reliability engineering.</span><br /> +<br /> +<h2 style='display: inline' id='introducing-paul'>Introducing Paul</h2><br /> +<br /> +<span>Hi Paul, please introduce yourself briefly to the audience. Who are you, what do you do for a living, and where do you work?</span><br /> +<br /> +<span class='quote'>My name is Paul Bütow, I work at Mimecast, and I’m a Principal Site Reliability Engineer there. I’ve been with Mimecast for almost ten years now. The company specializes in email security, including things like archiving, phishing detection, malware protection, and spam filtering.</span><br /> +<br /> +<span>You mentioned that you’re an ‘Embedded SRE.’ What does that mean exactly?</span><br /> +<br /> +<span class='quote'>It means that I’m directly part of the software engineering team, not in a separate Ops department. I ensure that nothing is deployed manually, and everything runs through automation. I also set up monitoring and observability. These are two distinct aspects: monitoring alerts us when something breaks, while observability helps us identify trends. I also create runbooks so we know what to do when specific incidents occur frequently.</span><br /> +<br /> +<span class='quote'>Infrastructure SREs on the other hand handle the foundational setup, like providing the Kubernetes cluster itself or ensuring the operating systems are installed. They don't work on the application directly but ensure the base infrastructure is there for others to use. This works well when a company has multiple teams that need shared infrastructure.</span><br /> +<br /> +<h2 style='display: inline' id='how-did-you-get-started'>How did you get started?</h2><br /> +<br /> +<span>How did your interest in Linux or FreeBSD start?</span><br /> +<br /> +<span class='quote'>It began during my school days. We had a PC with DOS at home, and I eventually bought Suse Linux 5.3. Shortly after, I discovered FreeBSD because I liked its handbook so much. I wanted to understand exactly how everything worked, so I also tried Linux from Scratch. That involves installing every package manually to gain a better understanding of operating systems.</span><br /> +<br /> +<a class='textlink' href='https://www.FreeBSD.org'>https://www.FreeBSD.org</a><br /> +<a class='textlink' href='https://linuxfromscratch.org/'>https://linuxfromscratch.org/</a><br /> +<br /> +<span>And after school, you pursued computer science, correct?</span><br /> +<br /> +<span class='quote'>Exactly. I wasn’t sure at first whether I wanted to be a software developer or a system administrator. I applied for both and eventually accepted an offer as a Linux system administrator. This was before 'SRE' became a buzzword, but much of what I did back then-automation, infrastructure as code, monitoring-is now considered part of the typical SRE role.</span><br /> +<br /> +<h2 style='display: inline' id='roles-and-career-progression'>Roles and Career Progression</h2><br /> +<br /> +<span>Tell us about how you joined Mimecast. When did you fully embrace the SRE role?</span><br /> +<br /> +<span class='quote'>I started as a Linux sysadmin at 1&1. I managed an ad server farm with hundreds of systems and later handled load balancers. Together with an architect, we managed F5 load balancers distributing around 2,000 services, including for portals like web.de and GMX. I also led the operations team technically for a while before moving to London to join Mimecast.</span><br /> +<br /> +<span class='quote'>At Mimecast, the job title was explicitly 'Site Reliability Engineer.' The biggest difference was that I was no longer in a separate Ops department but embedded directly within the storage and search backend team. I loved that because we could plan features together-from automation to measurability and observability. Mimecast also operates thousands of physical servers for email archiving, which was fascinating since I already had experience with large distributed systems at 1&1. It was the right step for me because it allowed me to work close to the code while remaining hands-on with infrastructure.</span><br /> +<br /> +<span>What are the differences between SRE, DevOps, SysAdmin, and Architects?</span><br /> +<br /> +<span class='quote'>SREs are like the next step after SysAdmins. A SysAdmin might manually install servers, replace disks, or use simple scripts for automation, while SREs use infrastructure as code and focus on reliability through SLIs, SLOs, and automation. DevOps isn’t really a job-it’s more of a way of working, where developers are involved in operations tasks like setting up CI/CD pipelines or on-call shifts. Architects focus on designing systems and infrastructures, such as load balancers or distributed systems, working alongside SREs to ensure the systems meet the reliability and scalability requirements. The specific responsibilities of each role depend on the company, and there is often overlap. </span><br /> +<br /> +<span>What are the most important reliability lessons you’ve learned so far?</span><br /> +<br /> +<ul> +<li>Don’t leave SRE aspects as an afterthought. It’s much better to discuss automation, monitoring, SLIs, and SLOs early on. Traditional sysadmins often installed systems manually, but today, we do everything via infrastructure as code-using tools like Terraform or Puppet.</li> +<li>I also distinguish between monitoring and observability. Monitoring tells us, 'The server is down, alarm!' Observability dives deeper, showing trends like increasing latency so we can act proactively.</li> +<li>SLI, SLO, and SLA are core elements. We focus on what users actually experience-for example, how quickly an email is sent-and set our goals accordingly.</li> +<li>Runbooks are also crucial. When something goes wrong at night, you don’t want to start from scratch. A runbook outlines how to debug and resolve specific problems, saving time and reducing downtime.</li> +</ul><br /> +<h2 style='display: inline' id='anecdotes-and-best-practices'>Anecdotes and Best Practices</h2><br /> +<br /> +<span>Runbooks sound very practical. Can you explain how they’re used day-to-day?</span><br /> +<br /> +<span class='quote'>Runbooks are essentially guides for handling specific incidents. For instance, if a service won’t start, the runbook will specify where the logs are and which commands to use. Observability takes it a step further, helping us spot changes early-like rising error rates or latency-so we can address issues before they escalate.</span><br /> +<br /> +<span>When should you decide to put something into a runbook, and when is it unnecessary?</span><br /> +<br /> +<span class='quote'>If an issue happens frequently, it should be documented in a runbook so that anyone, even someone new, can follow the steps to fix it. The idea is that 90% of the common incidents should be covered. For example, if a service is down, the runbook would specify where to find logs, which commands to check, and what actions to take. On the other hand, rare or complex issues, where the resolution depends heavily on context or varies each time, don’t make sense to include in detail. For those, it’s better to focus on general troubleshooting steps. </span><br /> +<br /> +<span>How do you search for and find the correct runbooks?</span><br /> +<br /> +<span class='quote'>Runbooks should be linked directly in the alert you receive. For example, if you get an alert about a service not running, the alert will have a link to the runbook that tells you what to check, like logs or commands to run. Runbooks are best stored in an internal wiki, so if you don’t find the link in the alert, you know where to search. The important thing is that runbooks are easy to find and up to date because that’s what makes them useful during incidents. </span><br /> +<br /> +<span>Do you have an interesting war story you can share with us?</span><br /> +<br /> +<span class='quote'>Sure. At 1&1, we had a proprietary ad server software that ran a SQL query during startup. The query got slower over time, eventually timing out and preventing the server from starting. Since we couldn’t access the source code, we searched the binary for the SQL and patched it. By pinpointing the issue, a developer was able to adjust the SQL. This collaboration between sysadmin and developer perspectives highlights the value of SRE work.</span><br /> +<br /> +<h2 style='display: inline' id='working-with-different-teams'>Working with Different Teams</h2><br /> +<br /> +<span>You’re embedded in a team-how does collaboration with developers work practically?</span><br /> +<br /> +<span class='quote'>We plan everything together from the start. If there’s a new feature, we discuss infrastructure, automated deployments, and monitoring right away. Developers are experts in the code, and I bring the infrastructure expertise. This avoids unpleasant surprises before going live.</span><br /> +<br /> +<span>How about working with data scientists or ML engineers? Are there differences?</span><br /> +<br /> +<span class='quote'>The principles are the same. ML models also need to be deployed and monitored. You deal with monitoring, resource allocation, and identifying performance drops. Whether it’s a microservice or an ML job, at the end of the day, it’s all running on servers or clusters that must remain stable.</span><br /> +<br /> +<span>What about working with managers or the FinOps team?</span><br /> +<br /> +<span class='quote'>We often discuss costs, especially in the cloud, where scaling up resources is easy. It’s crucial to know our metrics: do we have enough capacity? Do we need all instances? Or is the CPU only at 5% utilization? This data helps managers decide whether the budget is sufficient or if optimizations are needed.</span><br /> +<br /> +<span>Do you have practical tips for working with SREs?</span><br /> +<br /> +<span class='quote'>Yes, I have a few:</span><br /> +<br /> +<ul> +<li>Early involvement: Include SREs from the beginning in your project.</li> +<li>Runbooks & documentation: Document recurring errors.</li> +<li>Try first: Try to understand the issue yourself before immediately asking the SRE.</li> +<li>Basic infra knowledge: Kubernetes and Terraform aren’t magic. Some basic understanding helps every developer.</li> +</ul><br /> +<h2 style='display: inline' id='using-ai-tools'>Using AI Tools</h2><br /> +<br /> +<span>Let’s talk about AI. How do you use it in your daily work?</span><br /> +<br /> +<span class='quote'>For boilerplate code, like Terraform snippets, I often use ChatGPT. It saves time, although I always review and adjust the output. Log analysis is another exciting application. Instead of manually going through millions of lines, AI can summarize key outliers or errors.</span><br /> +<br /> +<span>Do you think AI could largely replace SREs or significantly change the role?</span><br /> +<br /> +<span class='quote'>I see AI as an additional tool. SRE requires a deep understanding of how distributed systems work internally. While AI can assist with routine tasks or quickly detect anomalies, human expertise is indispensable for complex issues.</span><br /> +<br /> +<h2 style='display: inline' id='sre-learning-resources'>SRE Learning Resources</h2><br /> +<br /> +<span>What resources would you recommend for learning about SRE?</span><br /> +<br /> +<span class='quote'>The Google SRE book is a classic, though a bit dry. I really like 'Seeking SRE,' as it offers various perspectives on SRE, with many practical stories from different companies.</span><br /> +<br /> +<a class='textlink' href='https://sre.google/books/'>https://sre.google/books/</a><br /> +<a class='textlink' href='https://www.oreilly.com/library/view/seeking-sre/9781491978856'>Seeking SRE</a><br /> +<br /> +<span>Do you have a podcast recommendation?</span><br /> +<br /> +<span class='quote'>The Google SRE prodcast is quite interesting. It offers insights into how Google approaches SRE, along with perspectives from external guests.</span><br /> +<br /> +<a class='textlink' href='https://sre.google/prodcast/'>https://sre.google/prodcast/</a><br /> +<br /> +<h2 style='display: inline' id='blogging'>Blogging</h2><br /> +<br /> +<span>You also have a blog. What motivates you to write regularly?</span><br /> +<br /> +<span class='quote'>Writing helps me learn the most. It also serves as a personal reference. Sometimes I look up how I solved a problem a year ago. And of course, others tackling similar projects might find inspiration in my posts.</span><br /> +<br /> +<span>What do you blog about?</span><br /> +<br /> +<span class='quote'>Mostly technical topics I find exciting, like homelab projects, Kubernetes, or book summaries on IT and productivity. It’s a personal blog, so I write about what I enjoy.</span><br /> +<br /> +<h2 style='display: inline' id='wrap-up'>Wrap-up</h2><br /> +<br /> +<span>To wrap up, what are three things every team should keep in mind for stability?</span><br /> +<br /> +<span class='quote'>First, maintain runbooks and documentation to avoid chaos at night. Second, automate everything-manual installs in production are risky. Third, define SLIs, SLOs, and SLAs early so everyone knows what we’re monitoring and guaranteeing.</span><br /> +<br /> +<span>Is there a motto or mindset that particularly inspires you as an SRE?</span><br /> +<br /> +<span class='quote'>"Keep it simple and stupid"-KISS. Not everything has to be overly complex. And always stay curious. I’m still fascinated by how systems work under the hood.</span><br /> +<br /> +<span>Where can people find you online?</span><br /> +<br /> +<span class='quote'>You can find links to my socials on my website paul.buetow.org</span><br /> +<span class='quote'>I regularly post articles and link to everything else I’m working on outside of work.</span><br /> +<br /> +<a class='textlink' href='https://paul.buetow.org'>https://paul.buetow.org</a><br /> +<br /> +<span>Thank you very much for your time and this insightful interview into the world of site reliability engineering</span><br /> +<br /> +<span class='quote'>My pleasure, this was fun.</span><br /> +<br /> +<h2 style='display: inline' id='closing-comments'>Closing comments</h2><br /> +<br /> +<span>Dear reader, I hope this conversation with Paul Bütow provided an exciting peak into the world of Site Reliability Engineering. Whether you’re a software developer, data scientist, ML engineer, or manager, reliable systems are always a team effort. Hopefully, you’ve taken some insights or tips from Paul’s experiences for your own team or next project. Thanks for joining us, and best of luck refining your own SRE practices!</span><br /> +<br /> +<span>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> +</p> +</body> +</html> diff --git a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-bhyve.html b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-bhyve.html index 2db3175d..39d9cf28 100644 --- a/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-bhyve.html +++ b/gemfeed/DRAFT-f3s-kubernetes-with-freebsd-bhyve.html @@ -30,12 +30,15 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte <li>⇢ ⇢ <a href='#iso-download'>ISO download</a></li> <li>⇢ ⇢ <a href='#vm-configuration'>VM configuration</a></li> <li>⇢ ⇢ <a href='#vm-installation'>VM installation</a></li> +<li>⇢ ⇢ <a href='#increase-of-the-disk-image'>Increase of the disk image</a></li> +<li>⇢ ⇢ <a href='#connect-to-vpn'>Connect to VPN</a></li> +<li>⇢ <a href='#after-install'>After install</a></li> </ul><br /> <h2 style='display: inline' id='introduction'>Introduction</h2><br /> <br /> <span>In this blog post, we are going to install the Bhyve hypervisor.</span><br /> <br /> -<span>The FreeBSD Bhyve hypervisor is a lightweight, modern hypervisor that enables virtualization on FreeBSD systems. Bhyve's strengths include its minimal overhead, which allows it to achieve near-native performance for virtual machines. It is designed to be efficient and lightweight, leveraging the capabilities of the FreeBSD operating system for performance and network management. </span><br /> +<span>The FreeBSD Bhyve hypervisor is a lightweight, modern hypervisor that enables virtualization on FreeBSD systems. Bhyve's strengths include its minimal overhead, which allows it to achieve near-native performance for virtual machines. It is designed to be efficient and lightweight, leveraging the capabilities of the FreeBSD operating system for performance and network management.</span><br /> <br /> <span>Bhyve supports running a variety of guest operating systems, including FreeBSD, Linux, and Windows, on hardware platforms that support hardware virtualization extensions (such as Intel VT-x or AMD-V). In our case, we are going to virtualize Rocky Linux, which later on in this series will be used to run k3s.</span><br /> <br /> @@ -51,15 +54,15 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>paul@f2:~ % doas pkg install vm-bhyve bhyve-firmware -paul@f2:~ % doas sysrc vm_enable=YES +<pre>paul@f0:~ % doas pkg install vm-bhyve bhyve-firmware +paul@f0:~ % doas sysrc vm_enable=YES vm_enable: -> YES -paul@f2:~ % doas sysrc vm_dir=zfs:zroot/bhyve +paul@f0:~ % doas sysrc vm_dir=zfs:zroot/bhyve vm_dir: -> zfs:zroot/bhyve -paul@f2:~ % doas zfs create zroot/bhyve -paul@f2:~ % doas vm init -paul@f2:~ % doas vm create public -paul@f2:~ % doas vm switch add public re0 +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> <br /> <span>Bhyve stores all it's data in the <span class='inlinecode'>/bhyve</span> of the <span class='inlinecode'>zroot</span> ZFS pool:</span><br /> @@ -68,7 +71,7 @@ paul@f2:~ % doas vm switch add public re0 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>paul@f2:~ % zfs list | grep bhyve +<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> <br /> @@ -78,7 +81,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@f2:~ % doas ln -s /zroot/bhyve/ /bhyve +<pre>paul@f0:~ % doas ln -s /zroot/bhyve/ /bhyve </pre> <br /> @@ -88,7 +91,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>paul@f2:~ % doas vm list +<pre>paul@f0:~ % doas vm list NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE </pre> <br /> @@ -102,10 +105,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@f2:~ % doas vm iso \ +<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@f2:/bhyve % doas vm create rocky +paul@f0:/bhyve % doas vm create rocky </pre> <h3 style='display: inline' id='vm-configuration'>VM configuration</h3><br /> <br /> @@ -115,7 +118,7 @@ paul@f2:/bhyve % doas vm create rocky by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>paul@f2:/bhyve/rocky % cat rocky.conf +<pre>paul@f0:/bhyve/rocky % cat rocky.conf loader=<font color="#808080">"bhyveload"</font> cpu=<font color="#000000">1</font> memory=256M @@ -127,7 +130,28 @@ uuid=<font color="#808080">"1c4655ac-c828-11ef-a920-e8ff1ed71ca0"</font> network0_mac=<font color="#808080">"58:9c:fc:0d:13:3f"</font> </pre> <br /> -<span>but in order to make Rocky Linux boot, it...</span><br /> +<span>Whereas the <span class='inlinecode'>uuid</span> and the <span class='inlinecode'>network0_mac</span> differ on each of the 3 hosts.</span><br /> +<br /> +<span>but in order to make Rocky Linux boot it (plus some other adjustments, e.g. as I am intending to run the majority of the workload in the k3s cluster running on those linux VMs, I give them beefy specs like 4 CPU cores and 14GB RAM), I modified it to:</span><br /> +<br /> +<!-- Generator: GNU source-highlight 3.1.9 +by Lorenzo Bettini +http://www.lorenzobettini.it +http://www.gnu.org/software/src-highlite --> +<pre>guest=<font color="#808080">"linux"</font> +loader=<font color="#808080">"uefi"</font> +uefi_vars=<font color="#808080">"yes"</font> +cpu=<font color="#000000">4</font> +memory=14G +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> +graphics=<font color="#808080">"yes"</font> +graphics_vga=io +uuid=<font color="#808080">"1c45400b-c828-11ef-8871-e8ff1ed71cac"</font> +network0_mac=<font color="#808080">"58:9c:fc:0d:13:3f"</font> +</pre> <br /> <h3 style='display: inline' id='vm-installation'>VM installation</h3><br /> <br /> @@ -135,7 +159,7 @@ network0_mac=<font color="#808080">"58:9c:fc:0d:13:3f"</font> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>paul@f2:~ % doas vm install rocky Rocky-<font color="#000000">9.5</font>-x86_64-minimal.iso +<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... @@ -150,6 +174,50 @@ root bhyve <font color="#000000">6079</font> <font color="#000000">8</ <br /> <span>Port 5900 is now also open for VNC connections, so we connect to it with a VNC client and run through the installation dialogs. I'm sure this could be done unattended or more automated, but we have only 3 VMs to install, and the automation doesn't seem worth it as we are doing it only once.</span><br /> <br /> +<h3 style='display: inline' id='increase-of-the-disk-image'>Increase of the disk image</h3><br /> +<br /> +<span>By default the VMs disk image is only 20G, which is a bit small for my purposes, so I stopped the VMs again and run <span class='inlinecode'>truncate</span> on the image file to enlarge them to 100G, and re-started the installation:</span><br /> +<br /> +<!-- Generator: GNU source-highlight 3.1.9 +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> +<br /> +<h3 style='display: inline' id='connect-to-vpn'>Connect to VPN</h3><br /> +<br /> +<span>For the installation, I opened the VPN client on my Fedora laptop (GNOME comes with a simple VPN client) and ran through the base installation for each of the VMs manually. I am sure this could have been automated a bit more, but there were just 3 VMs, and it wasn't worth the effort. The three VNC addresses of the VMs were: <span class='inlinecode'>vnc://f0:5900</span>, <span class='inlinecode'>vnc://f1:5900</span>, and <span class='inlinecode'>vnc://f0:5900</span>.</span><br /> +<br /> +<span>I mostly selected the default settings (auto partitioning on the 100GB drive and a root user password). After the installation, the VMs were rebooted.</span><br /> +<br /> +<h2 style='display: inline' id='after-install'>After install</h2><br /> +<br /> +<span>After that, I changed the network configuration to be static here as well.</span><br /> +<br /> +<span>As per previous post of this series, the 3 FreeBSD hosts were already in my <span class='inlinecode'>/etc/hosts</span> file:</span><br /> +<br /> +<pre> +192.168.1.130 f0 f0.lan f0.lan.buetow.org +192.168.1.131 f1 f1.lan f1.lan.buetow.org +192.168.1.132 f2 f2.lan f2.lan.buetow.org +</pre> +<br /> +<span>For the Rocky VMs I added those:</span><br /> +<br /> +<!-- Generator: GNU source-highlight 3.1.9 +by Lorenzo Bettini +http://www.lorenzobettini.it +http://www.gnu.org/software/src-highlite --> +<pre>cat <<END >>/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> +<span>and configured the IPs accordingly on the VMs themselves.</span><br /> <br /> <br /> <span>Other *BSD-related posts:</span><br /> diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index 2bded8e7..792c34c9 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,12 +1,205 @@ <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - <updated>2024-12-31T19:00:17+02:00</updated> + <updated>2025-01-15T00:16:04+02:00</updated> <title>foo.zone feed</title> <subtitle>To be in the .zone!</subtitle> <link href="https://foo.zone/gemfeed/atom.xml" rel="self" /> <link href="https://foo.zone/" /> <id>https://foo.zone/</id> <entry> + <title>Working with an SRE Interview</title> + <link href="https://foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview.html" /> + <id>https://foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview.html</id> + <updated>2025-01-15T00:16:04+02:00</updated> + <author> + <name>Paul Buetow aka snonux</name> + <email>paul@dev.buetow.org</email> + </author> + <summary>I have been interviewed by Florian Buetow about what it's like working with a Site Reliability Engineer from the point of view of a Software Engineer, Data Scientist, and AI Engineer. </summary> + <content type="xhtml"> + <div xmlns="http://www.w3.org/1999/xhtml"> + <h1 style='display: inline' id='working-with-an-sre-interview'>Working with an SRE Interview</h1><br /> +<br /> +<span>I have been interviewed by Florian Buetow about what it's like working with a Site Reliability Engineer from the point of view of a Software Engineer, Data Scientist, and AI Engineer. </span><br /> +<br /> +<a class='textlink' href='https://www.cracking-ai-engineering.com/writing/2025/01/12/working-with-an-sre-interview/'>See original interview here</a><br /> +<br /> +<span>Below, I am posting the interview here on my blog as well.</span><br /> +<br /> +<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> +<br /> +<ul> +<li><a href='#working-with-an-sre-interview'>Working with an SRE Interview</a></li> +<li>⇢ <a href='#preamble-'>Preamble </a></li> +<li>⇢ <a href='#introducing-paul'>Introducing Paul</a></li> +<li>⇢ <a href='#how-did-you-get-started'>How did you get started?</a></li> +<li>⇢ <a href='#roles-and-career-progression'>Roles and Career Progression</a></li> +<li>⇢ <a href='#anecdotes-and-best-practices'>Anecdotes and Best Practices</a></li> +<li>⇢ <a href='#working-with-different-teams'>Working with Different Teams</a></li> +<li>⇢ <a href='#using-ai-tools'>Using AI Tools</a></li> +<li>⇢ <a href='#sre-learning-resources'>SRE Learning Resources</a></li> +<li>⇢ <a href='#blogging'>Blogging</a></li> +<li>⇢ <a href='#wrap-up'>Wrap-up</a></li> +<li>⇢ <a href='#closing-comments'>Closing comments</a></li> +</ul><br /> +<h2 style='display: inline' id='preamble-'>Preamble </h2><br /> +<br /> +<span>In this insightful interview, Paul Bütow, a Principal Site Reliability Engineer at Mimecast, shares over a decade of experience in the field. Paul highlights the role of an Embedded SRE, emphasizing the importance of automation, observability, and effective incident management. We also focused on the key question of how you can work effectively with an SRE weather you are an individual contributor or a manager, a software engineer or data scientist. And how you can learn more about site reliability engineering.</span><br /> +<br /> +<h2 style='display: inline' id='introducing-paul'>Introducing Paul</h2><br /> +<br /> +<span>Hi Paul, please introduce yourself briefly to the audience. Who are you, what do you do for a living, and where do you work?</span><br /> +<br /> +<span class='quote'>My name is Paul Bütow, I work at Mimecast, and I’m a Principal Site Reliability Engineer there. I’ve been with Mimecast for almost ten years now. The company specializes in email security, including things like archiving, phishing detection, malware protection, and spam filtering.</span><br /> +<br /> +<span>You mentioned that you’re an ‘Embedded SRE.’ What does that mean exactly?</span><br /> +<br /> +<span class='quote'>It means that I’m directly part of the software engineering team, not in a separate Ops department. I ensure that nothing is deployed manually, and everything runs through automation. I also set up monitoring and observability. These are two distinct aspects: monitoring alerts us when something breaks, while observability helps us identify trends. I also create runbooks so we know what to do when specific incidents occur frequently.</span><br /> +<br /> +<span class='quote'>Infrastructure SREs on the other hand handle the foundational setup, like providing the Kubernetes cluster itself or ensuring the operating systems are installed. They don't work on the application directly but ensure the base infrastructure is there for others to use. This works well when a company has multiple teams that need shared infrastructure.</span><br /> +<br /> +<h2 style='display: inline' id='how-did-you-get-started'>How did you get started?</h2><br /> +<br /> +<span>How did your interest in Linux or FreeBSD start?</span><br /> +<br /> +<span class='quote'>It began during my school days. We had a PC with DOS at home, and I eventually bought Suse Linux 5.3. Shortly after, I discovered FreeBSD because I liked its handbook so much. I wanted to understand exactly how everything worked, so I also tried Linux from Scratch. That involves installing every package manually to gain a better understanding of operating systems.</span><br /> +<br /> +<a class='textlink' href='https://www.FreeBSD.org'>https://www.FreeBSD.org</a><br /> +<a class='textlink' href='https://linuxfromscratch.org/'>https://linuxfromscratch.org/</a><br /> +<br /> +<span>And after school, you pursued computer science, correct?</span><br /> +<br /> +<span class='quote'>Exactly. I wasn’t sure at first whether I wanted to be a software developer or a system administrator. I applied for both and eventually accepted an offer as a Linux system administrator. This was before 'SRE' became a buzzword, but much of what I did back then-automation, infrastructure as code, monitoring-is now considered part of the typical SRE role.</span><br /> +<br /> +<h2 style='display: inline' id='roles-and-career-progression'>Roles and Career Progression</h2><br /> +<br /> +<span>Tell us about how you joined Mimecast. When did you fully embrace the SRE role?</span><br /> +<br /> +<span class='quote'>I started as a Linux sysadmin at 1&1. I managed an ad server farm with hundreds of systems and later handled load balancers. Together with an architect, we managed F5 load balancers distributing around 2,000 services, including for portals like web.de and GMX. I also led the operations team technically for a while before moving to London to join Mimecast.</span><br /> +<br /> +<span class='quote'>At Mimecast, the job title was explicitly 'Site Reliability Engineer.' The biggest difference was that I was no longer in a separate Ops department but embedded directly within the storage and search backend team. I loved that because we could plan features together-from automation to measurability and observability. Mimecast also operates thousands of physical servers for email archiving, which was fascinating since I already had experience with large distributed systems at 1&1. It was the right step for me because it allowed me to work close to the code while remaining hands-on with infrastructure.</span><br /> +<br /> +<span>What are the differences between SRE, DevOps, SysAdmin, and Architects?</span><br /> +<br /> +<span class='quote'>SREs are like the next step after SysAdmins. A SysAdmin might manually install servers, replace disks, or use simple scripts for automation, while SREs use infrastructure as code and focus on reliability through SLIs, SLOs, and automation. DevOps isn’t really a job-it’s more of a way of working, where developers are involved in operations tasks like setting up CI/CD pipelines or on-call shifts. Architects focus on designing systems and infrastructures, such as load balancers or distributed systems, working alongside SREs to ensure the systems meet the reliability and scalability requirements. The specific responsibilities of each role depend on the company, and there is often overlap. </span><br /> +<br /> +<span>What are the most important reliability lessons you’ve learned so far?</span><br /> +<br /> +<ul> +<li>Don’t leave SRE aspects as an afterthought. It’s much better to discuss automation, monitoring, SLIs, and SLOs early on. Traditional sysadmins often installed systems manually, but today, we do everything via infrastructure as code-using tools like Terraform or Puppet.</li> +<li>I also distinguish between monitoring and observability. Monitoring tells us, 'The server is down, alarm!' Observability dives deeper, showing trends like increasing latency so we can act proactively.</li> +<li>SLI, SLO, and SLA are core elements. We focus on what users actually experience-for example, how quickly an email is sent-and set our goals accordingly.</li> +<li>Runbooks are also crucial. When something goes wrong at night, you don’t want to start from scratch. A runbook outlines how to debug and resolve specific problems, saving time and reducing downtime.</li> +</ul><br /> +<h2 style='display: inline' id='anecdotes-and-best-practices'>Anecdotes and Best Practices</h2><br /> +<br /> +<span>Runbooks sound very practical. Can you explain how they’re used day-to-day?</span><br /> +<br /> +<span class='quote'>Runbooks are essentially guides for handling specific incidents. For instance, if a service won’t start, the runbook will specify where the logs are and which commands to use. Observability takes it a step further, helping us spot changes early-like rising error rates or latency-so we can address issues before they escalate.</span><br /> +<br /> +<span>When should you decide to put something into a runbook, and when is it unnecessary?</span><br /> +<br /> +<span class='quote'>If an issue happens frequently, it should be documented in a runbook so that anyone, even someone new, can follow the steps to fix it. The idea is that 90% of the common incidents should be covered. For example, if a service is down, the runbook would specify where to find logs, which commands to check, and what actions to take. On the other hand, rare or complex issues, where the resolution depends heavily on context or varies each time, don’t make sense to include in detail. For those, it’s better to focus on general troubleshooting steps. </span><br /> +<br /> +<span>How do you search for and find the correct runbooks?</span><br /> +<br /> +<span class='quote'>Runbooks should be linked directly in the alert you receive. For example, if you get an alert about a service not running, the alert will have a link to the runbook that tells you what to check, like logs or commands to run. Runbooks are best stored in an internal wiki, so if you don’t find the link in the alert, you know where to search. The important thing is that runbooks are easy to find and up to date because that’s what makes them useful during incidents. </span><br /> +<br /> +<span>Do you have an interesting war story you can share with us?</span><br /> +<br /> +<span class='quote'>Sure. At 1&1, we had a proprietary ad server software that ran a SQL query during startup. The query got slower over time, eventually timing out and preventing the server from starting. Since we couldn’t access the source code, we searched the binary for the SQL and patched it. By pinpointing the issue, a developer was able to adjust the SQL. This collaboration between sysadmin and developer perspectives highlights the value of SRE work.</span><br /> +<br /> +<h2 style='display: inline' id='working-with-different-teams'>Working with Different Teams</h2><br /> +<br /> +<span>You’re embedded in a team-how does collaboration with developers work practically?</span><br /> +<br /> +<span class='quote'>We plan everything together from the start. If there’s a new feature, we discuss infrastructure, automated deployments, and monitoring right away. Developers are experts in the code, and I bring the infrastructure expertise. This avoids unpleasant surprises before going live.</span><br /> +<br /> +<span>How about working with data scientists or ML engineers? Are there differences?</span><br /> +<br /> +<span class='quote'>The principles are the same. ML models also need to be deployed and monitored. You deal with monitoring, resource allocation, and identifying performance drops. Whether it’s a microservice or an ML job, at the end of the day, it’s all running on servers or clusters that must remain stable.</span><br /> +<br /> +<span>What about working with managers or the FinOps team?</span><br /> +<br /> +<span class='quote'>We often discuss costs, especially in the cloud, where scaling up resources is easy. It’s crucial to know our metrics: do we have enough capacity? Do we need all instances? Or is the CPU only at 5% utilization? This data helps managers decide whether the budget is sufficient or if optimizations are needed.</span><br /> +<br /> +<span>Do you have practical tips for working with SREs?</span><br /> +<br /> +<span class='quote'>Yes, I have a few:</span><br /> +<br /> +<ul> +<li>Early involvement: Include SREs from the beginning in your project.</li> +<li>Runbooks & documentation: Document recurring errors.</li> +<li>Try first: Try to understand the issue yourself before immediately asking the SRE.</li> +<li>Basic infra knowledge: Kubernetes and Terraform aren’t magic. Some basic understanding helps every developer.</li> +</ul><br /> +<h2 style='display: inline' id='using-ai-tools'>Using AI Tools</h2><br /> +<br /> +<span>Let’s talk about AI. How do you use it in your daily work?</span><br /> +<br /> +<span class='quote'>For boilerplate code, like Terraform snippets, I often use ChatGPT. It saves time, although I always review and adjust the output. Log analysis is another exciting application. Instead of manually going through millions of lines, AI can summarize key outliers or errors.</span><br /> +<br /> +<span>Do you think AI could largely replace SREs or significantly change the role?</span><br /> +<br /> +<span class='quote'>I see AI as an additional tool. SRE requires a deep understanding of how distributed systems work internally. While AI can assist with routine tasks or quickly detect anomalies, human expertise is indispensable for complex issues.</span><br /> +<br /> +<h2 style='display: inline' id='sre-learning-resources'>SRE Learning Resources</h2><br /> +<br /> +<span>What resources would you recommend for learning about SRE?</span><br /> +<br /> +<span class='quote'>The Google SRE book is a classic, though a bit dry. I really like 'Seeking SRE,' as it offers various perspectives on SRE, with many practical stories from different companies.</span><br /> +<br /> +<a class='textlink' href='https://sre.google/books/'>https://sre.google/books/</a><br /> +<a class='textlink' href='https://www.oreilly.com/library/view/seeking-sre/9781491978856'>Seeking SRE</a><br /> +<br /> +<span>Do you have a podcast recommendation?</span><br /> +<br /> +<span class='quote'>The Google SRE prodcast is quite interesting. It offers insights into how Google approaches SRE, along with perspectives from external guests.</span><br /> +<br /> +<a class='textlink' href='https://sre.google/prodcast/'>https://sre.google/prodcast/</a><br /> +<br /> +<h2 style='display: inline' id='blogging'>Blogging</h2><br /> +<br /> +<span>You also have a blog. What motivates you to write regularly?</span><br /> +<br /> +<span class='quote'>Writing helps me learn the most. It also serves as a personal reference. Sometimes I look up how I solved a problem a year ago. And of course, others tackling similar projects might find inspiration in my posts.</span><br /> +<br /> +<span>What do you blog about?</span><br /> +<br /> +<span class='quote'>Mostly technical topics I find exciting, like homelab projects, Kubernetes, or book summaries on IT and productivity. It’s a personal blog, so I write about what I enjoy.</span><br /> +<br /> +<h2 style='display: inline' id='wrap-up'>Wrap-up</h2><br /> +<br /> +<span>To wrap up, what are three things every team should keep in mind for stability?</span><br /> +<br /> +<span class='quote'>First, maintain runbooks and documentation to avoid chaos at night. Second, automate everything-manual installs in production are risky. Third, define SLIs, SLOs, and SLAs early so everyone knows what we’re monitoring and guaranteeing.</span><br /> +<br /> +<span>Is there a motto or mindset that particularly inspires you as an SRE?</span><br /> +<br /> +<span class='quote'>"Keep it simple and stupid"-KISS. Not everything has to be overly complex. And always stay curious. I’m still fascinated by how systems work under the hood.</span><br /> +<br /> +<span>Where can people find you online?</span><br /> +<br /> +<span class='quote'>You can find links to my socials on my website paul.buetow.org</span><br /> +<span class='quote'>I regularly post articles and link to everything else I’m working on outside of work.</span><br /> +<br /> +<a class='textlink' href='https://paul.buetow.org'>https://paul.buetow.org</a><br /> +<br /> +<span>Thank you very much for your time and this insightful interview into the world of site reliability engineering</span><br /> +<br /> +<span class='quote'>My pleasure, this was fun.</span><br /> +<br /> +<h2 style='display: inline' id='closing-comments'>Closing comments</h2><br /> +<br /> +<span>Dear reader, I hope this conversation with Paul Bütow provided an exciting peak into the world of Site Reliability Engineering. Whether you’re a software developer, data scientist, ML engineer, or manager, reliable systems are always a team effort. Hopefully, you’ve taken some insights or tips from Paul’s experiences for your own team or next project. Thanks for joining us, and best of luck refining your own SRE practices!</span><br /> +<br /> +<span>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 /> + </div> + </content> + </entry> + <entry> <title>Posts from October to December 2024</title> <link href="https://foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024.html" /> <id>https://foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024.html</id> @@ -621,6 +814,7 @@ root@f0:~ <i><font color="silver"># 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 /> +<br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it @@ -632,6 +826,8 @@ http://www.gnu.org/software/src-highlite --> END </pre> <br /> +<span>You might wonder why bother using the hosts file? Why not use DNS properly? The reason is simplicity. I don'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'll do that later. For now, keep it simple and straightforward.</span><br /> +<br /> <h2 style='display: inline' id='after-install'>After install</h2><br /> <br /> <span>After that, I installed the following additional packages:</span><br /> @@ -8795,374 +8991,4 @@ rex commons </div> </content> </entry> - <entry> - <title>Sweating the small stuff - Tiny projects of mine</title> - <link href="https://foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff.html" /> - <id>https://foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff.html</id> - <updated>2022-06-15T08:47:44+01:00</updated> - <author> - <name>Paul Buetow aka snonux</name> - <email>paul@dev.buetow.org</email> - </author> - <summary>This blog post is a bit different from the others. It consists of multiple but smaller projects worth mentioning. I got inspired by Julia Evan's 'Tiny programs' blog post and the side projects of The Sephist, so I thought I would also write a blog posts listing a couple of small projects of mine:</summary> - <content type="xhtml"> - <div xmlns="http://www.w3.org/1999/xhtml"> - <h1 style='display: inline' id='sweating-the-small-stuff---tiny-projects-of-mine'>Sweating the small stuff - Tiny projects of mine</h1><br /> -<br /> -<span class='quote'>Published at 2022-06-15T08:47:44+01:00; Updated at 2022-06-18</span><br /> -<br /> -<span>This blog post is a bit different from the others. It consists of multiple but smaller projects worth mentioning. I got inspired by Julia Evan's "Tiny programs" blog post and the side projects of The Sephist, so I thought I would also write a blog posts listing a couple of small projects of mine:</span><br /> -<br /> -<a class='textlink' href='https://jvns.ca/blog/2022/03/08/tiny-programs/'>Tiny programs</a><br /> -<a class='textlink' href='https://thesephist.com/projects/'>The Sephist's project list</a><br /> -<br /> -<span>Working on tiny projects is a lot of fun as you don't need to worry about any standards or code reviews and you decide how and when you work on it. There aren't restrictions regarding technologies used. You are likely the only person working on these tiny projects and that means that there is no conflict with any other developers. This is complete freedom :-).</span><br /> -<br /> -<span>But before going through the tiny projects let's take a paragraph for the <span class='inlinecode'>1y</span> anniversary retrospective.</span><br /> -<br /> -<pre> - _ - /_/_ .'''. - =O(_)))) ...' `. - jgs \_\ `. .''' - `..' -</pre> -<br /> -<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> -<br /> -<ul> -<li><a href='#sweating-the-small-stuff---tiny-projects-of-mine'>Sweating the small stuff - Tiny projects of mine</a></li> -<li>⇢ <a href='#1y-anniversary'><span class='inlinecode'>1y</span> anniversary</a></li> -<li>⇢ <a href='#static-photo-album-generator'>Static photo album generator</a></li> -<li>⇢ ⇢ <a href='#the-irregular-ninja'>The Irregular Ninja</a></li> -<li>⇢ <a href='#random-journal-page-extractor'>Random journal page extractor</a></li> -<li>⇢ <a href='#global-uptime-records-statistic-generator'>Global uptime records statistic generator</a></li> -<li>⇢ <a href='#server-configuration-management'>Server configuration management</a></li> -<li>⇢ <a href='#fancy-ssh-execution-loop'>Fancy SSH execution loop</a></li> -<li>⇢ <a href='#a-kiss-dynamic-dns-solution'>A KISS dynamic DNS solution</a></li> -<li>⇢ <a href='#cpu-information-gatherer-for-linux'>CPU information gatherer for Linux</a></li> -<li>⇢ <a href='#show-differences-of-two-files-over-the-network'>Show differences of two files over the network</a></li> -<li>⇢ <a href='#delay-sending-out-e-mails-with-mutt'>Delay sending out E-Mails with Mutt</a></li> -<li>⇢ <a href='#graphical-ui-for-sending-text-messages'>Graphical UI for sending text messages</a></li> -<li>⇢ <a href='#ipv6-and-ipv4-connectivity-testing-site'>IPv6 and IPv4 connectivity testing site</a></li> -<li>⇢ <a href='#list-open-jira-tickets-in-the-terminal'>List open Jira tickets in the terminal</a></li> -<li>⇢ <a href='#debian-running-on-your-android-phone'>Debian running on "your" Android phone</a></li> -<li>⇢ <a href='#perl-service-framework'>Perl service framework</a></li> -<li>⇢ <a href='#more'>More</a></li> -<li>⇢ ⇢ <a href='#work-time-tracker'>Work time tracker</a></li> -<li>⇢ ⇢ <a href='#password-and-document-store'>Password and document store</a></li> -<li>⇢ ⇢ <a href='#backup-procedure'>Backup procedure</a></li> -<li>⇢ <a href='#konpeitomedia'>konpeito.media</a></li> -</ul><br /> -<h2 style='display: inline' id='1y-anniversary'><span class='inlinecode'>1y</span> anniversary</h2><br /> -<br /> -<span>It has been one year since I started posting regularly (at least once monthly) on this blog again. It has been a lot of fun (and work) doing so for various reasons:</span><br /> -<br /> -<ul> -<li>I practice English writing (I am not a native speaker). I am far from being a novelist, but this blog helps improves my writing skills. I also tried out tools like Grammarly.com and Languagetool.org and also worked with <span class='inlinecode'>:spell</span> in Vim or the LibreOffice checker. This post was checked with the <span class='inlinecode'>write-better</span> Node application. </li> -<li>I force myself to "finish" some kind of project worth writing about every month. If its not a project, then its still a topic which requires research and deep thinking. Producing 2k words of text can actually be challenging.</li> -<li>It's fun to rely on KISS (keep it simple & stupid) tools. E.g. use of Gemtexter and not WordPress, use of Vim instead of an office suite or a rich web editor.</li> -</ul><br /> -<span>Retrospectively, these have been the most popular blog posts of mine over the last year:</span><br /> -<br /> -<a class='textlink' href='./2021-09-12-keep-it-simple-and-stupid.html'>Keep it simple and stupid</a><br /> -<a class='textlink' href='./2022-04-10-creative-universe.html'>Creative universe</a><br /> -<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>Bash Golf series</a><br /> -<a class='textlink' href='./2021-12-26-how-to-stay-sane-as-a-devops-person.html'>How to stay sane as a DevOps person</a><br /> -<a class='textlink' href='./2022-05-27-perl-is-still-a-great-choice.html'>Perl is still a great choice</a><br /> -<br /> -<span>But now, let's continue with the small projects worth mentioning :-)</span><br /> -<br /> -<h2 style='display: inline' id='static-photo-album-generator'>Static photo album generator</h2><br /> -<br /> -<span><span class='inlinecode'>photoalbum.sh</span> is a minimal static HTML photo album generator. I use it to drive "The Irregular Ninja" site and for some ad-hoc (personal) albums to share photos with the family and friends.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/photoalbum'>https://codeberg.org/snonux/photoalbum</a><br /> -<br /> -<h3 style='display: inline' id='the-irregular-ninja'>The Irregular Ninja</h3><br /> -<br /> -<span>Photography is one of my casual hobbies. I love to capture interesting perspectives and motifs. I love to walk new streets and neighbourhoods I never walked before so I can capture those unexpected motifs, colours and moments. Unfortunately, because of time constraints (and sometime weather constraints), I do that on a pretty infrequent basis.</span><br /> -<br /> -<a href='./sweating-the-small-stuff/ninja.jpg'><img src='./sweating-the-small-stuff/ninja.jpg' /></a><br /> -<br /> -<span>More than 10 years ago I wrote the bespoke small static photo album generator in Bash <span class='inlinecode'>photoalbum.sh</span> which I recently refactored to a modern Bash coding style and also freshened up the Cascading Style Sheets. Last but not least, the new domain name <span class='inlinecode'>irregular.ninja</span> has been registered.</span><br /> -<br /> -<span>The thumbnails are presented in a random order and there are also random CSS effects for each preview. There's also a simple background blur for each page generated. And that's all in less than 300 lines of Bash code! The script requires ImageMagick (available for all common Linux and *BSD distributions) to be installed.</span><br /> -<br /> -<span>As you can see, there is a lot of randomization and irregularity going on. Thus, the name "Irregular Ninja" was born.</span><br /> -<br /> -<a class='textlink' href='https://irregular.ninja'>https://irregular.ninja</a><br /> -<br /> -<span>I only use a digital compact camera or a smartphone to take the photos. I don't like the idea of carrying around a big camera with me "just in case" so I keep it small and simple. The best camera is the camera you have with you. :-)</span><br /> -<br /> -<span>I hope you like this photo site. It's worth checking it out again around once every other month!</span><br /> -<br /> -<h2 style='display: inline' id='random-journal-page-extractor'>Random journal page extractor</h2><br /> -<br /> -<span>I bullet journal. I write my notes into a Leuchtturm paper notebook. Once full, I am scanning it to a PDF file and archive it. As of writing this, I am at journal #7 (each from 123 up to 251 pages in A5). It means that there is a lot of material already.</span><br /> -<br /> -<span>Once in a while I want to revisit older notes and ideas. For that I have written a simple Bash script <span class='inlinecode'>randomjournalpage.sh</span> which randomly picks a PDF file from a folder and extracts 42 pages from it at a random page offset and opens them in a PDF viewer (Evince in this case, as I am a GNOME user). </span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/randomjournalpage'>https://codeberg.org/snonux/randomjournalpage</a><br /> -<br /> -<span>There's also a weekly <span class='inlinecode'>CRON</span> job on my servers to send me a reminder that I might want to read in my old journals again. My laptop also runs this script each time it boots and saves the output to a NextCloud folder. From there, it's synchronized to the NextCloud server so I can pick it up from there with my smartphone later when I am "on the road".</span><br /> -<br /> -<h2 style='display: inline' id='global-uptime-records-statistic-generator'>Global uptime records statistic generator</h2><br /> -<br /> -<span><span class='inlinecode'>guprecords</span> is a Perl script which reads multiple <span class='inlinecode'>uprecord</span> files (produced by <span class='inlinecode'>uptimed</span> - a widely available daemon for recording server uptimes) and generates uptime statistics of multiple hosts combined. I keep all the record files of all my personal computers in a Git repository (I even keep the records of the boxes I don't own or use anymore) and there's already quite a collection of it. It looks like this:</span><br /> -<br /> -<pre> -❯ perl ~/git/guprecords/src/guprecords --indir=./stats/ --count=20 --all -Pos | System | Kernel | Uptime | Boot time - 1 | sun | FreeBSD 10.1-RELEA.. | 502d 03:29:19 | Sun Aug 16 15:56:40 2015 - 2 | vulcan | Linux 3.10.0-1160... | 313d 13:19:39 | Sun Jul 25 18:32:25 2021 - 3 | uugrn | FreeBSD 10.2-RELEASE | 303d 15:19:35 | Tue Dec 22 21:33:07 2015 - 4 | uugrn | FreeBSD 11.0-RELEA.. | 281d 14:38:04 | Fri Oct 21 15:22:02 2016 - 5 | deltavega | Linux 3.10.0-957.2.. | 279d 11:15:00 | Sun Jun 30 11:42:38 2019 - 6 | vulcan | Linux 3.10.0-957.2.. | 279d 11:12:14 | Sun Jun 30 11:43:41 2019 - 7 | deltavega | Linux 3.10.0-1160... | 253d 04:42:22 | Sat Apr 24 13:34:34 2021 - 8 | host0 | FreeBSD 6.2-RELEAS.. | 240d 02:23:23 | Wed Jan 31 20:34:46 2007 - 9 | uugrn | FreeBSD 11.1-RELEA.. | 202d 21:12:41 | Sun May 6 18:06:17 2018 - 10 | tauceti | Linux 3.2.0-4-amd64 | 197d 18:45:40 | Mon Dec 16 19:47:54 2013 - 11 | pluto | Linux 2.6.32-5-amd64 | 185d 11:53:04 | Wed Aug 1 07:34:10 2012 - 12 | sun | FreeBSD 10.3-RELEA.. | 164d 22:31:55 | Sat Jul 22 18:47:21 2017 - 13 | vulcan | Linux 3.10.0-1160... | 161d 07:08:43 | Sun Feb 14 10:05:38 2021 - 14 | sun | FreeBSD 10.3-RELEA.. | 158d 21:18:36 | Sat Jan 27 10:18:57 2018 - 15 | uugrn | FreeBSD 11.1-RELEA.. | 157d 20:57:24 | Fri Nov 3 05:02:54 2017 - 16 | tauceti-f | Linux 3.2.0-3-amd64 | 150d 04:12:38 | Mon Sep 16 09:02:58 2013 - 17 | tauceti | Linux 3.2.0-4-amd64 | 149d 09:21:43 | Mon Aug 11 09:47:50 2014 - 18 | pluto | Linux 3.2.0-4-amd64 | 142d 02:57:31 | Mon Sep 8 01:59:02 2014 - 19 | tauceti-f | Linux 3.2.0-3-amd64 | 132d 22:46:26 | Mon May 6 11:11:35 2013 - 20 | keppler-16b | Darwin 13.4.0 | 131d 08:17:12 | Thu Jun 11 10:44:25 2015 -</pre> -<br /> -<span>It can also sum up all uptimes for each host to generate a total per host uptime top list:</span><br /> -<br /> -<pre> -❯ perl ~/git/guprecords/src/guprecords --indir=./stats/ --count=20 --total -Pos | System | Kernel | Uptime | - 1 | uranus | Linux 5.4.17-200.f.. | 1419d 19:05:39 | - 2 | sun | FreeBSD 10.1-RELEA.. | 1363d 11:41:14 | - 3 | vulcan | Linux 3.10.0-1160... | 1262d 20:27:48 | - 4 | uugrn | FreeBSD 10.2-RELEASE | 1219d 15:10:16 | - 5 | deltavega | Linux 3.10.0-957.2.. | 1115d 06:33:55 | - 6 | pluto | Linux 2.6.32-5-amd64 | 1086d 10:44:05 | - 7 | tauceti | Linux 3.2.0-4-amd64 | 846d 12:58:21 | - 8 | tauceti-f | Linux 3.2.0-3-amd64 | 625d 07:16:39 | - 9 | host0 | FreeBSD 6.2-RELEAS.. | 534d 19:50:13 | - 10 | keppler-16b | Darwin 13.4.0 | 448d 06:15:00 | - 11 | tauceti-e | Linux 3.2.0-4-amd64 | 415d 18:14:13 | - 12 | moon | Darwin 18.7.0 | 326d 11:21:42 | - 13 | callisto | Linux 4.0.4-303.fc.. | 303d 12:18:24 | - 14 | alphacentauri | FreeBSD 10.1-RELEA.. | 300d 20:15:00 | - 15 | earth | Linux 5.13.14-200... | 289d 08:05:05 | - 16 | makemake | Linux 5.11.9-200.f.. | 286d 21:53:03 | - 17 | london | Linux 3.2.0-4-amd64 | 258d 15:10:38 | - 18 | fishbone | OpenBSD 4.1 .. | 223d 05:55:26 | - 19 | sagittarius | Darwin 15.6.0 | 198d 23:53:59 | - 20 | mars | Linux 3.2.0-4-amd64 | 190d 05:44:21 | -</pre> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/guprecords'>https://codeberg.org/snonux/guprecords</a><br /> -<br /> -<span>This all is of no real practical use but fun!</span><br /> -<br /> -<h2 style='display: inline' id='server-configuration-management'>Server configuration management</h2><br /> -<br /> -<span>The <span class='inlinecode'>rexfiles</span> project contains all Rex files for my (personal) server setup automation. A <span class='inlinecode'>Rexfile</span> is written in a Perl DSL run by the Rex configuration management system. It's pretty much KISS and that's why I love it. It suits my personal needs perfectly. </span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/rexfiles'>https://codeberg.org/snonux/rexfiles</a><br /> -<a class='textlink' href='https://www.rexify.org'>https://www.rexify.org</a><br /> -<br /> -<span>This is an E-Mail I posted to the Rex mailing list:</span><br /> -<br /> -<span class='quote'>Hi there! I was searching for a simple way to automate my personal OpenBSD setup. I found that configuration management systems like Puppet, Salt, Chef, etc.. were too bloated for my personal needs. So for a while I was configuring everything by hand. At one point I got fed up and started writing Shell scripts. But that was not the holy grail so that I looked at Ansible. I found that Ansible had some dependencies on Python on the target machine when you want to use all the features. Furthermore, I am not really familiar with Python. But then I remembered that there was also Rex. It's written in my beloved Perl. Also, OpenBSD comes with Perl in the base system out of the box which makes it integrate better than all my scripts (automation and also scripts deployed via the automation to the system) are all in the same language. Rex may not have all the features like other configuration management systems, but its easy to work-around or extend when you know Perl. Thanks!</span><br /> -<br /> -<h2 style='display: inline' id='fancy-ssh-execution-loop'>Fancy SSH execution loop</h2><br /> -<br /> -<span><span class='inlinecode'>rubyfy</span> is a fancy SSH loop wrapper written in Ruby for running shell commands on multiple remote servers at once. I also forked this project for work (under a different name) where I added even more features such as automatic server discovery. It's used by many colleagues on a frequent basis. Here are some examples:</span><br /> -<br /> -<pre> -# Run command 'hostname' on server foo.example.com -./rubyfy.rb -c 'hostname' <<< foo.example.com - -# Run command 'id' as root (via sudo) on all servers listed in the list file -# Do it on 10 servers in parallel -./rubyfy.rb --parallel 10 --root --command 'id' < serverlist.txt - -# Run a fancy script in background on 50 servers in parallel -./rubyfy.rb -p 50 -r -b -c '/usr/local/scripts/fancy.zsh' < serverlist.txt - -# Grep for specific process on both servers and write output to ./out/grep.txt -echo {foo,bar}.example.com | ./rubyfy.rb -p 10 -c 'pgrep -lf httpd' -n grep.txt - -# Reboot server only if file /var/run/maintenance.lock does NOT exist! -echo foo.example.com | -./rubyfy.rb --root --command reboot --precondition /var/run/maintenance.lock -</pre> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/rubyfy'>https://codeberg.org/snonux/rubyfy</a><br /> -<br /> -<h2 style='display: inline' id='a-kiss-dynamic-dns-solution'>A KISS dynamic DNS solution</h2><br /> -<br /> -<span><span class='inlinecode'>dyndns</span> is a tiny shell script which implements "your" own DynDNS service. It relies on SSH access to the authoritative DNS server and the <span class='inlinecode'>nsupdate</span> command. There is really no need to use any of the "other" free DynDNS services out there.</span><br /> -<br /> -<span>Syntax (this must run from the client connecting to the DNS server through SSH): </span><br /> -<br /> -<pre> -ssh dyndns@dyndnsserver /path/to/dyndns-update \ - your.host.name. TYPE new-entry TIMEOUT -</pre> -<br /> -<span>This is a real world example: </span><br /> -<br /> -<pre> -ssh dyndns@dyndnsserver /path/to/dyndns-update \ - local.buetow.org. A 137.226.50.91 30 -</pre> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/dyndns'>https://codeberg.org/snonux/dyndns</a><br /> -<br /> -<h2 style='display: inline' id='cpu-information-gatherer-for-linux'>CPU information gatherer for Linux</h2><br /> -<br /> -<span>This is a tiny GNU Awk script for Linux which displays information about the CPU. All what it does is presenting <span class='inlinecode'>/proc/cpuinfo</span> in an easier to read way. The output is somewhat more compact than the standard <span class='inlinecode'>lscpu</span> command you find commonly on Linux distributions.</span><br /> -<br /> -<pre> -❯ ./cpuinfo -cpuinfo (c) 1.0.2 Paul Buetow - - 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz GenuineIntel 12288 KB cache - -p = 001 Physical processors -c = 004 Cores -s = 008 Siblings (Hyper-Threading enabled if s != c) -v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs - Hyper-Threading is enabled - -0003000 MHz each core -0012000 MHz total -0005990 Bogomips each processor (including virtual) -0023961 Bogomips total -</pre> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/cpuinfo'>https://codeberg.org/snonux/cpuinfo</a><br /> -<br /> -<h2 style='display: inline' id='show-differences-of-two-files-over-the-network'>Show differences of two files over the network</h2><br /> -<br /> -<span>This is a shell wrapper to use the standard diff tool over the network to compare a file between two computers. It uses NetCat for the network part and also encrypts all traffic using OpenSSL. This is how its used:</span><br /> -<br /> -<span>1. Open two terminal windows and login to two different hosts (you could use ClusterSSH or <span class='inlinecode'>tmux</span> here). 2. Run on the first host <span class='inlinecode'>netdiff otherhost.example.org /file/to/diff.txt</span> and run on the second host <span class='inlinecode'>netdiff firsthost.example.org /file/to/diff.txt</span>. 3. You then will see the file differences.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/netdiff'>https://codeberg.org/snonux/netdiff</a><br /> -<br /> -<h2 style='display: inline' id='delay-sending-out-e-mails-with-mutt'>Delay sending out E-Mails with Mutt</h2><br /> -<br /> -<span>This is a shell script for the Mutt email client for delaying sending out E-Mails. For example, you want to write an email on Saturday but don't want to bother the recipient earlier than Monday. It relies on CRON.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/muttdelay'>https://codeberg.org/snonux/muttdelay</a><br /> -<br /> -<h2 style='display: inline' id='graphical-ui-for-sending-text-messages'>Graphical UI for sending text messages</h2><br /> -<br /> -<span><span class='inlinecode'>jsmstrade</span> is a minimalistic graphical Java swing client for sending SMS messages over the SMStrade service.</span><br /> -<br /> -<a href='./sweating-the-small-stuff/jsmstrade.png'><img src='./sweating-the-small-stuff/jsmstrade.png' /></a><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/jsmstrade'>https://codeberg.org/snonux/jsmstrade</a><br /> -<a class='textlink' href='https://smstrade.de'>https://smstrade.de</a><br /> -<br /> -<h2 style='display: inline' id='ipv6-and-ipv4-connectivity-testing-site'>IPv6 and IPv4 connectivity testing site</h2><br /> -<br /> -<span><span class='inlinecode'>ipv6test</span> is a quick and dirty Perl CGI script for testing whether your browser connects via IPv4 or IPv6. It requires you to setup three sub-domains: One reachable only via IPv4 (e.g. <span class='inlinecode'>test4.ipv6.buetow.org</span>), another reachable only via IPv6 (e.g. <span class='inlinecode'>test6.ipv6.buetow.org</span>) and the main one reachable through both protocols (e.g. <span class='inlinecode'>ipv6.buetow.org</span>).</span><br /> -<br /> -<span>I don't have it running on any of my servers at the moment. This means that there is no demo to show now. Sorry!</span><br /> -<br /> -<h2 style='display: inline' id='list-open-jira-tickets-in-the-terminal'>List open Jira tickets in the terminal</h2><br /> -<br /> -<span><span class='inlinecode'>japi</span> s a small Perl script for listing open Jira issues. It might be broken by now as the Jira APIs may have changed. Sorry! But feel free to fork and modernize it. :-)</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/jsmstrade'>https://codeberg.org/snonux/jsmstrade</a><br /> -<span> </span><br /> -<h2 style='display: inline' id='debian-running-on-your-android-phone'>Debian running on "your" Android phone</h2><br /> -<br /> -<span>Debroid is a tutorial and a set of scripts to install and to run a Debian <span class='inlinecode'>chroot</span> on an Android phone.</span><br /> -<br /> -<a class='textlink' href='./2015-12-05-run-debian-on-your-phone-with-debroid.html'>Check out my previous post about it</a><br /> -<br /> -<span>I am not using Debroid anymore as I have switched to Termux now.</span><br /> -<br /> -<a class='textlink' href='https://termux.com'>https://termux.com</a><br /> -<br /> -<h2 style='display: inline' id='perl-service-framework'>Perl service framework</h2><br /> -<br /> -<span>PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided.</span><br /> -<br /> -<a class='textlink' href='./2011-05-07-perl-daemon-service-framework.html'>Checkout my previous post about it</a><br /> -<br /> -<h2 style='display: inline' id='more'>More</h2><br /> -<br /> -<span>There are more projects on my Codeberg page but they aren't as tiny as the ones mentioned in this post or aren't finished yet so I won't bother listing them here. However, there also a few more scripts used frequently by me (not publicly accessible (yet?)) which I would like to mention here:</span><br /> -<br /> -<h3 style='display: inline' id='work-time-tracker'>Work time tracker</h3><br /> -<br /> -<span><span class='inlinecode'>worktime.rb</span>, for example, is a command line Ruby script I use to track my time spent working. This is to make sure that I don't overwork (in particular useful when working from home). It also generates some daily and weekly stats and carries over work time (surpluses or minuses) to the next work day, week or even year.</span><br /> -<br /> -<span>It has some special features such as tracking time for self-improvement/development, days off and time spent at the lunch break and time spent on Pet Projects.</span><br /> -<br /> -<span>An example weekly report looks like this (I often don't track my lunch time but what I do instead I stop the work timer when I go out for lunch and start the work timer once back at the desk):</span><br /> -<br /> -<pre> - Mon 20211213 50: work:5.92h - Tue 20211214 50: work:7.47h lunch:0.50h pet:0.42h - Wed 20211215 50: work:8.86h pet:0.50h - Thu 20211216 50: work:8.02h pet:0.50h - Fri 20211217 50: work:9.81h - * Sat 20211218 50: work:0.00h selfdevelopment:1.00h - * Sun 20211219 50: work:2.08h pet:1.00h selfdevelopment:-2.08h -================================================ - balance:0.06h work:42.15h lunch:0.50h pet:2.42h selfdevelopment:-1.08h buffer:8.38h -</pre> -<br /> -<span>All I do when I start work is to run the <span class='inlinecode'>wtlogin</span> command and after finishing work to run the <span class='inlinecode'>wtlogout</span> command. My shell will remind me when I work without having logged in. It uses a simple JSON database which is editable with <span class='inlinecode'>wtedit</span> (this opens the JSON in Vim). The report shown above can be generated with <span class='inlinecode'>wtreport</span>. Any out-of-bounds reporting can be added with the <span class='inlinecode'>wtadd</span> command.</span><br /> -<br /> -<h3 style='display: inline' id='password-and-document-store'>Password and document store</h3><br /> -<br /> -<span><span class='inlinecode'>geheim.rb</span> is my personal password and document store ("geheim" is the German word for secret). It's written in Ruby and heavily relies on Git, FZF (for search), Vim and standard encryption algorithms. Other than the standard <span class='inlinecode'>pass</span> Unix password manager, <span class='inlinecode'>geheim</span> also encrypts the file names and password titles.</span><br /> -<br /> -<span>The tool is command line driven but also provides an interactive shell when invoked with <span class='inlinecode'>geheim shell</span>. It also works on my Android phone via Termux so I have all my documents and passwords always with me. </span><br /> -<br /> -<h3 style='display: inline' id='backup-procedure'>Backup procedure</h3><br /> -<br /> -<span><span class='inlinecode'>backup</span> is a Bash script which does run once daily (or every time on boot) on my home FreeBSD NAS server and performs backup related tasks such as creating a local backup of my remote NextCloud instance, creating encrypted (incremental) ZFS snapshots of everything what's stored on the NAS and synchronizes (via <span class='inlinecode'>rsync</span>) backups to a remote cloud storage. It also can synchronize backups to a local external USB drive.</span><br /> -<br /> -<a class='textlink' href='./2016-04-03-offsite-backup-with-zfs.html'>Check out my offsite backup series</a><br /> -<br /> -<h2 style='display: inline' id='konpeitomedia'>konpeito.media</h2><br /> -<br /> -<span>Here's a bonus...</span><br /> -<br /> -<pre> - ▄ █ ▄ ▄ █ ▄ ▄ █ ▄ - ▄▀█▀▄ ▄▀█▀▄ ▄▀█▀▄ - ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀ ▀ ▀ - █ ▄▄ ▄▄ █ - █ █ █▀▀▀█ █ █ █ ▄▀ ▄▀▀▀▀▄ █▄ █ █▀▀▀▀▀▄ ▄▀▀▀▀▄ █ ▀▀▀█▀▀▀ ▄▀▀▀▀▄ - █ ▀▀▀▀▀▀▀▀▀ █ █ ▄█ █ █ █ ▀▄ █ █▄▄▄▄▄▀ █▄▄▄▄▄▄█ █ █ █ █ - █ ▄▀▀▀▀▀▀▀▀▀▀▀▄ █ █▀ ▀▄ ▀▄ ▄▀ █ ▀▄█ █ ▀▄ ▄ █ █ ▀▄ ▄▀ - ▀▄█▄█▄▄▄▄▄▄▄█▄█▄▀ ▀ ▀ ▀▀▀▀ ▀ ▀ ▀ ▀▀▀▀ ▀ ▀ ▀▀▀ -</pre> -<br /> -<span>*THIS ISN'T MY PROJECT* but I found KONPEITO an interesting Gemini capsule. It's a quarterly released Low-Fi music mix tape distributed only through Gemini (and not the web). </span><br /> -<br /> -<a class='textlink' href='https://konpeito.media'>https://konpeito.media</a><br /> -<br /> -<span>If you wonder what Gemini is:</span><br /> -<br /> -<a class='textlink' href='./2021-04-24-welcome-to-the-geminispace.html'>Welcome to the Geminispae</a><br /> -<br /> -<span>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 /> - </div> - </content> - </entry> </feed> diff --git a/gemfeed/index.html b/gemfeed/index.html index 42fc7aa6..0da21510 100644 --- a/gemfeed/index.html +++ b/gemfeed/index.html @@ -15,6 +15,7 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte <br /> <h2 style='display: inline' id='to-be-in-the-zone'>To be in the .zone!</h2><br /> <br /> +<a class='textlink' href='./2025-01-15-working-with-an-sre-interview.html'>2025-01-15 - Working with an SRE Interview</a><br /> <a class='textlink' href='./2025-01-01-posts-from-october-to-december-2024.html'>2025-01-01 - Posts from October to December 2024</a><br /> <a class='textlink' href='./2024-12-15-random-helix-themes.html'>2024-12-15 - Random Helix Themes</a><br /> <a class='textlink' href='./2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 - f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br /> @@ -13,7 +13,7 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte </p> <h1 style='display: inline' id='foozone'>foo.zone</h1><br /> <br /> -<span class='quote'>This site was generated at 2025-01-12T12:23:18+02:00 by <span class='inlinecode'>Gemtexter</span></span><br /> +<span class='quote'>This site was generated at 2025-01-15T00:16:04+02:00 by <span class='inlinecode'>Gemtexter</span></span><br /> <br /> <span>Welcome to the foo.zone. Everything you read on this site is my personal opinion and experience. You can call me a Linux/*BSD enthusiast and hobbyist. I mainly write about tech, IT, programming and sometimes also about self-improvement here. And I also like coding.</span><br /> <br /> @@ -41,6 +41,7 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte <br /> <h3 style='display: inline' id='posts'>Posts</h3><br /> <br /> +<a class='textlink' href='./gemfeed/2025-01-15-working-with-an-sre-interview.html'>2025-01-15 - Working with an SRE Interview</a><br /> <a class='textlink' href='./gemfeed/2025-01-01-posts-from-october-to-december-2024.html'>2025-01-01 - Posts from October to December 2024</a><br /> <a class='textlink' href='./gemfeed/2024-12-15-random-helix-themes.html'>2024-12-15 - Random Helix Themes</a><br /> <a class='textlink' href='./gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html'>2024-12-03 - f3s: Kubernetes with FreeBSD - Part 2: Hardware and base installation</a><br /> diff --git a/uptime-stats.html b/uptime-stats.html index cf33fc1c..915f4f56 100644 --- a/uptime-stats.html +++ b/uptime-stats.html @@ -13,7 +13,7 @@ View this page as <a href="https://codeberg.org/snonux/foo.zone/src/branch/conte </p> <h1 style='display: inline' id='my-machine-uptime-stats'>My machine uptime stats</h1><br /> <br /> -<span class='quote'>This site was last updated at 2025-01-12T12:23:18+02:00</span><br /> +<span class='quote'>This site was last updated at 2025-01-15T00:16:04+02:00</span><br /> <br /> <span>The following stats were collected via <span class='inlinecode'>uptimed</span> on all of my personal computers over many years and the output was generated by <span class='inlinecode'>guprecords</span>, the global uptime records stats analyser of mine.</span><br /> <br /> |
