summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2022-10-28 11:03:30 +0300
committerPaul Buetow <paul@buetow.org>2022-10-28 11:03:30 +0300
commit2f26389d12f0bf2b166449ca8adf33b4913bc970 (patch)
treed8dacb6e974ff1918d6b49c3ea354950a54a797d
parentb75abfe6633f5053718defd3494eeff71f01f281 (diff)
Update content for md
-rw-r--r--gemfeed/2022-10-30-installing-dtail-on-openbsd.md344
-rw-r--r--gemfeed/index.md1
-rw-r--r--index.md1
-rw-r--r--other-resources.md9
-rw-r--r--resources.md78
5 files changed, 392 insertions, 41 deletions
diff --git a/gemfeed/2022-10-30-installing-dtail-on-openbsd.md b/gemfeed/2022-10-30-installing-dtail-on-openbsd.md
new file mode 100644
index 00000000..01e32caa
--- /dev/null
+++ b/gemfeed/2022-10-30-installing-dtail-on-openbsd.md
@@ -0,0 +1,344 @@
+# Installing DTail on OpenBSD
+
+> Published by Paul at 2022-10-28
+
+```
+ ,_---~~~~~----._
+ _,,_,*^____ _____``*g*\"*,
+/ __/ /' ^. / \ ^@q f
+ @f | | | | 0 _/
+\`/ \~__((@/ __ \__((@/ \
+ | _l__l_ I <--- The Go Gopher
+ } [______] I
+ ] | | | |
+ ] ~ ~ |
+ | |
+ | |
+ | | A ;
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~,--,-/ \---,-/|~~,~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ _|\,'. /| /| `/|-.
+ \`.' /| , `;.
+ ,'\ A A A A _ /| `.;
+ ,/ _ A _ / _ /| ;
+ /\ / \ , , A / / `/|
+ /_| | _ \ , , ,/ \
+ // | |/ `.\ ,- , , ,/ ,/ \/
+ / @| |@ / /' \ \ , > /| ,--.
+ |\_/ \_/ / | | , ,/ \ ./' __:..
+ | __ __ | | | .--. , > > |-' / `
+ ,/| / ' \ | | | \ , | /
+ / |<--.__,->| | | . `. > > / (
+ /_,' \\ ^ / \ / / `. >-- /^\ |
+ \\___/ \ / / \__' \ \ \/ \ |
+ `. |/ , , /`\ \ )
+ \ ' |/ , V \ / `-\
+ OpenBSD Puffy ---> `|/ ' V V \ \.' \_
+ '`-. V V \./'\
+ `|/-. \ / \ /,---`\ kat
+ / `._____V_____V'
+ ' '
+```
+
+This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-)
+
+ In this post, I want to give a quick overview (or how-to) about installing DTail on OpenBSD, as the official documentation only covers Red Hat and Fedora Linux! And this blog post will also be used as my reference!
+
+[https://dtail.dev](https://dtail.dev)
+
+I am using Rexify for my OpenBSD automation. Check out the following article covering my Rex setup in a little bit more detail:
+
+[Let's Encrypt with OpenBSD and Rex](./2022-07-30-lets-encrypt-with-openbsd-and-rex.md)
+
+I will also mention some relevant `Rexfile` snippets in this post!
+
+## Compile it
+
+First of all, DTail needs to be downloaded and compiled. For that, `git`, `go`, and `gmake` are required:
+
+```
+$ doas pkg_add git go gmake
+```
+
+I am happy that the Go Programming Language is readily available in the OpenBSD packaging system. Once the dependencies got installed, clone DTail and compile it:
+
+```
+$ mkdir git
+$ cd git
+$ git clone https://github.com/mimecast/dtail
+$ cd dtail
+$ gmake
+```
+
+You can verify the version by running the following command:
+
+```
+$ ./dtail --version
+ DTail 4.1.0 Protocol 4.1 Have a lot of fun!
+$ file dtail
+ dtail: ELF 64-bit LSB executable, x86-64, version 1
+```
+
+Now, there isn't any need anymore to keep `git`, `go` and `gmake`, so they can be deinstalled now:
+
+```
+$ doas pkg_delete git go gmake
+```
+
+One day I shall create an official OpenBSD port for DTail.
+
+## Install it
+
+Installing the binaries is now just a matter of copying them to `/usr/local/bin` as follows:
+
+```
+$ for bin in dserver dcat dgrep dmap dtail dtailhealth; do
+ doas cp -p $bin /usr/local/bin/$bin
+ doas chown root:wheel /usr/local/bin/$bin
+done
+```
+
+Also, we will be creating the `_dserver` service user:
+
+```
+$ doas adduser -class nologin -group _dserver -batch _dserver
+$ doas usermod -d /var/run/dserver/ _dserver
+```
+
+The OpenBSD init script is created from scratch (not part of the official DTail project). Run the following to install the bespoke script:
+
+```
+$ cat <<'END' | doas tee /etc/rc.d/dserver
+#!/bin/ksh
+
+daemon="/usr/local/bin/dserver"
+daemon_flags="-cfg /etc/dserver/dtail.json"
+daemon_user="_dserver"
+
+. /etc/rc.d/rc.subr
+
+rc_reload=NO
+
+rc_pre() {
+ install -d -o _dserver /var/log/dserver
+ install -d -o _dserver /var/run/dserver/cache
+}
+
+rc_cmd $1 &
+END
+$ doas chmod 755 /etc/rc.d/dserver
+```
+
+### Rexification
+
+This is the task for setting it up via Rex. Note the `. . . .`, that's a placeholder which we will fill up more and more during this blog post:
+
+```
+desc 'Setup DTail';
+task 'dtail', group => 'frontends',
+ sub {
+ my $restart = FALSE;
+
+ file '/etc/rc.d/dserver':
+ content => template('./etc/rc.d/dserver.tpl'),
+ owner => 'root',
+ group => 'wheel',
+ mode => '755',
+ on_change => sub { $restart = TRUE };
+
+ .
+ .
+ .
+ .
+
+ service 'dserver' => 'restart' if $restart;
+ service 'dserver', ensure => 'started';
+ };
+```
+
+## Configure it
+
+Now, DTail is fully installed but still needs to be configured. Grab the default config file from GitHub ...
+
+```
+$ doas mkdir /etc/dserver
+$ curl https://raw.githubusercontent.com/mimecast/dtail/master/samples/dtail.json.sample |
+ doas tee /etc/dserver/dtail.json
+```
+
+... and then edit it and adjust `LogDir` in the `Common` section to `/var/log/dserver`. The result will look like this:
+
+```
+ "Common": {
+ "LogDir": "/var/log/dserver",
+ "Logger": "Fout",
+ "LogRotation": "Daily",
+ "CacheDir": "cache",
+ "SSHPort": 2222,
+ "LogLevel": "Info"
+ }
+```
+
+### Rexification
+
+That's as simple as adding the following to the Rex task:
+
+```
+file '/etc/dserver',
+ ensure => 'directory';
+
+file '/etc/dserver/dtail.json',
+ content => template('./etc/dserver/dtail.json.tpl'),
+ owner => 'root',
+ group => 'wheel',
+ mode => '755',
+ on_change => sub { $restart = TRUE };
+```
+
+## Update the key cache for it
+
+DTail relies on SSH for secure authentication and communication. However, the system user `_dserver` has no permission to read the SSH public keys from the user's home directories, so the DTail server also checks for available public keys in an alternative path `/var/run/dserver/cache`.
+
+The following script, populating the DTail server key cache, can be run periodically via `CRON`:
+
+```
+$ cat <<'END' | doas tee /usr/local/bin/dserver-update-key-cache.sh
+#!/bin/ksh
+
+CACHEDIR=/var/run/dserver/cache
+DSERVER_USER=_dserver
+DSERVER_GROUP=_dserver
+
+echo 'Updating SSH key cache'
+
+ls /home/ | while read remoteuser; do
+ keysfile=/home/$remoteuser/.ssh/authorized_keys
+
+ if [ -f $keysfile ]; then
+ cachefile=$CACHEDIR/$remoteuser.authorized_keys
+ echo "Caching $keysfile -> $cachefile"
+
+ cp $keysfile $cachefile
+ chown $DSERVER_USER:$DSERVER_GROUP $cachefile
+ chmod 600 $cachefile
+ fi
+done
+
+# Cleanup obsolete public SSH keys
+find $CACHEDIR -name \*.authorized_keys -type f |
+while read cachefile; do
+ remoteuser=$(basename $cachefile | cut -d. -f1)
+ keysfile=/home/$remoteuser/.ssh/authorized_keys
+
+ if [ ! -f $keysfile ]; then
+ echo 'Deleting obsolete cache file $cachefile'
+ rm $cachefile
+ fi
+done
+
+echo 'All set...'
+END
+$ doas chmod 500 /usr/local/bin/dserver-update-key-cache.sh
+```
+
+Note that the script above is a slight variation of the official DTail script. The official DTail one is a `bash` script, but on OpenBSD, there's `ksh`. I run it once daily by adding it to the `daily.local`:
+
+```
+$ echo /usr/local/bin/dserver-update-key-cache.sh | doas tee -a /etc/daily.local
+/usr/local/bin/dserver-update-key-cache.sh
+```
+
+### Rexification
+
+That's done by adding ...
+
+```
+file '/usr/local/bin/dserver-update-key-cache.sh',
+ content => template('./scripts/dserver-update-key-cache.sh.tpl'),
+ owner => 'root',
+ group => 'wheel',
+ mode => '500';
+
+append_if_no_such_line '/etc/daily.local', '/usr/local/bin/dserver-update-key-cache.sh';
+```
+
+... to the Rex task!
+
+## Start it
+
+Now, it's time to enable and start the DTail server:
+
+```
+$ sudo rcctl enable dserver
+$ sudo rcctl start dserver
+$ tail -f /var/log/dserver/*.log
+INFO|1022-090634|Starting scheduled job runner after 2s
+INFO|1022-090634|Starting continuous job runner after 2s
+INFO|1022-090644|24204|stats.go:53|2|11|7|||MAPREDUCE:STATS|currentConnections=0|lifetimeConnections=0
+INFO|1022-090654|24204|stats.go:53|2|11|7|||MAPREDUCE:STATS|currentConnections=0|lifetimeConnections=0
+INFO|1022-090719|Starting server|DTail 4.1.0 Protocol 4.1 Have a lot of fun!
+INFO|1022-090719|Generating private server RSA host key
+INFO|1022-090719|Starting server
+INFO|1022-090719|Binding server|0.0.0.0:2222
+INFO|1022-090719|Starting scheduled job runner after 2s
+INFO|1022-090719|Starting continuous job runner after 2s
+INFO|1022-090729|86050|stats.go:53|2|11|7|||MAPREDUCE:STATS|currentConnections=0|lifetimeConnections=0
+INFO|1022-090739|86050|stats.go:53|2|11|7|||MAPREDUCE:STATS|currentConnections=0|lifetimeConnect
+.
+.
+.
+Ctr+C
+```
+
+As we don't want to wait until tomorrow, let's populate the key cache manually:
+
+```
+$ doas /usr/local/bin/dserver-update-key-cache.sh
+Updating SSH key cache
+Caching /home/_dserver/.ssh/authorized_keys -> /var/cache/dserver/_dserver.authorized_keys
+Caching /home/admin/.ssh/authorized_keys -> /var/cache/dserver/admin.authorized_keys
+Caching /home/failunderd/.ssh/authorized_keys -> /var/cache/dserver/failunderd.authorized_keys
+Caching /home/git/.ssh/authorized_keys -> /var/cache/dserver/git.authorized_keys
+Caching /home/paul/.ssh/authorized_keys -> /var/cache/dserver/paul.authorized_keys
+Caching /home/rex/.ssh/authorized_keys -> /var/cache/dserver/rex.authorized_keys
+All set...
+```
+
+## Use it
+
+The DTail server is now ready to serve connections. You can use any DTail commands, such as `dtail`, `dgrep`, `dmap`, `dcat`, `dtailhealth`, to do so. Checkout out all the usage examples on the official DTail page.
+
+I have installed DTail server this way on my personal OpenBSD frontends `blowfish`, and `fishfinger`, and the following command connects as user `rex` to both machines and greps the file `/etc/fstab` for the string `local`:
+
+```
+❯ ./dgrep -user rex -servers blowfish.buetow.org,fishfinger.buetow.org --regex local /etc/fstab
+CLIENT|earth|WARN|Encountered unknown host|{blowfish.buetow.org:2222 0xc0000a00f0 0xc0000a61e0 [blowfish.buetow.org]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9ZnF/LAk14SgqCzk38yENVTNfqibcluMTuKx1u53cKSp2xwHWzy0Ni5smFPpJDIQQljQEJl14ZdXvhhjp1kKHxJ79ubqRtIXBlC0PhlnP8Kd+mVLLHYpH9VO4rnaSfHE1kBjWkI7U6lLc6ks4flgAgGTS5Bb7pLAjwdWg794GWcnRh6kSUEQd3SftANqQLgCunDcP2Vc4KR9R78zBmEzXH/OPzl/ANgNA6wWO2OoKKy2VrjwVAab6FW15h3Lr6rYIw3KztpG+UMmEj5ReexIjXi/jUptdnUFWspvAmzIl6kwzzF8ExVyT9D75JRuHvmxXKKjyJRxqb8UnSh2JD4JN [23.88.35.144]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9ZnF/LAk14SgqCzk38yENVTNfqibcluMTuKx1u53cKSp2xwHWzy0Ni5smFPpJDIQQljQEJl14ZdXvhhjp1kKHxJ79ubqRtIXBlC0PhlnP8Kd+mVLLHYpH9VO4rnaSfHE1kBjWkI7U6lLc6ks4flgAgGTS5Bb7pLAjwdWg794GWcnRh6kSUEQd3SftANqQLgCunDcP2Vc4KR9R78zBmEzXH/OPzl/ANgNA6wWO2OoKKy2VrjwVAab6FW15h3Lr6rYIw3KztpG+UMmEj5ReexIjXi/jUptdnUFWspvAmzIl6kwzzF8ExVyT9D75JRuHvmxXKKjyJRxqb8UnSh2JD4JN 0xc0000a2180}
+CLIENT|earth|WARN|Encountered unknown host|{fishfinger.buetow.org:2222 0xc0000a0150 0xc000460110 [fishfinger.buetow.org]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNiikdL7+tWSN0rCaw1tOd9aQgeUFgb830V9ejkyJ5h93PKLCWZSMMCtiabc1aUeUZR//rZjcPHFLuLq/YC+Y3naYtGd6j8qVrcfG8jy3gCbs4tV9SZ9qd5E24mtYqYdGlee6JN6kEWhJxFkEwPfNlG+YAr3KC8lvEAE2JdWvaZavqsqMvHZtAX3b25WCBf2HGkyLZ+d9cnimRUOt+/+353BQFCEct/2mhMVlkr4I23CY6Tsufx0vtxx25nbFdZias6wmhxaE9p3LiWXygPWGU5iZ4RSQSImQz4zyOc9rnJeP1rwGk0OWDJhdKNXuf0kIPdzMfwxv2otgY32/DJj6L [46.23.94.99]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNiikdL7+tWSN0rCaw1tOd9aQgeUFgb830V9ejkyJ5h93PKLCWZSMMCtiabc1aUeUZR//rZjcPHFLuLq/YC+Y3naYtGd6j8qVrcfG8jy3gCbs4tV9SZ9qd5E24mtYqYdGlee6JN6kEWhJxFkEwPfNlG+YAr3KC8lvEAE2JdWvaZavqsqMvHZtAX3b25WCBf2HGkyLZ+d9cnimRUOt+/+353BQFCEct/2mhMVlkr4I23CY6Tsufx0vtxx25nbFdZias6wmhxaE9p3LiWXygPWGU5iZ4RSQSImQz4zyOc9rnJeP1rwGk0OWDJhdKNXuf0kIPdzMfwxv2otgY32/DJj6L 0xc0000a2240}
+Encountered 2 unknown hosts: 'blowfish.buetow.org:2222,fishfinger.buetow.org:2222'
+Do you want to trust these hosts?? (y=yes,a=all,n=no,d=details): a
+CLIENT|earth|INFO|STATS:STATS|cgocalls=11|cpu=8|connected=2|servers=2|connected%=100|new=2|throttle=0|goroutines=19
+CLIENT|earth|INFO|Added hosts to known hosts file|/home/paul/.ssh/known_hosts
+REMOTE|blowfish|100|7|fstab|31bfd9d9a6788844.h /usr/local ffs rw,wxallowed,nodev 1 2
+REMOTE|fishfinger|100|7|fstab|093f510ec5c0f512.h /usr/local ffs rw,wxallowed,nodev 1 2
+```
+
+Running it the second time, and given that you trusted the keys the first time, it won't prompt you for the host keys anymore:
+
+```
+❯ ./dgrep -user rex -servers blowfish.buetow.org,fishfinger.buetow.org --regex local /etc/fstab
+REMOTE|blowfish|100|7|fstab|31bfd9d9a6788844.h /usr/local ffs rw,wxallowed,nodev 1 2
+REMOTE|fishfinger|100|7|fstab|093f510ec5c0f512.h /usr/local ffs rw,wxallowed,nodev 1 2
+```
+
+## Conclusions
+
+It's a bit of manual work, but it's ok on this small scale! I shall invest time in creating an official OpenBSD port, though. That would render most of the manual steps obsolete, as outlined in this post!
+
+Check out the following for more information:
+
+[https://dtail.dev](https://dtail.dev)
+[https://github.com/mimecast/dtail](https://github.com/mimecast/dtail)
+[https://rexify.org](https://rexify.org)
+
+E-Mail your comments to paul at buetow dot org! :-)
+
+[Go back to the main site](../)
diff --git a/gemfeed/index.md b/gemfeed/index.md
index da6f9c5b..8b371012 100644
--- a/gemfeed/index.md
+++ b/gemfeed/index.md
@@ -2,6 +2,7 @@
## To be in the .zone!
+[2022-10-30 - Installing DTail on OpenBSD](./2022-10-30-installing-dtail-on-openbsd.md)
[2022-09-30 - After a bad night's sleep](./2022-09-30-after-a-bad-nights-sleep.md)
[2022-08-27 - Gemtexter 1.1.0 - Let's Gemtext again](./2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md)
[2022-07-30 - Let's Encrypt with OpenBSD and Rex](./2022-07-30-lets-encrypt-with-openbsd-and-rex.md)
diff --git a/index.md b/index.md
index 32f56695..ea158c23 100644
--- a/index.md
+++ b/index.md
@@ -30,6 +30,7 @@ If you reach this site via the modern web, please read this:
### Posts
+[2022-10-30 - Installing DTail on OpenBSD](./gemfeed/2022-10-30-installing-dtail-on-openbsd.md)
[2022-09-30 - After a bad night's sleep](./gemfeed/2022-09-30-after-a-bad-nights-sleep.md)
[2022-08-27 - Gemtexter 1.1.0 - Let's Gemtext again](./gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md)
[2022-07-30 - Let's Encrypt with OpenBSD and Rex](./gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md)
diff --git a/other-resources.md b/other-resources.md
index 43a16cc2..33e262f5 100644
--- a/other-resources.md
+++ b/other-resources.md
@@ -63,13 +63,12 @@ _-" . ' + . . ,//////0\ | /00HHHHHHHMMMMM
* 2019 - Das Netz der Sterne (de), Audio book
* 2020 - Die Eskalation (de) - Maschinenintelligenz-Trilogie
* 2021 - Mars Discovery (de) - Maschinenintelligenz-Trilogie
-* 2022 - Eklipse (de) (Currently reading)
+* 2022 - Eklipse (de)
### Ian Banks
* 1987 - Consider Pheblas (en) / Bedenke Pheblas (de) - Culture Book 1
* 1988 - The Player of Games (en) - Culture Book 2, Audio book
-* 1990 - Use of Weapons (en) - Culture Book 3, Audio book
### Other Authors
@@ -78,9 +77,13 @@ _-" . ' + . . ,//////0\ | /00HHHHHHHMMMMM
* 2009 - Quest, Andreas Eschbach
* 2010 - The Icarus Hunt (en) / Jagt auf Ikarus (de), Timothy Zahn
+### Currently reading
+
+* 2003 - Absolution Gap (en) / Offenbarung (de) - Revelation Space Universe
+* 1990 - Use of Weapons (en) - Culture Book 3, Audio book
+
### Unread books already in my shelf
-* 2003 - Absolution Gap (en) / Offenbarung (de) - Revelation Space Universe, Alastair Reynolds
* 2018 - Ewiges Leben (de), Andreas Brandhorst
Do you recommend a good Science Fiction Novel? E-Mail at paul at buetow dot org! :-)
diff --git a/resources.md b/resources.md
index 29fc9fdc..80095590 100644
--- a/resources.md
+++ b/resources.md
@@ -19,36 +19,37 @@ You won't find any links on this site because, over time, the links will break.
## Technical books
-* 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
-* Site Reliability Engineering; How Google runs production systems; O'Reilly
-* The Docker Book; James Turnbull; Kindle
-* The Pragmatic Programmer; David Thomas; Addison-Wesley
-* Funktionale Programmierung; Peter Pepper; Springer
-* Systemprogrammierung in Go; Frank Müller; dpunkt
+* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly
* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press
+* Effective Java; Joshua Bloch; Addison-Wesley Professional
+* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional
+* Systemprogrammierung in Go; Frank Müller; dpunkt
+* The Pragmatic Programmer; David Thomas; Addison-Wesley
+* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson
+* Pro Puppet; James Turnbull, Jeffrey McCune; Apress
* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly
+* Polished Ruby Programming; Jeremy Evans; Packt Publishing
* C++ Programming Language; Bjarne Stroustrup;
-* Java ist auch eine Insel; Christian Ullenboom;
-* Effective Java; Joshua Bloch; Addison-Wesley Professional
-* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly
-* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner
-* Raku Recipes; J.J. Merelo; Apress
-* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible
-* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly
-* Data Science at the Command Line; Jeroen Janssens; O'Reilly
+* DNS and BIND; Cricket Liu; O'Reilly
+* Modern Perl; Chromatic ; Onyx Neon Press
* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press
-* Effective awk programming; Arnold Robbins; O'Reilly
+* Concurrency in Go; Katherine Cox-Buday; O'Reilly
+* 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
+* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly
* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly
* Developing Games in Java; David Brackeen and others...; New Riders
+* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly
* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible
-* Modern Perl; Chromatic ; Onyx Neon Press
+* Site Reliability Engineering; How Google runs production systems; O'Reilly
* Higher Order Perl; Mark Dominus; Morgan Kaufmann
-* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional
-* Concurrency in Go; Katherine Cox-Buday; O'Reilly
-* DNS and BIND; Cricket Liu; O'Reilly
-* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson
-* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly
-* Pro Puppet; James Turnbull, Jeffrey McCune; Apress
+* The Docker Book; James Turnbull; Kindle
+* Effective awk programming; Arnold Robbins; O'Reilly
+* Data Science at the Command Line; Jeroen Janssens; O'Reilly
+* Funktionale Programmierung; Peter Pepper; Springer
+* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner
+* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible
+* Raku Recipes; J.J. Merelo; Apress
+* Java ist auch eine Insel; Christian Ullenboom;
## Technical references
@@ -61,29 +62,30 @@ I didn't read them from the beginning to the end, but I am using them to look up
## Self-development and soft-skills books
-* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books
-* Psycho-Cybernetics; Maxwell Maltz; Perigee Books
-* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select
-* The Joy of Missing Out; Christina Crook; New Society Publishers
-* The Bullet Journal Method; Ryder Carroll; Fourth Estate
-* Ultralearning; Anna Laurent; Self-published via Amazon
-* Stop starting, start finishing; Arne Roock; Lean-Kanban University
-* So Good They Can't Ignore You; Cal Newport; Business Plus
+* Deep Work; Cal Newport; Piatkus
+* The Power of Now; Eckhard Tolle; Yellow Kite
* Digital Minimalism; Cal Newport; Portofolio Penguin
+* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion
+* The Bullet Journal Method; Ryder Carroll; Fourth Estate
+* Soft Skills; John Sommez; Manning Publications
+* Ultralearning; Scott Young; Thorsons
+* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select
+* Eat That Frog!; Brian Tracy; Hodder Paperbacks
* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd
+* Ultralearning; Anna Laurent; Self-published via Amazon
+* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing
* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business
+* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press
+* Stop starting, start finishing; Arne Roock; Lean-Kanban University
+* Psycho-Cybernetics; Maxwell Maltz; Perigee Books
* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK
-* Soft Skills; John Sommez; Manning Publications
-* Deep Work; Cal Newport; Piatkus
-* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion
+* The Joy of Missing Out; Christina Crook; New Society Publishers
+* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books
* The Off Switch; Mark Cropley; Virgin Books
+* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook
* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly
-* Eat That Frog!; Brian Tracy; Hodder Paperbacks
-* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press
* Atomic Habits; James Clear; Random House Business
-* Ultralearning; Scott Young; Thorsons
-* The Power of Now; Eckhard Tolle; Yellow Kite
-* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook
+* So Good They Can't Ignore You; Cal Newport; Business Plus
[Here are notes of mine for some of the books](./notes/index.md)