Today in #FreeSoftwareAdvent it's lynx(1). Which is amusing because it's been scheduled for today on my calendar since the beginning of the month, but @npub198t8...hasj chose to share links(1) today as well, for many of the same reasons. 😆 It's been around for decades—I used it to browse gopherspace (and maybe WAIS?) in the 90s via a 1200 baud dial-up connection to a shell account and later the nascent WWW when it arrived. Sadly, ClownFlare, Google, and anti-AI-bot/scraper tech has made many formerly-accessible-with-lynx sites now inaccessible, some blocking by User-Agent, some blocking due to the lack of JavaScript support. But it has the right amount of usability and friction, so I can use it from my command-line-only writer-deck netbook to do a little research or read some HTML documentation, without getting sucked into the modern web. My custom configuration puts it in Advanced mode (no help-bar at the bottom), specifies vi-key-bindings, a custom color-scheme, uses links-and-form-fields-are-numbered making it easy to jump to them, and text-fields-require-activation so I don't get stuck in text input boxes when using j/k to scroll up/down in the document. I also have a couple shell wrapper-functions to invoke lynx on particular URLs (Wikipedia, dictionary/thesaurus/rhyming resources, web search, etc) with the CLI arguments filled in. I also have mutt configured to show text/html messages in lynx (either using `lynx -dump` and the internal pager, or using `m` from the attachments menu to view it interactively)
Today in #FreeSoftwareAdvent it's the venerable ssh(1)/sshd(8) While I grew up in an age where telnet(1) was my only option, the ssh folks made it a pretty drop-in replacement for the sorts of things I did with telnet, so switching was easy. With the exception of when I'm rebooting or our ISP is having issues, I almost always have at least one SSH connection open and likely more than one connection to other hosts. Even in the "security" of our LAN in the house, I still SSH between machines rather than use unencrypted connections for transfer. I love being able to run things remotely and use them locally, such as $ ssh me@remote dmesg | xsel -ib to put the remote machine's dmesg output on my system clipboard or $ tar czvf - /path/to/data | ssh me@remote 'cd /destination/path ; tar xzf -' to transfer a directory tree to a remote machine. It generally has sensible defaults, allows me to force key-based authentication rather than username+password auth. It allows me to limit $DAYJOB customers to SFTP-only access within their designated chroot directories, insulating them from each other. I use it to tunnel into work and forward my RDP VM's screen so I can access it locally with rdesktop(1) So many delightful little uses. Definitely worth reading @npub13n40...3h2h's SSH book to learn more:
TIL: $HOSTALIASES in FreeBSD Apparently you can set the $HOSTALIASES environment variable in FreeBSD (and maybe some Linuxen? but not OpenBSD AFAICT) to point to an alternate hosts file (instead of the default /etc/hosts) for re-mapping particular hosts. This would let you do something like $ HOSTALIASES=$HOME/hosts.txt myprog and any name-resolution that myprog(1) does will first consult the ~/hosts.txt file.
Today in #FreeSoftwareAdvent, today it's OpenSMTPD¹. In the past I've tried to set up Sendmail, Postfix, Exim, and qmail at various junctures, but found them all unwieldy in their configuration syntax. Macros and compiling them, or digging through dozens of config files for relevant settings. Lots of "here are thousands of settings, but don't change them unless you really know what you're doing." It drove me a bit crazy. Then OpenBSD folks created OpenSMTPD. The configuration syntax was sensible and simple. It didn't try to do everything, just adequate SMTP serving with some privsep. It was easy to point it at certificates that acme-client(1) obtains for me via httpd(8) interactions scheduled in cron(8), all within the base system. It's the MTA with OpenBSD's fingerprints of simplicity & security all over it. ⸻ ¹
Today in #FreeSoftwareAdvent, I want to appreciate OfflineIMAP/mbsync. Both have served me well for bringing a remote IMAP mailbox locally and keeping it in sync across multiple machines, allowing me to mow through mail even when offline, and then have reasonable confidence that everything will just sync back up when I go online again.
Today in #FreeSoftwareAdvent it's ZFS. It gives me • all in one volume management (no volume-groups and logical volumes and manually resizing partitions on those logical volumes with a dozen different commands, no playing the "oof, need more space on partition A and have too much free space on partition B, back up all the files, nuke both, shuffle partition-sizes/locations, restore the files" dance) • transparent file compression • transparent volume encryption • fast and effectively free snapshots and clones (you start paying the cost if they diverge or deleting files that remain in a snapshot, but that's to be expected) • same-disk redundancy with copies=2 to help prevent against bitrot, and multi-disk redundancy with effectively zero effort • the CoW means no need for fsck(8) horribly slowing my boots or finding orphaned fragments of files and shunting them into a lost+found/ directory (my biggest frustration with OpenBSD's FFS2) in the event of an abrupt power loss • efficient send/receive (beats rsync hands down in terms of speed) • fine-grained quota/reservation control • utilities make scripting easy with output-formatting options • cross-OS support in a way that very few other filesystems provide (other than FAT 😆) I'm sure there are additional reasons that didn't percolate to the top of my brain, but it's just so much more pleasant than any other disk management I've done on any OS.