Author Archives: vermaden

Ghost in the Shell – Part 5

The Ghost in the Shell series were quite neglected while I was busy writing about other things. Its about time to continue the series. I hope you are not mad at me because of it. Here are another few things that I think some of you may find useful.

You may want to check other articles in the Ghost in the Shell series on the Ghost in the Shell – Global Page where you will find links to all episodes of the series along with table of contents for each episode’s contents.

Less More Useful

From all less(1) command line options I find these very handy.

Often when you pass some command output to less(1) you loose color. To keep color in the less(1) output use --raw-control-chars (or -r for short equivalent) option.

The other useful less(1) option I find useful is --chop-long-lines (or -S for short equivalent) which prevents line wrapping. You can of course scroll horizontally to see what does not fit on the screen.

While less(1) is a command line program it also has a very nice --mouse option – with this option you can scroll its output with your mouse wheel. How cool is that? You can even specify how many lines you want to scroll with --wheel-lines=n options where ‘n is as you probably guessed the number of scrolled lines.

It may be also useful to make less(1) quit if you want to display file that its contents fits in the current console screen – use --quit-if-one-screen for that.

Often people when they want to just view some config files they use vi(1) (or their other favorite ${EDITOR} that they use) – even if they do not intend to edit the file. Its better to open such file in less(1) and if you find out that you would want to edit the file hit the ‘v char while being at less(1) – it will open that file in your ${EDITOR} for editing.

You can also display line number in less(1) with --LINE-NUMBERS option (or use -N for shorter equivalent).

Detox These Filenames

Often when copying files from various sources the filenames may become corrupt in the process – mostly because of differences in encodings. To fix that very fast one may use detox(1) command. On FreeBSD systems its available as sysutils/detox package. Because the FILE you will be renaming almost for sure contains some special characters or spaces then its best to add quotation marks as shown below.

% detox "FILE"

Of course detox(1) renames one file at a time so to rename all files in the current directory we will use simple loop.

% for FILE in *; do detox "${FILE}"; done

If you want to also include subdirectories the do the following.

% find . -type f -exec detox {} ';'

If you do not want to limit yourself to files only (fix directories names also) then – as Mandalorian would say – this is the way.

% find . -exec detox {} ';'

Man Up the Info Pages

In the learning process of mastering UNIX systems one has to get used to reading man(1) pages and often getting back to re-reading them when needed. Like with many other things the GNU folks wanted to do things in their own way – seems they did not liked the man(1) pages that much as they created info(1) pages as an alternative. I dunno about you but IMHO info(1) pages does not feel like the UNIX way … maybe it’s because GNU is a recursive acronym for GNU IS NOT UNIX πŸ™‚

However there is an elegant way to convert any info(1) page into man(1) page by piping the info(1) page output into less(1) command – or other ${PAGER} that you use.

% info ls | less

Real UNIX Sorting

After you setup your UNIX environment the LC_ALL environment variable is mostly set to some UTF variant – like en_us.utf-8 for example. That has implications as names of files and directories are now sorted case insensitively. To get back to original case sensitive UNIX sorting you can use the LC_ALL variable set ‘C‘. You can use that on the fly or make it permanent by adding it to your shell configuration. For example with ls(1) command shown below.

% ls -1
FreeBSD.org
kernel.org
Linux.com
NetBSD.org
openbsd.org
X11.org
xorg.conf

% env LC_ALL=C ls -1
FreeBSD.org
Linux.com
NetBSD.org
X11.org
kernel.org
openbsd.org
xorg.conf

Faster Better Uptime

When you want check for how long system was running we usually use uptime(1) command.

% uptime
8:15PM  up 5 days,  4:42, 4 users, load averages: 0.71, 0.76, 0.82

But you can type just one letter instead of six and get even more info – the w(1) command. It also includes information about other active sessions to this system – which comes handy because you want to know if someone else can try to fix or configure the same things as you intend to.

% w
8:15PM  up 5 days,  4:42, 4 users, load averages: 0.77, 0.78, 0.83
USER       TTY      FROM    LOGIN@  IDLE WHAT
vermaden   pts/0    :0     Thu10PM  3:09 -zsh (zsh)
szasstam   pts/1    :0     Sun08PM 1day  -zsh (zsh)
edwin      pts/2    :0      7:04PM     - -zsh (zsh)
larloch    pts/3    :0      7:56PM     - w

Filter Huge Files

When you start grep(1) to filter really big file – like several gigabytes in size for example – the grep(1) command uses locale from LC_ALL and LANG variables – which as you probably guess right know from the context of this sentence – slows things down.

You can modify both LC_ALL and LANG on the fly to ‘C‘ value to make that grep(1) really fast – and when I mean fast I mean sometimes you will gain several orders of magnitude.

% env LC_ALL=C LANG=C grep string HUGEFILE

That is all for this episode. Hope you liked it.

EOF

Valuable News – 2021/04/26

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX or BSD systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

UNIX

Moving from vim to nvim Editor.
https://www.vincentdelft.be/post/post_20190308

Gnome 40 – Anti-Desktop Desktop.
https://www.dedoimedo.com/computers/gnome-40.html

FreeBSD Torrents.
https://wiki.freebsd.org/Torrents

OpenSSH 8.6 Released.
https://lwn.net/Articles/853445/

FreeBSD VNET Jail Howto Part 2 – Networking.
https://antranigv.am/weblog_en/posts/2021-04-20-07-02/

BSD Weekly – Issue 65.
https://bsdweekly.com/issues/65

Open Source Licensing Insights – Why You Should Use BSD Licensing.
https://klarasystems.com/articles/why-you-should-use-bsd-licensing-for-your-next-open-source-project-or-product/

DragonflyBSD 6.0.0 RC1 Changelog.
http://lists.dragonflybsd.org/pipermail/commits/2021-April/770415.html

DragonflyBSD 6.0.0 RC1 Images Available.
https://www.dragonflydigest.com/2021/04/22/25663.html

OPNsense 21.1.5 Released.
https://forum.opnsense.org/index.php?topic=22730.0

OPNsense Moves from HardenedBSD to FreeBSD as Base.
https://forum.opnsense.org/index.php?topic=22761.msg108313#msg108313

Is OpenBSD Secure – Quotes and Testimonies.
https://isopenbsdsecu.re/quotes/

Zellij – Terminal Workspace in Rust.
https://zellij.dev/news/beta/

BSD Now 399 – Comparing Sandboxes.
https://www.bsdnow.tv/399

Comparing Sandboxing Techniques – Capsicum/Plege/Unveil/Seccomp.
https://www.omarpolo.com/post/gmid-sandbox.html

FVWM 3 and Quest for Comfortable NetBSD Desktop.
https://www.unitedbsd.com/d/442-fvwm3-and-the-quest-for-a-comfortable-netbsd-desktop

NetBSD Full Disk Encryption with CGD.
https://www.unitedbsd.com/d/461-netbsd-full-disk-encryption-with-cgd

OpenBSD Initial Support for RISC-V 64bit Architecture.
https://undeadly.org/cgi?action=article;sid=20210423090342

Michael W. Lucas Latest Book TLS Mastery is Out.
https://twitter.com/mwlauthor/status/1385615053085413380
https://mwl.io/nonfiction/networking#tls

Installing and Taking Quick Look at FreeBSD 13.
https://tilvids.com/videos/watch/8745a55b-0bf1-4ed6-877b-a34c17b8231a

No Complexity Allowed on helloSystem.
https://midrange.tedium.co/issues/no-complexity-allowed-384406

In Other BSDs for 2021/04/24.
https://www.dragonflydigest.com/2021/04/24/25652.html

SmartOS 2021/04/22 Release.
https://smartos.topicbox.com/groups/smartos-discuss/T23ed50d6cc2e3afd/smartos-release-20210422

SmartOS in 2021.
https://blog.brianewell.com/smartos-in-2021/

FreeBSD 13 on 12 Year Old Laptop.
http://box.matto.nl/freebsd-13-on-a-12-year-old-laptop.html

New FreeBSD Images for PineBook Pro.
https://personalbsd.org/?page_id=2/

NetBSD VM on Bhyve (on TrueNAS).
https://bentsukun.ch/posts/bhyve-netbsd/

Getting Started with NetBSD on Pinebook Pro.
https://bentsukun.ch/posts/pinebook-pro-netbsd/

Install and Setup of FreeBSD 13 on Raspberry Pi 4 and Raspberry Pi 400.
https://www.youtube.com/watch?time_continue=2&v=WuoMPP_178U

KDE in OpenBSD Updated to 21.04.0 Version.
https://github.com/sizeofvoid/wip-ports/commit/a91722d63b4f73ee07de8fa10b20c689f3273752

Setup Email Notifications on OpenIndiana.
https://jdrch.wordpress.com/2021/04/25/how-to-set-up-email-notifications-on-openindiana/

Fuck FreeBSD.
https://jdrch.wordpress.com/2021/04/14/fuck-freebsd/

FreeBSD Desktop – Part 23 – Configuration – Herbe Notifications.
https://vermaden.wordpress.com/2021/04/18/freebsd-desktop-part-23-configuration-herbe-notifications/

FreeBSD Desktop – Part 24 – Configuration – Universal File Opener.
https://vermaden.wordpress.com/2021/04/22/freebsd-desktop-part-24-configuration-universal-file-opener/

Hardware

ThinkPad X230 with E-INK Display at 30fps.
https://www.youtube.com/watch?v=HuegrU_kIq8

Dual AMD EPYC Breaks Cinebench R23 World Record.
https://www.techpowerup.com/281192/amd-breaks-through-cinebench-r23-world-record-with-dual-epyc-build

HyperX Alloy Origins Core 87 Keys Keyboard Review.
https://www.techpowerup.com/review/hyperx-alloy-origins-core-keyboard/

Best Internal Hard Drives – 2021/04.
https://www.anandtech.com/show/12075/best-consumer-hdds

Best Computer Monitors 2021.
https://www.tomshardware.com/best-picks/best-computer-monitors

Supermicro AS-1024US-TRT Review – 1U Ultra AMD EPYC 7003 Server.
https://www.servethehome.com/supermicro-as-1024us-trt-review-1u-ultra-amd-epyc-7003-server/

Tenstorrent Selects SiFive Intelligence X280 for Next Generation AI Processors.
https://www.techpowerup.com/281384/tenstorrent-selects-sifive-intelligence-x280-for-next-generation-ai-processors

ODYSSEY X86J4125 SBC Gets Faster Celeron J4125 SoC and Price Increase.
https://www.cnx-software.com/2021/04/23/odyssey-x86j4125-sbc-gets-a-faster-celeron-j4125-soc-and-a-price-increase/

Ultimate Raspberry Pi Compute Module Carrier Board Comparison.
https://www.upswift.io/post/the-ultimate-raspberry-pi-compute-module-carrier-board-comparison

Best SSDs – 2021/04.
https://www.anandtech.com/show/9799/best-ssds

Designers Gone Wild – Most Bizarre Functioning Computers.
https://cybernews.com/editorial/designers-gone-wild-most-bizarre-functioning-computers/

5 Best Intel and AMD SBC for Makers.
https://www.cnx-software.com/2021/04/24/the-5-best-intel-amd-single-board-computers-for-makers/

Open Storage Sees Gains in Post Production.
https://www.postmagazine.com/Publications/Post-Magazine/2021/March-April-2021/Open-Storage-sees-gains-in-post-production.aspx

Dell OptiPlex 7080 Micro Review Evolution.
https://www.servethehome.com/dell-optiplex-7080-micro-review-the-evolution/

Life

As IBM Employee You are Not Allowed to Use Personal Gmail Account to Work on Linux Kernel.
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=4acd47644ef1e1c8f8f5bc40b7cf1c5b9bcbbc4e

Apple Sued for Terminating Account with $25000 Worth of Apps and Videos.
https://arstechnica.com/tech-policy/2021/04/apple-faces-class-action-lawsuit-over-its-definition-of-the-word-buy/

Problem with Hacking Law that Was Inspired by WarGames Movie.
https://cybernews.com/editorial/problem-with-a-hacking-law-that-was-inspired-by-a-movie/

Other

Interview with Michael Lucas – *BSD/Unix/IT and Other Books Author.
https://www.cyberciti.biz/interview/michael-lucas-bsd-unix-it-and-other-books-author/

Firefox 88.0 Released.
https://www.mozilla.org/en-US/firefox/88.0/releasenotes/

Firefox 88.0 Released – What is New.
https://www.omgubuntu.co.uk/2021/04/firefox-88-new-features

EOF

FreeBSD Desktop – Part 24 – Configuration – Universal File Opener

More then a decade ago when I started to use X11 as a desktop – on Linux then with KDE3 and later with Fluxbox. At first I thought that files are opened by appropriate applications not by their extension as in Windows systems but according to their Magic Numbers. I do not have to tell you how much disappointed I was when I learned the truth πŸ™‚

You may want to check other articles in the FreeBSD Desktop series on the FreeBSD Desktop – Global Page where you will find links to all episodes of the series along with table of contents for each episode’s contents.

TL;DR

Its a short story about cleaning the mess that XDG does and also using custom *.desktop handlers to open the files in the way you want. It know its in the FreeBSD Desktop series but actually it will work on any X11 desktop like Linux or Illumos.

The Table of Contents for the article is right below here.

  • XDG Utils
  • Now You See Me
  • Mime Apps Handlers
  • Generation of Handlers
  • Alternatives

Lets start then.

XDG Utils

After years of using X11 on FreeBSD now with Openbox as my daily driver I used so called xdg-utils package with its *.desktop files. That sometimes driven me nuts. Mess everywhere with doubled ‘the same’ applications listed as possible choices to open a file … almost randomly generated new *.desktop handlers with ‘new’ applications specified to open some files … another dozen of generated *.desktop files from WINE installations … it can only challenge the bullshit and mess of Windows Registry … not sure which one is more messed up (of course its Windows Registry but still).

The xdg-mime(1) is often not useful at all then determining the file type.

$ xdg-mime query filetype FILE.pdf
application/pdf

$ xdg-mime query default application/pdf
mupdf.sh.desktop

If minimalistic mupdf approach is not for you then you can select Atril for example … but you first need to know that is the handler name for the Atril application. You can find that out fast like that.

% find ~/.local/share/applications /usr/local/share/applications | grep atril
/usr/local/share/applications/atril.desktop

We now have the Atril handler name. To set it as new default application for PDF files type the following.

$ xdg-mime default atril.desktop application/pdf

$ xdg-mime query default application/pdf
atril.desktop

But this is rather unique moment when XDG works as designed. More often it looks like that.

$ xdg-mime query filetype FILE.doc
application/octet-stream

$ xdg-mime query filetype FILE.docx
application/zip

$ xdg-mime query filetype FILE.xls
application/octet-stream

$ xdg-mime query filetype FILE.xlsx
application/zip

So when you now ask for application/zip type then what should pop up? LibreOffice for Word/Excel documents or Engrampa for ZIP files?

% xdg-mime query default application/zip                                     
engrampa.desktop

Not very helpful …

Now You See Me

After almost accepting the current ‘tragic’ state of it I came with other idea – to create mine simplified launcher for many of these file types. It started small and is still quite small. The only thing I do now is that I only add new apps for file extensions that are not yet defined.

Its called see.sh and its function is dual:
– to easily replace XDG settings in one place as file opener
– as command line opener for single or multiple files

The construction of see.sh is really simple. It utilizes the idea behind the quote of Antoine de Saint-Exupery which goes like that – “Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” – its really simple and has nothing to remove from it.

I really appreciate that idea that I now do not have to remember which application is needed (and how its spelled besides the zsh(1) TAB completion) to open any file in command line. Its also faster to type then xdg-open(1) and I am sure that its settings were not modified by some third party app that I just installed because its hardcoded in it.

I also really like see.sh for being very elastic for the environment variables with which the needed application can be started. For example my default DPI for X11 session since more then a decade is 75. That makes fonts little smaller – more information fits on the available screen space. The GTK2/GTK3 applications do not need any tweaks and always look decent or even great but QT5 (and QT4 not so long ago) apps are real bitches when you want to force them to look the way you want (look nice) – especially when run without fully fledged KDE or PLASMA environment. One of such applications is LibreOffice. It looked great when it used GTK framework but after they moved to QT it started to look very ugly with my 75 DPI setting. This is how it looks with its environment unmodified.

Thanks to see.sh I can start LibreOffice with different DPI environment setting then 75 and it looks little better with DPI set to 80. LibreOffice started with QT_FONT_DPI=80 option does not look that bad now – its fonts are not that small and ugly anymore.

Now the text labels on LibreOffice menus are more readable but also not too large.

You may also customize see.sh to first create a backup copy before editing certain files or email them – only your imagination limits you here.

I also wanted its see.sh name to be short and fast to type so with completions its just see[TAB] and then a filename. Of course you may want to rename it to shorter version (or create alias) as see without extension but i like to keep my scripts with extension to distinguish them from native commands – but that is me.

First see.sh detects if one or multiple arguments (files) have been passed to it. If its just a single file then see.sh detects its extension and launches the configured application for it.

If file does not have extension then it checks file’s Magic Number. Currently only detection for plain text files is implemented with file(1) command.

If you pass multiple arguments (files) to see.sh then separate see.sh processes will be launched against each given file in parallel. Recursion generally.

Every time you select new application in graphical mode the new *.desktop file is created as a result with userapp-${APPNAME}-${RANDOM_STRING}.desktop name under ~/.local/share/applications directory. I am not sure that its the tidiest way possible. Often very ugly and strange handler filenames are generated – with spaces or quotation marks. Its really far from UNIX way of doing things and its philosophy.

This is how ~/.local/share/applications directory looked on my machine after some time. Notice the selected file.

After some cleanup and modifications it looks little better.

The XDG keeps its associations in the ~/.config/mimeapps.list file. Have a look how messed it gets after some usage.

After some more cleanup and removal of all unneeded userapp-${APPNAME}-${RANDOM_STRING}.desktop entries it starts to look more organized.

Every time see.sh will find out that it does not have handler for a file it will gracefully remind one to configure it.

Mime Apps Handlers

Many of these *.desktop handlers are not present anymore … but which one? Here is a handy one liner that will either show you the full path of the handler or ‘NOPE’ when one does not exists. This will also tell you if its your ‘custom’ handlers at ~/.local/share/applications or the ‘default’ ones that come with packages and installed software located at /usr/local/share/applications location.

% awk -F'=' '{print $2}' ~/.config/mimeapps.list \
    | tr ';' '\n' \
    | sort -u \
    | sed 1d \
    | while read I
      do
        echo ${I}
        find \
          ~/.local/share/applications \
          /usr/local/share/applications \
            | grep "/${I}" || echo NOPE
        echo
      done

Well … maybe not exactly ONE liner but a useful command that will do it πŸ™‚

Here is its output.

(...)

mupdf.sh.desktop
/home/vermaden/.local/share/applications/mupdf.sh.desktop

planmaker-free18.desktop
NOPE

presentations-free18.desktop
NOPE

see.sh.desktop
/home/vermaden/.local/share/applications/see.sh.desktop

sumatra.sh.desktop
/home/vermaden/.local/share/applications/sumatra.sh.desktop

textmaker-free18.desktop
NOPE

(...)

If you just want to check which ones are missed then add grep -B 1 NOPE at the end.

% awk -F'=' '{print $2}' ~/.config/mimeapps.list \
    | tr ';' '\n' \
    | sort -u \
    | sed 1d \
    | while read I
      do
        echo ${I}
        find \
          ~/.local/share/applications \
          /usr/local/share/applications \
            | grep "/${I}" || echo NOPE
        echo 
      done | grep -B 1 NOPE

Here is the (un)expected output.

You can safely remove all missing *.desktop handlers from the ~/.config/mimeapps.list file. You may use sed(1) or graphical editor if that suits you better. The logic behind it is to remove all instances of for example presentations-free18.desktop and then find and replace all instances of doubled semicolons ‘;;‘ into single one ‘;‘.

Generation of Handlers

To generate new *.desktop handlers in orderly fashion you can use mine generate-desktop-handler.sh script. It will create new handler in the ~/.local/share/applications directory and it will make sure you are creating one with an application that actually exists. Here is how it works. I have created new handler for my random-wallpaper-always.sh for setting up random wallpaper from specified directory or to set wallpaper from exact specified file as argument.

% generate-desktop-handler.sh                                       
usage: generate-desktop-handler.sh FILE

% generate-desktop-handler.sh non-existing-executable
NOPE: executable 'non-existing-executable' not found in ${PATH}

% generate-desktop-handler.sh random-wallpaper-always.sh 
INFO: handler '~/.local/share/applications/random-wallpaper-always.sh.desktop' was successfully generated

% cat ~/.local/share/applications/random-wallpaper-always.sh.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
NoDisplay=true
Exec=random-wallpaper-always.sh %f
Name=random-wallpaper-always.sh
Comment=random-wallpaper-always.sh

After you have created new random-wallpaper-always.sh.desktop handler you may want to add it to some image file type like JPG or PNG. In the example below I will add it to JPG file.

First right click on a JPG file with mouse and select Open With and then Other Application….

The select random-wallpaper-always.sh.desktop handler on the list. Make sure to UNCHECK the Remember this application for … files option. If you do not do that it will be the DEFAULT application from now and everytime you would want to open JPG file you will set it as wallpaper πŸ™‚

You may verify that new option is added by right clicking the JPG file and selecting Properties and then go to Open With tab. The random-wallpaper-always.sh.desktop handler will be one of the configured handlers for JPG files – but not the default one.

Now you can see that random-wallpaper-always.sh.desktop handler is available to use when selecting the Open With submenu.

As simple as that – and with tidiness as well.

Alternatives

There are some other alternatives to XDG but I am more then sure that most or all X11 applications support XDG way of doing things while not support the other alternative ones. Thus its far less hustle with just making XDG work as desired by generating needed handlers and using see.sh instead of using them and wasting even more time on the topic – at least that is my current experience.

Feel free to share your thoughts on the topic – maybe you will show me even better approach to this.

EOF

Valuable News – 2021/04/19

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX or BSD systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

UNIX

FreeBSD 13.0-RELEASE Now Available.
https://www.freebsd.org/releases/13.0R/announce/
https://www.freebsd.org/releases/13.0R/relnotes/

Enter The Matrix with FreeBSD.
https://dev.to/darkain/enter-the-matrix-with-freebsd-4dbj

FreeBSD smartmontools Quick Setup.
https://www.youtube.com/watch?v=vRI4-WcUJis

FreeBSD 13 Released – Here is How to Upgrade FreeBSD 12 to 13.
https://www.cyberciti.biz/open-source/freebsd-13-released-how-to-update-upgrade-freebsd-12-to-13/

Home Network Monitoring Using Prometheus.
https://linux-bsd.github.io/post/monitoring/

TrueNAS 12.0-U3 Reaches Prime Time.
https://www.ixsystems.com/blog/truenas-12-0-reaches-prime-time/
https://www.truenas.com/docs/releasenotes/core/12.0u3/

FreeBSD iostat – Understanding Storage Subsystem and Disk I/O.
https://klarasystems.com/articles/freebsd-iostat-a-quick-glance/

FreeBSD 13.0 Release Highlights.
https://freebsdfoundation.org/blog/freebsd-release-13-0-highlights/

Docker Hub Repository with Images of FreeBSD Releases.
https://hub.docker.com/r/kwiat/freebsd/tags

FreeBSD Magnet Links.
https://people.freebsd.org/~jmg/FreeBSD-13.0-R-magnet.txt

FreeBSD 13.0 on Raspberry Pi 400 – Quick Look.
https://www.youtube.com/watch?v=m6kyOHsvrsg

My Dog Garage Runs OpenBSD.
https://undeadly.org/cgi?action=article;sid=20210415055717

Lightweight Web Browers on FreeBSD – Tutorial.
https://www.reddit.com/r/freebsd/comments/mqsact/need_lightweight_web_browers_heres_the_tutorial/

FreeBSD 13 Has Been Released – Kudos to All Involved!
https://www.unixsheikh.com/articles/freebsd-13-has-been-released-kudos-to-all-involved.html

FreeBSD 13.0 Brings Better Performance with Clang/LLVM 11 and Obsolete GNU Bits Removed.
https://www.phoronix.com/scan.php?page=news_item&px=FreeBSD-13.0-RELEASE

FreeBSD Gives ARM64 Green Light for Production.
https://www.theregister.com/2021/04/12/freebsd_promotes_arm64_to_be/

FreeBSD 13 Released with OpenZFS Support and Performance Boost.
https://news.itsfoss.com/freebsd-13-release/

OmniOS Community Edition r151030cx/r151034ax/r151036x Available.
https://omnios.org/article/release-r36x-r34ax-r30cx

ZFS dRAID Finally – Sneak Peak into Latest and Long Awaited Feature of OpenZFS.
https://klarasystems.com/articles/openzfs-draid-finally/

BSD Now 398 – Coordinated Mars Time.
https://www.bsdnow.tv/398

Next Level – FreeBSD on arm64 in Cloud.
https://klarasystems.com/articles/the-next-level-freebsd-on-arm64-in-the-cloud/

Configure DNS over TLS (DoT) Using Unbound DNS in OPNsense.
https://homenetworkguy.com/how-to/configure-dns-over-tls-unbound-opnsense/

FTP is 50 Years Old. Older then TCP/IP.
https://www.filestash.app/2021/04/16/ftp-is-50-years-old/

Learning Notes on FreeBSD Jails. [2020]
https://genneko.github.io/playing-with-bsd/system/learning-notes-on-jails/

From Linux to BSD.
https://www.youtube.com/watch?v=HfQLsBPTwbU

Install FreeBSD 13.0 Plus XFCE Desktop and Basic Applications.
https://www.youtube.com/watch?v=Ch_ZN6BlChA

FreeBSD 13.0 BIOS Minimal Installation.
https://www.youtube.com/watch?v=1VG4Vr6Q-sg

FreeBSD 13.0 UEFI Minimal Installation.
https://www.youtube.com/watch?v=NfGoQJ8XMWw

Install Urxvt on FreeBSD.
https://danschmid.de/en/blog/install-urxvt-on-freebsd

Use dynamic-colors Tool for Changing Terminal Colors on the Fly.
https://github.com/sos4nt/dynamic-colors

In Other BSDs for 2021/04/17.
https://www.dragonflydigest.com/2021/04/17/25634.html

GhostBSD Review.
https://www.youtube.com/watch?v=hKEBzBLmBOk

FreeBSD Upgrade Bootloader.
https://meka.rs/blog/2021/04/16/freebsd-upgrade-bootloader/

Light X11 herbe Notifications w/o D-Bus.
https://github.com/dudik/herbe

The mkcert is Simple Tool for Making Locally Trusted Development Certificates.
https://github.com/FiloSottile/mkcert

Easy Text Transmission from Computer to Smartphone.
https://dataswamp.org/~solene/2021-03-25-computer-to-phone-text.html

Additional Extensions to FreeBSD Ports Tree.
https://jmos.net/software/freebsd.rvt

FreeBSD 13.0 Released.
https://dev.to/darkain/freebsd-13-0-released-2p0c

New zrepl 0.4 Published with Parallel Replication and More.
https://github.com/zrepl/zrepl/releases/tag/v0.4.0

Tale of Two BSDs – Upgrading AND Installing FreeBSD 13.
https://www.youtube.com/watch?v=tYENDHam2lg

FreeBSD Desktop – Part 23 – Configuration – Herbe Notifications.
https://vermaden.wordpress.com/2021/04/18/freebsd-desktop-part-23-configuration-herbe-notifications/

Hardware

AMD Ryzen 5000G APUs – OEM Only for Now.
https://www.anandtech.com/show/16616/amd-ryzen-5000g-apus-oem-only-for-now-full-release-later-this-year

AMD Ryzen 5000G/5000GE APUs Launched.
https://www.servethehome.com/amd-ryzen-5000g-and-5000ge-apus-launched-pro-not-yet/

Allwinner D1 RISC-V SBC and Processor.
https://www.cnx-software.com/2021/04/13/allwinner-d1-linux-risc-v-sbc-processor/

SiFive Tapes Out First 5nm TSMC RISC-V Chip With 7.2 Gbps HBM3.
https://www.tomshardware.com/news/openfive-tapes-out-5nm-risc-v-soc

Backblaze Hard Drive Stats for 2020.
https://www.backblaze.com/blog/backblaze-hard-drive-stats-for-2020/

ASRock Rack ROMED6U-2L2T Review AMD EPYC in mATX.
https://www.servethehome.com/asrock-rack-romed6u-2l2t-review-amd-epyc-in-matx/

China Loongson Technology Develops Own CPU ISA (Instruction Set Architecture).
https://www.tomshardware.com/news/loongson-technology-develops-its-own-cpu-instruction-set-architecture

World Tiniest NVMe RAID Array with Raspberry Pi Compute Module 4.
https://www.jeffgeerling.com/blog/2021/building-worlds-tiniest-nvme-raid-array

Samsung 980 1TB w/o DRAM NVMe SSD Review.
https://www.servethehome.com/samsung-980-1tb-dram-less-nvme-ssd-review/

Lenovo ThinkCentre M90q Tiny Review – 10 Cores in 1L PC.
https://www.servethehome.com/lenovo-thinkcentre-m90q-tiny-review-10-cores-in-a-1l-pc/

PiDP-11: Recreating PDP-11/70 with Raspberry Pi.
https://retroviator.com/2020/03/01/pidp-11/

RARE Commercial Commodore AMIGA A500 Computer.
https://www.ebay.com/itm/RARE-Commercial-Commodore-Amiga-500-A500-Computer-/154414855525

Biostar B550T-Silver Mini-ITX Motherboard for AMD Ryzen 5000 Family.
https://www.anandtech.com/show/16622/biostar-announces-b550t-silver-mini-itx-motherboard-for-ryzen-5000

Other

Vivaldi Will Not Use Google FLoC.
https://vivaldi.com/blog/no-google-vivaldi-users-will-not-get-floced/

Google Testing Its Controversial New Ad Targeting Tech in Millions of Browsers.
https://www.eff.org/deeplinks/2021/03/google-testing-its-controversial-new-ad-targeting-tech-millions-browsers-heres

Use DuckDuckGo Extension to Block Google FLoC Tracking Method.
https://spreadprivacy.com/block-floc-with-duckduckgo/

Opting Your Website Out of Google FLoC Network.
https://paramdeo.com/blog/opting-your-website-out-of-googles-floc-network

FLoC Away from Chrome.
https://www.floc-away-from-chrome.com/

Firefox Disables FTP Support.
https://blog.mozilla.org/addons/2021/04/15/built-in-ftp-implementation-to-be-removed-in-firefox-90/

EOF

FreeBSD Desktop – Part 23 – Configuration – Herbe Notifications

I do not use notifications. Dunno really why – seems I just did not needed them. The idea of Do Not Disturb Mode on the desktop/laptop is very strange to me as I ALWAYS work in the Do Not Disturb Mode since I do not use any notifications. Today I came across very small and compact solution for notifications on X11 desktop – herbe – as its author describes it – its daemon-less notifications without D-Bus. Minimal and lightweight.

I was curious if it works on FreeBSD and apparently it is πŸ™‚

Today I will show you how to build, configure and use herbe as part of FreeBSD Desktop series.

You may want to check other articles in the FreeBSD Desktop series on the FreeBSD Desktop – Global Page where you will find links to all episodes of the series along with table of contents for each episode’s contents.

Fetch

We will use the compact git-lite package from FreeBSD which has less dependencies then the default git package. Then we will clone the herbe repository.

# pkg install git-lite
% git clone https://github.com/dudik/herbe
Cloning into 'herbe'...
remote: Enumerating objects: 228, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (38/38), done.
remote: Total 228 (delta 21), reused 11 (delta 4), pack-reused 186
Receiving objects: 100% (228/228), 152.95 KiB | 272.00 KiB/s, done.
Resolving deltas: 100% (118/118), done.
$ cd herbe
% ls -l
total 23K
-rw-r--r-- 1 vermaden vermaden  650 2021-04-18 19:18 config.def.h
-rw-r--r-- 1 vermaden vermaden 5268 2021-04-18 19:18 herbe.c
-rw-r--r-- 1 vermaden vermaden 1070 2021-04-18 19:18 LICENSE
-rw-r--r-- 1 vermaden vermaden  425 2021-04-18 19:18 Makefile
-rw-r--r-- 1 vermaden vermaden 5578 2021-04-18 19:18 README.md

Patch

We will need a tiny one line patch to make it build on FreeBSD.

This FreeBSD patch for Makefile file is available here:
https://github.com/dudik/herbe/pull/16

… or diff(1) directly here:
https://patch-diff.githubusercontent.com/raw/dudik/herbe/pull/16.diff

We will now apply that patch.

% fetch https://patch-diff.githubusercontent.com/raw/dudik/herbe/pull/16.diff
% patch < 16.diff 
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/Makefile b/Makefile
|index 3225e36..69c8efc 100644
|--- a/Makefile
|+++ b/Makefile
--------------------------
Patching file Makefile using Plan A...
Hunk #1 succeeded at 1.
done

The herbe is now buildable on FreeBSD.

There are also other available patches – herbe patches – available here.

From all of them I find Vertical Stacking patch the most interesting. We will also apply it.

% fetch https://patch-diff.githubusercontent.com/raw/dudik/herbe/pull/19.diff
% patch < 19.diff 
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/herbe.c b/herbe.c
|index 51d3990..8bfdbc1 100644
|--- a/herbe.c
|+++ b/herbe.c
--------------------------
Patching file herbe.c using Plan A...
Hunk #1 succeeded at 7.
Hunk #2 succeeded at 80.
Hunk #3 succeeded at 162.
Hunk #4 succeeded at 188.
Hunk #5 succeeded at 218.
Hunk #6 succeeded at 230.
done


Config

You can additionally patch herbe so it will be configurable by using ~/.Xresources or ~/.Xdefaults files. IMHO its so small and compiles in second that its not needed but if you would like to also apply it then its available here – Xresources – in the patches section.

I have chosen to configure it using the config.def.h file. Here are my values.

% cat config.def.h
static const char *background_color    = "#222222";
static const char *border_color        = "#666666";
static const char *font_color          = "#eeeeee";
static const char *font_pattern        = "Ubuntu Mono:size=10";
static const unsigned line_spacing     = 5;
static const unsigned int padding      = 15;

static const unsigned int width       = 550;
static const unsigned int border_size = 4;
static const unsigned int pos_x       = 15;
static const unsigned int pos_y       = 45;

enum corners { TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT };
enum corners corner = TOP_RIGHT;

static const unsigned int duration = 5; /* in seconds */

#define DISMISS_BUTTON Button1
#define ACTION_BUTTON Button3

Build

The build process could not be simpler. Just type make and you are done.

% make 
cp config.def.h config.h
cc herbe.c -Wall -Wextra -pedantic -I/usr/local/include -L/usr/local/lib -lX11 -lXft -I/usr/local/include/freetype2 -pthread -o herbe

% file -s herbe | tr ',' '\n'
herbe: ELF 64-bit LSB executable
 x86-64
 version 1 (FreeBSD)
 dynamically linked
 interpreter /libexec/ld-elf.so.1
 for FreeBSD 13.0 (1300139)
 FreeBSD-style
 with debug_info
 not stripped

% ./herbe 
Usage: ./herbe body

Test

I did not yet implemented herbe anywhere on my scripts so I will use this simple ‘mockup’ to show you what to expect.

% \
  herbe "Wifi connection 'wireless' is not connected." \
& herbe "Removable storage /dev/da0 automounted at /media/da0 with exFAT filesystem." \
&

Here is how it looks in real life X11 session.

As you can see it works very well and its ultra fast. Its also very light on system resources.

% ps aux | grep -e RSS -e herbe -e sshd
USER       PID  %CPU %MEM      VSZ     RSS TT  STAT STARTED        TIME COMMAND
vermaden 41909   0.0  0.1    19568    9128  3  S+   20:22       0:00.02 herbe Message.
root        38   0.0  0.1    20948    8340  -  Is   Thu23       0:00.00 /usr/sbin/sshd

As you can see its RAM usage is very little – as little as sshd daemon.

EOF

Valuable News – 2021/04/11

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX or BSD systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

UNIX

Running Tribblix on Digital Ocean.
https://ptribble.blogspot.com/2021/04/running-tribblix-on-digital-ocean.html

Multi Master Replication Solutions for PostgreSQL.
https://www.percona.com/blog/2020/06/09/multi-master-replication-solutions-for-postgresql/

Customizing FreeBSD Ports and Packages.
https://klarasystems.com/articles/customizing-freebsd-ports-and-packages/

FreeBSD DEFAULT_VERSIONS is Mechanism to Override Software Versions You Want to Use.
https://wiki.freebsd.org/Ports/DEFAULT_VERSIONS

Support for CPU Frequency and Temperature on FreeBSD Added to htop.
https://github.com/htop-dev/htop/pull/436

Install Graylog on FreeBSD.
https://www.youtube.com/watch?v=scnsp3fMHJY

VideoLAN libbluray Updated to 1.3.0 with Improvements for FreeBSD Support and Numerous Bug Fixed.
https://twitter.com/videolan/status/1379396750306328578

Meet bsddialog(1) – BSD Licensed dialog(1) Reimplementation.
https://gitlab.com/alfix/bsddialog

FreeBSD Ports Migration to git(1) and Its Impact on HardenedBSD.
https://hardenedbsd.org/article/shawn-webb/2021-04-06/freebsds-ports-migration-git-and-its-impact-hardenedbsd

FreeBSD Well Prepared for AMD EPYC 7003 Series Processors.
https://freebsdfoundation.org/news-and-events/latest-news/freebsd-well-prepared-for-amd-epyc-7003-series-processors/

Illumos Adds NVMe Hotplug Support.
https://github.com/illumos/illumos-gate/commit/ffb6483089015eb90be1f5e7fc2a96c9929546a6

BSD Weekly – Issue 63.
https://bsdweekly.com/issues/63

Mount Webdav Share with Rclone on FreeBSD.
https://blog.socruel.nu/freebsd/mount-webdav-with-rclone-on-freebsd.html

Discovering Bastille on FreeBSD.
https://www.youtube.com/watch?v=FHblWnMQS50

Windows Hosted x86_64 FreeBSD GCC Cross Compiler.
https://github.com/expnkx/Windows-Hosted-x86_64-freebsd-GCC-Cross-Compiler

Bit of XENIX History. [2014]
http://seefigure1.com/2014/04/15/xenixtime.html

Steam on FreeBSD.
https://euroquis.nl//freebsd/2021/04/06/steam-freebsd

Install Airsonic on FreeBSD.
https://danschmid.de/en/blog/install-airsonic-on-freebsd

Install NGINX on FreeBSD.
https://danschmid.de/en/blog/install-nginx-on-freebsd

FreeBSD Adds Support for kvmclock Timecounter.
https://reviews.freebsd.org/D29531

OpenZFS 2.1.0-rc2 Released with Bug Fixes.
https://www.phoronix.com/scan.php?page=news_item&px=OpenZFS-2.1.0-rc2

BSD Now 397 – Fresh BSD 2021.
https://www.bsdnow.tv/397

History of UTF-8 as Told by Rob Pike. [2003]
http://doc.cat-v.org/bell_labs/utf-8_history

UNIX Magic Poster by Gary Overcare.
https://archive.org/details/unix-magic-poster-gary-overcare-1

FreeBSD/arm64 Becoming TIER 1 in FreeBSD 13.
https://lists.freebsd.org/pipermail/freebsd-arm/2021-April/023602.html

UFS Boot Environments for ARM.
https://vermaden.wordpress.com/2021/04/05/ufs-boot-environments-for-arm/

State of Toolchains in NetBSD.
https://www.cambus.net/the-state-of-toolchains-in-netbsd/

Update on FreeBSD Foundation Investment in Linuxulator.
https://freebsdfoundation.org/blog/update-on-freebsd-foundation-investment-in-linuxulator/

Statement for NetBSD Foundation Position on GPLv3.
http://cvsweb.netbsd.org/bsdweb.cgi/src/external/gpl3/README?rev=1.1

In Other BSDs for 2021/04/10.
https://www.dragonflydigest.com/2021/04/10/25616.html

Firewall on FreeBSD.
https://danschmid.de/en/blog/firewall-on-freebsd

TwinCAT/BSD – Operating System for Industrial PCs.
https://www.youtube.com/watch?v=az9vSr1GxE4

Hardware

Engineers Upgrade Apple M1 Mac Mini with More Storage and RAM.
https://www.tomshardware.com/news/mac-m1-mod

Security Analysis of AMD Predictive Store Forwarding.
https://www.amd.com/system/files/documents/security-analysis-predictive-store-forwarding.pdf

ARMv9 and Corellium – Why We Chose ARM vs X86.
https://corellium.com/blog/armv9-and-corellium

AMD Rolls Out Patches to Disable Predictive Store Forwarding on ZEN 3 CPUs.
https://www.tomshardware.com/news/amd-linux-patches-disable-predictive-store-forwarding-zen-3-cpus

Screw It – I Will Host It Myself.
https://www.markozivanovic.com/screw-it-ill-host-it-myself/

ASUS PN51 Announced with AMD Ryzen 5000U Family CPUs.
https://www.fanlesstech.com/2021/04/asus-pn51-announced.html

Surprisingly Slow.
https://gregoryszorc.com/blog/2021/04/06/surprisingly-slow/

The vgpu_unlock Unlocks vGPU Functionality for Consumer Grade GPUs.
https://github.com/DualCoder/vgpu_unlock

Intel Videos Explain Basics of Modern CPU Architectures.
https://www.tomshardware.com/news/intel-videos-explain-cpu-architectures

Getting AMIGA A1200 Online – Part 1 – Adding Network Card.
https://lyonsden.net/getting-an-amiga-a1200-online-part-1-adding-a-network-card/

Getting AMIGA A1200 Online – Part 2 – Adding Amiga TCP/IP Stack.
https://lyonsden.net/getting-an-a1200-online-part-2-adding-an-amiga-tcp-ip-stack/

Getting AMIGA A1200 Online – Part 3 – Installing Amiga Web Browser.
https://lyonsden.net/getting-an-a1200-online-part-3-installing-an-amiga-web-browser/

Getting AMIGA A1200 Online – Part 4 – Installing Amiga Email Client.
https://lyonsden.net/getting-an-a1200-online-part-4-installing-an-amiga-email-client/

Best Network Switches 2021 – Add Ports/Speed/Versatility to Your Network.
https://www.tomshardware.com/best-picks/best-network-switches

Life

Leaked Mark Zuckerberg Phone Number Reveals He is on Signal.
https://www.indiatoday.in/technology/news/story/leaked-phone-number-of-mark-zuckerberg-reveals-he-is-on-signal-1787396-2021-04-05

Instagram Shares 79% of Your Personal Data with Third Parties.
https://cybernews.com/privacy/instagram-is-sharing-79-of-your-personal-data-with-third-parties/

Post Pandemic World – 34% of Remote Workers Would Rather Quit than Return to Office Work.
https://www.psychnewsdaily.com/a-third-of-wfh-employees-say-theyd-rather-quit-than-return-to-full-time-office-work/

Other

Signal Adds Payments Feature – With Privacy Focused MobileCoin Cryptocurrency.
https://www.wired.com/story/signal-mobilecoin-payments-messaging-cryptocurrency/

Lotus Esprit Turbo Challenge – AMIGA – Easy Mode.
https://www.youtube.com/watch?v=CXDz3uEIJOI

Number Sets in Math.
https://thinkzone.wlonk.com/Numbers/NumberSets.htm

uBlock Origin Works Best on Firefox.
https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox

EOF

UFS Boot Environments for ARM

Several days ago I introduced UFS Boot Environments that work great on AMD64 (or 64-bit PC if you prefer). I was interested it it will also work on less powerful devices that ZFS is not always the best idea – ARM based devices. After some testing I found out that after one simple modification the UFS Boot Environments work like a charm on ARM devices.

The Table of Contents is as follows.

  • ARM Testing
  • Setup UFS Boot Environments
  • Needed Fix to Make FreeBSD bootme Flags Work
  • Reboot into Other Boot Environment Test

There is not suitable TL;DR here – you will have to read it all or not at all this time πŸ™‚

ARM Testing

I currently do not own 64-bit ARM device … so I thought I will try the qemu(1) emulator and ready to download and use ARM images provided by the FreeBSD project.

First we will install needed packages and fetch the ARM64 (also known as aarch64) images.

host # pkg install -y qemu u-boot-qemu-arm64

host % fetch https://download.freebsd.org/ftp/releases/VM-IMAGES/13.0-RC4/aarch64/Latest/FreeBSD-13.0-RC4-arm64-aarch64.raw.xz

host % xz -d FreeBSD-13.0-RC4-arm64-aarch64.raw.xz

We will now increase the image size to add additional boot environment partition.

host % ls -lh FreeBSD-13.0-RC4-arm64-aarch64.raw 
-rw-r--r-- 1 vermaden vermaden 5.1G 2021-04-04 12:37 FreeBSD-13.0-RC4-arm64-aarch64.raw

host % truncate -s +9G FreeBSD-13.0-RC4-arm64-aarch64.raw

host % ls -lh FreeBSD-13.0-RC4-arm64-aarch64.raw
-rw-r--r-- 1 vermaden vermaden 15G 2021-04-04 12:38 FreeBSD-13.0-RC4-arm64-aarch64.raw

Using qemu(1) emulator we can boot using either UEFI or U-BOOT option. We will test both as some ARM devices use UEFI and some (like Raspberry Pi devices) use U-BOOT mode.

host % export VMDISK=FreeBSD-13.0-RC4-arm64-aarch64.raw

// UEFI
host % qemu-system-aarch64 \
         -m 4096M \
         -cpu cortex-a57 \
         -M virt \
         -bios edk2-aarch64-code.fd \
         -serial telnet::4444,server \
         -nographic \
         -drive if=none,file=${VMDISK},format=raw,id=hd0 \
         -device virtio-blk-device,drive=hd0 \
         -device virtio-net-device,netdev=net0 \
         -netdev user,id=net0

// U-BOOT
host % qemu-system-aarch64 \
         -m 4096M \
         -cpu cortex-a57 \
         -M virt \
         -bios /usr/local/share/u-boot/u-boot-qemu-arm64/u-boot.bin \
         -serial telnet::4444,server \
         -nographic \
         -drive if=none,file=${VMDISK},format=raw,id=hd0 \
         -device virtio-blk-device,drive=hd0 \
         -device virtio-net-device,netdev=net0 \
         -netdev user,id=net0

After starting the qemu(1) process it will display the following information.

(...)
QEMU 5.0.1 monitor - type 'help' for more information
(qemu) qemu-system-aarch64: -serial telnet::4444,server: info: QEMU waiting for connection on: disconnected:telnet::::4444,server

We can now use telnet(1) to connect to our serial console on emulated ARM64 system. We will add additional freebsd-ufs partition for our second boot environment.

host % telnet localhost 4444
(...)

login: root

ARM # pkg install -y lsblk

ARM # lsblk
DEVICE         MAJ:MIN SIZE TYPE                              LABEL MOUNT
vtbd0            0:62   14G GPT                                   - -
  vtbd0p1        0:63   33M efi                          gpt/efiesp /boot/efi
  vtbd0p2        0:64  1.0G freebsd-swap                 gpt/swapfs -
  vtbd0p3        0:65  4.0G freebsd-ufs                  ufs/rootfs /

ARM # gpart show
=>       3  10552344  vtbd0  GPT  (14G) [CORRUPT]
         3     66584      1  efi  (33M)
     66587   2097152      2  freebsd-swap  (1.0G)
   2163739   8388608      3  freebsd-ufs  (4.0G)

ARM # gpart recover vtbd0
vtbd0 recovered

ARM # gpart add -s 4G -t freebsd-ufs vtbd0
vtbd0p4 added

ARM # gpart show
=>       3  29426709  vtbd0  GPT  (14G)
         3     66584      1  efi  (33M)
     66587   2097152      2  freebsd-swap  (1.0G)
   2163739   8388608      3  freebsd-ufs  (4.0G)
  10552347   8388608      4  freebsd-ufs  (4.0G)
  18940955  10485757         - free -  (5.0G)

We will now make some manual preparations for ufsbe.sh to work.

For example the FreeBSD images come with GPT labels used in /etc/fstab file which are currently not supported by UFS Boot Environments so we will modify the /etc/fstab file to mount root filesystem from raw devices and partitions.

ARM # mkdir -p /ufsbe/3 /ufsbe/4

ARM # cat /etc/fstab
# Custom /etc/fstab for FreeBSD VM images
/dev/gpt/rootfs  /          ufs      rw  1 1
/dev/gpt/efiesp  /boot/efi  msdosfs  rw  2 2
/dev/gpt/swapfs  none       swap     sw  0 0

ARM # vi /etc/fstab

ARM # cat /etc/fstab
# Custom /etc/fstab for FreeBSD VM images
/dev/vtbd0p3     /          ufs      rw  1 1
/dev/vtbd0p4     /ufsbe/4   ufs      rw  1 1
/dev/gpt/efiesp  /boot/efi  msdosfs  rw  2 2
/dev/gpt/swapfs  none       swap     sw  0 0

ARM # newfs /dev/vtbd0p4
/dev/vtbd0p4: 4096.0MB (8388608 sectors) block size 32768, fragment size 4096
        using 7 cylinder groups of 625.22MB, 20007 blks, 80128 inodes.
super-block backups (for fsck_ffs -b #) at:
 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880

We now have second boot environment ready and /etc/fstab file modified to boot from raw devices instead of GPT labels. We will now reboot(8) to make these changes apply.

ARM # reboot

Setup UFS Boot Environments

We will not fetch the ufsbe.sh command and finish the setup process.

ARM # fetch https://raw.githubusercontent.com/vermaden/ufsbe/main/ufsbe.sh

ARM # chmod +x ./ufsbe.sh

ARM # ./ufsbe.sh

NOPE: did not found boot environment setup with 'ufsbe' label

INFO: setup each boot environment partition with appropriate label

HELP: list all 'freebsd-ufs' partitions type:

  # gpart show -p | grep freebsd-ufs
      2098216   33554432  ada0p3  freebsd-ufs  [bootme]  (16G)
     35652648   33554432  ada0p4  freebsd-ufs  (16G)
     69207080   33554432  ada0p5  freebsd-ufs  (16G)

HELP: to setup partitions 3/4/5 as boot environments type:

  # gpart modify -i 3 -l ufsbe/3 ada0
  # gpart modify -i 4 -l ufsbe/4 ada0
  # gpart modify -i 5 -l ufsbe/5 ada0

ARM # gpart show
=>       3  29426709  vtbd0  GPT  (14G)
         3     66584      1  efi  (33M)
     66587   2097152      2  freebsd-swap  (1.0G)
   2163739   8388608      3  freebsd-ufs  (4.0G)
  10552347   8388608      4  freebsd-ufs  (4.0G)
  18940955  10485757         - free -  (5.0G)

ARM # gpart modify -i 3 -l ufsbe/3 vtbd0
vtbd0p3 modified

ARM # gpart modify -i 4 -l ufsbe/4 vtbd0
vtbd0p4 modified

ARM # ./ufsbe.sh 
INFO: flag 'bootme' successfully set on / filesystem
usage:
  ufsbe.sh (l)ist
  ufsbe.sh (a)ctivate
  ufsbe.sh (s)ync

The UFS Boot Environments are now properly deployed on this ARM64 test system.

Needed Fix to Make FreeBSD bootme Flags Work

At the first try I was not able to use UFS Boot Environments as the bootme flag was ignored.

I then submitted a FreeBSD bug – 254764 – GPT ‘bootme’ flag is not respected on AARCH64 – to make sure I am doing everything well on my side. As it turns out the bootme flag is a FreeBSD specific extension and nobody else uses it. The needed fix is to copy /boot/gptboot.efi in place of bootaa64.efi file.

Lets now make that fix.

ARM # cp /boot/gptboot.efi /boot/efi/EFI/BOOT/bootaa64.efi

Reboot into Other Boot Environment Test

We will now synchronize boot environments 3 and 4 and then reboot into the 4 boot environments.

ARM # ./ufsbe.sh list
PROVIDER LABEL        ACTIVE
vtbd0p3  ufsbe/3      NR  
vtbd0p4  ufsbe/4      -  

ARM # ./ufsbe.sh sync 3 4
INFO: syncing '3' (source) => '4' (target) boot environments ...
INFO: boot environments '3' (source) => '4' (target) synced

ARM # ./ufsbe.sh activate 4
INFO: boot environment '4' now activated

ARM # reboot

After the reboot the currently active boot environment is 4. It means that UFS Boot Environments work properly on ARM devices.

ARM # ./ufsbe.sh list
PROVIDER LABEL        ACTIVE
vtbd0p3  ufsbe/3      -   
vtbd0p4  ufsbe/4      NR  

ARM # df -h
Filesystem         Size    Used   Avail Capacity  Mounted on
/dev/vtbd0p4       3.9G    2.6G    935M    74%    /
devfs              1.0K    1.0K      0B   100%    /dev
/dev/vtbd0p3       3.9G    2.6G    932M    74%    /ufsbe/3
/dev/gpt/efiesp     32M    1.3M     31M     4%    /boot/efi

I have tested both U-BOOT and UEFI boot modes and they both allow to use UFS Boot Environments.

EOF

Valuable News – 2021/04/05

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX or BSD systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

UNIX

Wireguard Bounces Off FreeBSD – For Now.
https://lwn.net/SubscriberLink/850098/3daef578513bff15/

Expanding FreeBSD Root Filesystem (UFS).
https://fluca1978.github.io/2021/02/11/FreeBSDExpandingRootFilesystem.html

OpenZFS 2.1-rc1 Released with dRAID.
https://www.phoronix.com/scan.php?page=news_item&px=OpenZFS-2.1-rc1-Released

FreeBSD Reworks sh(1) to Autocomplete Commands.
https://cgit.freebsd.org/src/commit/?id=b315a729

Observations About FreeBSD/AIO.
https://wiki.postgresql.org/wiki/FreeBSD/AIO

Compiling MariaDB from Source on FreeBSD.
https://dev.to/darkain/compiling-mariadb-from-source-on-freebsd-5ank

FreeBSD 13.0-RC4 Now Available.
https://lists.freebsd.org/pipermail/freebsd-stable/2021-March/093374.html

FreeBSD at Google Summer of Code.
https://summerofcode.withgoogle.com/organizations/4733549204209664/

The pkgsrc 2021Q1 Branch Announced.
https://mail-index.netbsd.org/pkgsrc-users/2021/03/29/msg033502.html

New XigmaNAS 11.4.0.4.8282 Available.
https://sourceforge.net/projects/xigmanas/files/XigmaNAS-11.4.0.4/11.4.0.4.8282/

FreeBSD 13.0-RC4 Released with POWER Fixes and Other Bugs Addressed.
https://www.phoronix.com/scan.php?page=news_item&px=FreeBSD-13.0-RC4-Released

NetBSD GSoC Reports: Make system(3)/popen(3)/popenve(3) Use posix_spawn(3).
https://blog.netbsd.org/tnf/entry/gsoc_reports_make_system_31

Bootstrap OPNsense Plugin Development Environment in Vagrant.
https://github.com/punktDe/vagrant-opnsense

TrueNAS Core Active Directory Integration in 10 Minutes.
https://sheridancomputers.co.uk/blog/view/videos/truenas-core-active-directory-integration-in-10-minutes

BSD Weekly – Issue 62.
https://bsdweekly.com/issues/62

GSoC Reports – Benchmarking NetBSD – 3rd Evaluation Report.
https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_third

Open Source Licenses in 2021 – Trends and Predictions.
https://resources.whitesourcesoftware.com/blog-whitesource/open-source-licenses-trends-and-predictions

HardenedBSD 2021/03 Status Report.
https://hardenedbsd.org/article/shawn-webb/2021-03-31/hardenedbsd-march-2021-status-report

BSD Now 396 – License to Thrill.
https://www.bsdnow.tv/396

Manjaro Migrates to FreeBSD as New Base. [April Fool Joke]
https://www.youtube.com/watch?v=RTTVNO56LNE

Xinuos Sues IBM and Red Hat for Antitrust Violations and Copyright Infringement.
https://www.xinuos.com/xinuos-sues-ibm-and-red-hat/

Colorized Output for FreeBSD CLI Programs.
https://gist.github.com/Linux-BSD/e84e309ee4a4966bc81d97a5b75eb282

Thunar from XFCE Gets Safely Remove Drive Option.
https://twitter.com/XfceNation/status/1377531183697952769
https://gitlab.xfce.org/xfce/thunar/-/issues/153

FreeBSD Utility ufsbe(8) to Manage Boot Environments on UFS Filesystems.
https://github.com/vermaden/ufsbe

April Fool Pranks in Sun Microsystems Over the Years.
https://tech.gaeatimes.com/index.php/archive/april-fool-pranks-in-sun-microsystems-over-the-years/

OpenBSD Adds Coordinated Mars Time (MTC) – Mars Equivalent of Earth Universal Time (UTC).
https://marc.info/?l=openbsd-cvs&m=161730046519995&w=2

The tmux Lets You Select/Copy Text with Keyboard.
https://ianthehenry.com/posts/tmux-psa/

Turing Award Goes to Jeffrey Ullman and Alfred Aho (Man from A in awk(1) Name).
https://www.theregister.com/2021/04/01/turing_award/

Release Notes for OmniOS v11 r151036.
https://github.com/omniosorg/omnios-build/blob/r151036/doc/ReleaseNotes.md

Upgrading GhostBSD to 13-STABLE.
https://forums.ghostbsd.org/viewtopic.php?f=54&t=1921

In Other BSDs for 2021/04/03.
https://www.dragonflydigest.com/2021/04/03/25604.html

FreeBSD Heads Up – mergemaster(8) Deprecated – Use etcupdate(8) Instead.
https://forums.freebsd.org/threads/heads-up-deprecation-of-mergemaster.79641/
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=252417
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=252132

Hikari 2.2.3 Wayland Compositor 2.2.3 for FreeBSD and Linux is Released.
https://hikari.acmelabs.space/

FreeBSD 13.0-RC5 Now Available.
https://lists.freebsd.org/pipermail/freebsd-stable/2021-April/093429.html

FreeBSD 13.0-RC5 Released Due to Lingering Bugs.
https://www.phoronix.com/scan.php?page=news_item&px=FreeBSD-13.0-RC5

XigmaNAS 12.2.0.4.8291 Available.
https://sourceforge.net/projects/xigmanas/files/XigmaNAS-12.2.0.4/12.2.0.4.8291/

Installing Tribblix in Bhyve on Tribblix.
https://ptribble.blogspot.com/2021/04/installing-tribblix-in-bhyve-on-tribblix.html

I got GNU Modula-2 Compiler Working on OpenBSD.
https://briancallahan.net/blog/20210403.html

Hardware

ARMv9 Introduced at ARM Vision Day 2021.
https://www.servethehome.com/armv9-introduced-at-arm-vision-day-2021/

Akasa Maze Themed Raspberry Pi 4 Case.
https://www.tomshardware.com/news/akasa-raspberry-pi-4-akasa-maze-pro

AMD Ryzen Embedded V2000 COM Express Module Supports up to 1TB NVMe SSD and 64GB DDR4.
https://www.cnx-software.com/2021/04/01/ryzen-embedded-v2000-com-express-module-supports-up-to-1tb-nvme-ssd-64gb-ddr4/

AMD EPYC 7763 Review.
https://www.servethehome.com/amd-epyc-7763-review-top-for-this-generation/

MINISFORUM DeskMini HM50 with AMD Ryzen 5 4500U and Triple 4K Display and 2.5GbE Ethernet.
https://www.cnx-software.com/2021/04/02/amd-ryzen-5-4500u-mini-pc-offers-triple-4k-display-support-2-5gbe/

Best Way to Learn – Build Full Home Laboratory.
https://cybernews.com/editorial/best-way-to-learn-building-a-full-home-laboratory-of-course/

China First 7nm GPU Nears Mass Production.
https://www.tomshardware.com/news/china-first-7nm-gpu-heads-to-production

Life

Google Collects 20 Times More Telemetry from Android than Apple from iOS.
https://therecord.media/google-collects-20-times-more-telemetry-from-android-devices-than-apple-from-ios/

Splinternet: End of Internet as We Know It.
https://cybernews.com/editorial/the-splinternet-the-end-of-the-internet-as-we-know-it/

Astonishing Math Knowledge of Honeybees.
https://medium.com/however-mathematics/the-astonishing-math-knowledge-of-honeybees-d17c95491c66

Other

Is Canada Most Expensive Wireless Market in World?
http://research.rewheel.fi/downloads/Canada_most_expensive_wireless_market_world_PUBLIC_VERSION.pdf

Font Size is Useless – Let’s Fix It.
https://tonsky.me/blog/font-size/

QRSAY – CLI QR Code Generator for MS-DOS.
https://github.com/gonzoua/DOS

Terms of Service – Did Not Read.
https://tosdr.org/en/frontpage

EOF

UFS Boot Environments

Yes you read it correctly. The fabulous ZFS Boot Environments – more about them here – https://is.gd/BECTL – if you are not familiar with this concept – are now also possible on UFS filesystems on FreeBSD. Of course in little different form and without using snapshots and clones but the idea and solution remains. You can now have bootable backups of your system before major changes and/or upgrades. This solution does not use UFS snapshots. All bootable UFS variants are supported with and without Soft Updates or Soft Updates Journaling. The idea behind UFS Boot Environments lays in several additional root (/) partitions that will be used as alternate boot environments.

If you are interested in ARM more then in X86 then also check UFS Boot Environments for ARM article.

Concept is similar to Solaris Live Upgrade mechanism which used lucreate/luupgrade/lustatus commands and also to AIX Alternate Disk Cloning and Install with alt_disk_copy/alt_disk_install commands.

In this article I will show you how to setup new FreeBSD system with 3 of such partitions. In my honest opinion its more then enough for most purposes. On my desktop/workstation I have more then 1000 packages installed. With FreeBSD Base System it takes about 11 GB of space with ZFS compression and 15 GB without it. Thus I propose 16 GB partitions. Your needs may of course be different. You may as well create 4 GB or 64 GB partitions.

The UFS Boot Environments would not exist without the inspiration from FreeBSD Upgrade Procedure Using GPT blog post by Mariusz Zaborski (also known as oshogbo) who describes the concept of bootme flags for GPT partitions. That is the heart of this solution. By selecting activate for boot environment the bootme flag is removed from all existing boot environments and set for the new desired one. The ufsbe(8) tool was tested on FreeBSD 12.x and 13.x currently.

FreeBSD Install for UFS Boot Environments

Generally only GPT partitioning is needed to use UFS Boot Environments. Below I will show example install process with 3 root partitions of 16 GB each.

In the FreeBSD Installer select Install.

The select Auto (UFS) option.

Then use Entire Disk option.

Then select GPT partition table.

The FreeBSD Installer will propose the following solution.

Change it into 3 partitions 16 GB each to make it look like that one below and hit Finish.

Then Commit your choice.

… and then the install process will continue as usual.

Besides these option you may select whatever you choose in the install process.

After the system reboots its gpart(8) will look like that one below.

root@fbsd13:~ # gpart show
=>       40  134217648  ada0  GPT  (64G)
         40       1024     1  freebsd-boot  (512K)
       1064    2097152     2  freebsd-swap  (1.0G)
    2098216   33554432     3  freebsd-ufs  (16G)
   35652648   33554432     4  freebsd-ufs  (16G)
   69207080   33554432     5  freebsd-ufs  (16G)
  102761512   31456176        - free -  (15G)

Now fetch(1) the ufsbe.sh script from its GitHub page.

# fetch https://raw.githubusercontent.com/vermaden/ufsbe/main/ufsbe.sh
# chmod +x ./ufsbe.sh
# ./ufsbe.sh

NOPE: did not found boot environment setup with 'ufsbe' label

INFO: setup each boot environment partition with appropriate label

HELP: list all 'freebsd-ufs' partitions type:

  # gpart show -p | grep freebsd-ufs
      2098216   33554432  ada0p3  freebsd-ufs  [bootme]  (16G)
     35652648   33554432  ada0p4  freebsd-ufs  (16G)
     69207080   33554432  ada0p5  freebsd-ufs  (16G)

HELP: to setup partitions 3/4/5 as boot environments type:

  # gpart modify -i 3 -l ufsbe/3 ada0
  # gpart modify -i 4 -l ufsbe/4 ada0
  # gpart modify -i 5 -l ufsbe/5 ada0

It will welcome you with information about needed setup steps.

We will now make these steps marking all boot environment partitions with appropriate ufsbe labels.

# gpart modify -i 3 -l ufsbe/3 ada0
ada0p3 modified
# gpart modify -i 4 -l ufsbe/4 ada0
ada0p4 modified
# gpart modify -i 5 -l ufsbe/5 ada0
ada0p5 modified

Now ufsbe.sh will setup bootme flag for currently used root (/) partition.

# ./ufsbe.sh
INFO: flag 'bootme' successfully set on / filesystem
usage:
  ufsbe.sh list
  ufsbe.sh activate
  ufsbe.sh sync  

Setup is complete.

All three root partitions have the ufsbe label. To make it more simple the /dev/ada0p3 device gets the ufsbe/3 label and /dev/ada0p4 device gets the ufsbe/4 … you see the pattern.

# gpart show -p -l
=>       40  134217648    ada0  GPT  (64G)
         40       1024  ada0p1  (null)  (512K)
       1064    2097152  ada0p2  swap  (1.0G)
    2098216   33554432  ada0p3  ufsbe/3  [bootme]  (16G)
   35652648   33554432  ada0p4  ufsbe/4  (16G)
   69207080   33554432  ada0p5  ufsbe/5  (16G)
  102761512   31456176          - free -  (15G)

You can now use our UFS Boot Environments on this system.

Using UFS Boot Environments

Lets list our boot environments with list command. The short ‘l‘ option also works.

# ./ufsbe.sh list
PROVIDER LABEL        ACTIVE
ada0p3   ufsbe/3      NR  
ada0p4   ufsbe/4      -   
ada0p5   ufsbe/5      -  

Its output is similar to mine ZFS Boot Environments tools beadm(8). The N flag shows that this is the boot environments we are using NOW. The R flag shows which one we will use after the reboot(8).

Currently only the 3 boot environments is populated (by FreeBSD Installer that is). The 4 and 5 boot environments are empty filesystems.

You can either extract your own FreeBSD version there with base.txz and kernel.txz or use the sync option of ufsbe.sh which will use rsync(1) for the process. Below is an example of syncing boot environment 3 (the one we installed) with currently empty boot environment 4.

# ./ufsbe.sh sync 3 4
NOPE: rsync(1) is not available in ${PATH}
INFO: install 'net/rsync' package or port

# pkg install net/rsync

# ./ufsbe.sh sync 3 4
INFO: syncing '3' (source) => '4' (target) boot environments ...
INFO: boot environments '3' (source) => '4' (target) synced

You can now see that boot environment 3 and 4 have same size.

# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p3     15G    1.3G     13G     9%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4     15G    1.2G     13G     9%    /ufsbe/4
/dev/ada0p5     15G     32M     14G     0%    /ufsbe/5

If we would like to activate an empty boot environment 5 then ufsbe.sh will not let us do that because that will make our system unbootable. Of course is quote fast/naive check but at least makes sure some files exists on the soon to be active boot environment. Currently these files are checked but this list may be increased in the future:

  • /boot/kernel/kernel
  • /boot/loader.conf
  • /etc/rc.conf
  • /rescue/ls
  • /bin/ls
  • /sbin/fsck
  • /usr/bin/su
  • /usr/sbin/chroot
  • /lib/libc.so.*
  • /usr/lib/libpam.so.*

Below this ‘protection’ in action.

# ./ufsbe.sh activate 5
NOPE: boot environment '5' is not complete
INFO: critical file '/ufsbe/5/boot/kernel/kernel' is missing
INFO: use 'sync' option or copy file manually

The boot environment 4 activation process works as desired as we populated it with files from boot environment 3 first.

# ./ufsbe.sh activate 4
INFO: boot environment '4' now activated

Same as with beadm(8) the ufsbe.sh also checks if boot environment is already activated.

# ./ufsbe.sh activate 4
INFO: boot environment '4' is already active

The list of our boot environments looks like that now.

# ./ufsbe.sh list
PROVIDER LABEL        ACTIVE
ada0p3   ufsbe/3      N   
ada0p4   ufsbe/4      R   
ada0p5   ufsbe/5      -   

… and that is how output of gpart(8) looks like.

# gpart show -p -l
=>       40  134217648    ada0  GPT  (64G)
         40       1024  ada0p1  (null)  (512K)
       1064    2097152  ada0p2  swap  (1.0G)
    2098216   33554432  ada0p3  ufsbe/3  (16G)
   35652648   33554432  ada0p4  ufsbe/4  [bootme]  (16G)
   69207080   33554432  ada0p5  ufsbe/5  (16G)
  102761512   31456176          - free -  (15G)

We will now reboot into the activated boot environment 4.

# shutdown -r now

After the reboot(8) we see that we are now booted from the 4 boot environment.

# ./ufsbe.sh list
PROVIDER LABEL        ACTIVE
ada0p3   ufsbe/3      -   
ada0p4   ufsbe/4      NR  
ada0p5   ufsbe/5      -   

Closing Notes

Keep in mind that this is only first 0.1 version of ufsbe.sh. Do not use it in production or important systems and make sure you have restorable backups. Like with beadm(8) in the past I plan to improve it with more useful options and also add it to the Ports tree in the future.

Feel free to share your thoughts about this tool.

I must wait till midnight to make it shown as posted on 2nd of April because if I would post it on 1st of April it would be taken as April Fool Joke which is definitely not.

Enjoy.

Updating or Upgrading

You may use the Upgrade FreeBSD with ZFS Boot Environments method with these UFS Boot Environments as well but now you will chroot(8) into /ufsbe/4 for example.

EOF

Valuable News – 2021/03/29

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX or BSD systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

UNIX

FreeNAS Compression Tale.
http://storagegaga.com/a-freenas-compression-tale/

Really Leaving Linux Desktop Behind.
https://catfox.life/2021/03/21/really-leaving-the-linux-desktop-behind/

Managing Multiple PostgreSQL Instances on FreeBSD.
https://fluca1978.github.io/2021/03/22/PostgreSQLFreeBSDMultiInstance.html

Wireguard Controversy Statement from FreeBSD Core Team.
https://lists.freebsd.org/pipermail/freebsd-hackers/2021-March/057102.html

Plan 9 from Bell Labs in Cyberspace.
https://www.bell-labs.com/institute/blog/plan-9-bell-labs-cyberspace/

FreeBSD 13.0 Supports ARM64/aarch64 with freebsd-update(8) Binary Updates.
https://twitter.com/ed_maste/status/1374542204505632770

Build OpenSSL on OmniOS.
https://nanxiao.me/en/build-openssl-on-omnios/

FreeBSD 13.0-RELEASE Schedule Update.
https://lists.freebsd.org/pipermail/freebsd-stable/2021-March/093357.html

Next Level – FreeBSD on ARM64 in Cloud.
https://klarasystems.com/articles/the-next-level-freebsd-on-arm64-in-the-cloud/

Cheap Wireless Keyboard for FreeBSD.
https://www.youtube.com/watch?v=dZtB003eGKI

Script that Automates ZFS Datasets Backup to AWS S3.
https://github.com/agurk/zfs-to-aws

BSD Now 395 – Tracing ARM History.
https://www.bsdnow.tv/395

Release Notes for OmniOS v11 r151036.
https://github.com/omniosorg/omnios-build/blob/r151036/doc/ReleaseNotes.md

SQLite is Not a Toy Database.
https://antonz.org/sqlite-is-not-a-toy-database/

New Bareos Plugin Enables File Based Qumulo Backups.
https://www.bareos.com/new-bareos-plugin-enables-file-based-qumulo-backups/

Vinum Deprecation for FreeBSD 14.
https://lists.freebsd.org/pipermail/freebsd-stable/2021-March/093358.html

UDisks2 Service Implementation for OpenBSD as sysutils/openbsdisks2 Port.
https://marc.info/?l=openbsd-ports&m=161683379228293&w=2

In Other BSDs for 2021/03/27.
https://www.dragonflydigest.com/2021/03/27/25585.html

Buffer Overruns/License Violations/Bad Code – FreeBSD 13 Close Call.
https://arstechnica.com/gadgets/2021/03/buffer-overruns-license-violations-and-bad-code-freebsd-13s-close-call/

FreeBSD Core Team Statement on FreeBSD Development Processes.
https://lists.freebsd.org/pipermail/freebsd-hackers/2021-March/057127.html

Backups with Plakar.
https://poolp.org/posts/2021-03-26/march-2021-backups-with-plakar/

NetBSD Bounties for xhci Features: Scatter-Gather and Suspend/Resume.
https://mail-index.netbsd.org/tech-kern/2021/03/25/msg027170.html

Port of Duke Nukem 3D to SerenityOS.
https://www.youtube.com/watch?v=xy1uynuUyPo

KDE on FreeBSD 2021 O2.
https://euroquis.nl/kde/2021/03/26/freebsd2021o2.html

Interview with Abhinav Upadhyay – NetBSD Contributor.
https://www.cyberciti.biz/interview/interview-with-abhinav-upadhyay-netbsd-contributor-and-machine-learning-software-developer/

NetBSD Hitting Donation Milestone – 2020 Financial Report.
https://blog.netbsd.org/tnf/entry/hitting_donation_milestone_financial_report

Hardware

AMIGA Powered VR.
https://twitter.com/amigamagazine/status/1374093036985196552/

Bootstrapping AMIGA Without Bootable Floppy.
https://www.rvalles.net/bootstrapping-an-amiga-without-a-bootable-amiga-floppy.html

How Does Fanless Cooling Work?
https://www.onlogic.com/company/io-hub/how-does-fanless-cooling-work/

Axiomtek Introduces Fanless Palm Sized eBOX560-52R-FL IPC.
https://www.techpowerup.com/280189/axiomtek-introduces-palm-sized-and-fanless-ebox560-52r-fl-ipc

How Tech War is Driving US and EU Together.
https://geopoliticalfutures.com/how-the-tech-war-is-driving-the-us-and-eu-together/

Minisforum AMD PC with Ryzen 5 3450U and Radeon Vega 8.
https://www.tomshardware.com/news/minisforum-um340-upgraded-sff

Other

Fallout 2 – Mutants Rising – Game Sized Total Conversion Mod.
https://nma-fallout.com/threads/mutants-rising.220268/

Little Things That Made AMIGA Great.
https://datagubbe.se/ltmag/

Demoscene AMIGA Years – Volume 1.
https://www.editions64k.fr/

EOF