Happiness comes out of contentment, and contentment always comes out of service.
--Harbhajan Singh YogiThere is no easy walk to freedom anywhere, and many of us will have to pass through the valley of the shadow of death again and again before we reach the mountaintop of our desires.
--Nelson MandelaA small part of humanity has ruthlessly exploited nature. But the entire humanity is bearing the cost of it, especially the inhabitants of the Global South. The selfishness of a few will lead the world into darkness, not just for themselves but for the entire world.
--Narendra ModiThere are no happy endings in history, only crisis points that pass.
--Isaac Asimov
My download area is accessible via HTTPS and HTTP at ftp.sdaoden.eu. It provides -latest symbolic links, for example s-web42-latest.tar.gz.asc.
∞ git(1) repositories are hosted via HTTPS and HTTP, they can be cloned via https://git.sdaoden.eu/scm/PROJECT.git, and be browsed at git.sdaoden.eu/browse after authentication: if the browser does not show user and password, "cancel" the request: this should load a page that reveals them.
Most projects are mirrored for free under my account at ∞ sdaoden@∞ SourceForge.net, at ∞ sdaoden@∞ Github.com, and some are also available under the nice and clean interface of ∞ repo.or.cz — thank you!
sdaoden.eu uses the ∞ GNU Mailman mailing-list manager, so users can manage their settings either via web browser by going to lists.sdaoden.eu, or by sending a mail with only the content help to LISTNAME-request@lists.sdaoden.eu. A receive-only very low-volume announcement list covering all my projects is S-announce at lists dot sdaoden dot eu.
I maintain a port collection for ∞ Crux-Linux with a few additional little things.
This server mirrors ∞ The Unix Heritage Society! It currently offers only HTTP browsing for the Unix Archive, though.
[master,stable/{stable,latest},release/{stable,latest},(timeline),(unix-mail),(bsd-Mail),(next)]
[master,stable/*,release/*]
are posted to
s-mailx-commit@
S-nail (later S-mailx) provides a simple and friendly environment for sending and receiving mail. It is intended to provide the functionality of the POSIX ∞ mailx(1) (∞ Wikipedia) command, is MIME capable, and optionally offers extensions for line editing, S/MIME, SMTP and POP3, among others. Users are given tools for email appraisal and management, as well as increasingly powerful, reliable scripting capabilities.
Packages or recipes exist, sometimes as a core package, and sometimes under names like nail, mail, or mailx, for ∞ Alpine Linux, ∞ archlinux, ∞ Crux, ∞ Debian (going for Ubuntu, Devuan, and more), ∞ Fedora (going for EPEL, CentOS), ∞ FreeBSD, ∞ Gentoo, macOS via ∞ Homebrew, ∞ KaOS, macOS via ∞ MacPorts, ∞ mageia, ∞ NetBSD, ∞ OpenBSD (cheesy maintainer), ∞ OpenEmbedded, ∞ openmamba, ∞ OSUKISS, ∞ PLD Linux, ∞ Slackware, ∞ T2 SDE, ∞ The Void (Linux) distribution, as well as ∞ Windriver Linux. Then there was Gavin, the man from the green island ∞ AUR (s-nail-git). I am happy and prowd that it is included in the ∞ The “Fossies” Software Archive that sails so close to the wind! The full list and the actualities of the packages can be queried via ∞ Repology.org (s-nail).
There are no prerequisites but a normal Unix environment (make(1), an ISO C89 C compiler etc.) and it is also possible to work directly with a repository checkout. The repository layout has been extended after release v14.8.10, and is documented in the projects README file. Users which are only interested in stable changes, but which do not want to wait for releases to gain, e.g., bugfix commits, should probably track only the [stable/stable] branch. Users which also accept backward incompatible changes can track [master], it will eventually be used to create new major or minor releases. To clone the entire repository and locally select what you want, do
$ git clone https://git.sdaoden.eu/scm/s-nail.git $ cd s-nail $ git checkout master $ make CONFIG=MAXIMAL tangerine
It is possible to save a quite a bit of disk space. With a newer ∞ git(1) you can say
$ git clone --single-branch -b stable/stable \ https://git.sdaoden.eu/scm/s-nail.git
But even otherwise you can be selective:
$ mkdir s-nail.git $ cd s-nail.git $ git init $ git remote add origin -t stable/stable -t 'release/*' -t timeline \ https://git.sdaoden.eu/scm/s-nail.git $ git fetch -v
[master]
A port of Colin Percival's bsdiff/bspatch that is part of FreeBSD since shortly after Y2K to a library. It was modified to allow either 64-bit or 32-bit limits (the latter almost halves memory overhead), and allows per-invocation adjustments of the "magic window" that (heavily) influences patch size, and more. It is very small and meant to be embedded in different projects, please see its lib/README for more.
S-roff
<> Manual for macro package
and preprocessormdocmx(7) extends the mdoc(7) UNIX manual page markup language with (interactive) references, allowing it to create anchors and table of contents (and potentially an index). For this it defines a single new multiplexer command: .Mx. Installations without mdocmx(7) support continue to work normally, the request is skipped, the documents will render as usual.
How does it work?
Non-multipass troff(1) implementations are not capable to generate forward references to anchors not yet defined, therefore the preprocessor mdocmx(1), implemented in portable sh(1) and awk(1), is necessary. A nice property of mdocmx(7) is that it “recognizes” its state, therefore preprocessed manuals can also be distributed, as they are normal mdoc(7) documents, making an installed preprocessor superfluous.
For output devices like HTML or PDF mdocmx(7) will use the corresponding and well-known support troff(1) macro packages to generate anchor and reference information. For terminal (typewriter-like) devices ∞ groff(1) 1.23 and later comes with the new OSC 8 escape sequence production command \X'tty: link' for grotty(1). OSC 8 is understood by more and more terminals and console programs, like ∞ less(1) (version 566+). ∞ less(1) version 650 and above even interprets OSC 8 with full interactivity for internal and external references, almost like a web browser.
How does it look and feel?
Until ∞ groff(1) regulary ships the macros generating documents requires some effort. On the authors system it is as easy as man mdocmx, or
mdoc() { mdocmx[.sh] "${1}" | MDOCMX_FLAGS=${MDOCMX_FLAGS-64} groff -Tutf8 -mdoc | LESS= less --RAW-CONTROL-CHARS } # # When i want a table of contents, i instead do # MDOCMX_FLAGS=64 man an-installed-manual
Yet some readily prepared manuals can be presented. For the -Tutf8 ones less(1) must be version 650 or above. For the -Thtml ones it must be said that grohtml(1) is of really bad quality, unfortunately. But the gropdf(1) driver generates nice PDF output!
So here are the preprocessed and converted manuals for the terminal, to be viewed in the patched (or a normal, then non-interactive) less(1); macro package, preprocessor, and a big one of my mailer above. For PDF we have macro package, preprocessor, and the big one of my mailer. For HTML simply read the according manuals linked on this page.
[master]
Throw an eye on my Symbol table and Object ∞ perl(1) module, it offers a somewhat easy symbol table and object creation/management. It is also available in the ∞ Comprehensive Perl Archive Network.
I am using ∞ perl(1) since 1997 in many projects and for a lot of purposes. In all that time i have not found a single bug! Hoooray and thanks, ∞ perl(1) porters!
[master]
S-cdda and S-cdda-to-db are packaged on (∞ Crux and) ∞ OpenBSD, pam_xdg on (∞ Crux and) ∞ FreeBSD, S-postgray is available on ∞ Alpine Linux, (∞ Crux) and ∞ OpenBSD; it is also included in ∞ The “Fossies” Software Archive. S-dkim-sign exists on ∞ Alpine Linux (and ∞ Crux). Thank you!
The README as of 2024-12-20:
A repo of some small tools ========================== pam_xdg.c (plus support) v0.8.5 (2024-11-27): XDG Base Directories support via PAM: creation of $XDG_RUNTIME_DIRs, injection of environment variables into sessions. libpam and OpenPAM. (Despite the name this is not the later FreeBSD pam_xdg.) [.] [- port to OpenPAM (BSD). (Jan Beich)] [- Allow non-XDG-standard paths via make options. (Jan Beich)] [- With "notroot", unsetenv(3) all XDG variables for root. v0.8.3] [- Fix: pam_get_item() may return NULL (Andre Albsmeier). v0.8.4] - Do not use system(3) to rm(1), but unroll. [v0.8.5] s-cdda.c (plus support) v0.8.5 (2021-01-28): Access digital audio CDs (TOC, MCN, ISRC, CD-TEXT, audio tracks). Developed in 2020 on then current operating-systems and hardware. Not tested with CD-Extra etc (only proofed logically). Linux and *BSD. s-cdda-to-db.pl (plus support) v0.8.0 (2021-06-18): Queries content and data of audio CDs through s-cdda(1), collects informations (artist, album, song titles, etc.) of desired tracks, if possible correlates data with a web query against MusicBrainz, then places encoded tracks as well as a human readable and easily parseable database in a per-CD directory under a directory tree. The audio encoders (and sox(1) without --no-volume-normalize) need to be installed separately. (P.S.: the user will be asked to edit collected informations, and will be given a hand for the rather sophisticated, classical music aware database layout while doing so.) (P.P.S.: nice foundation for link farms.) [.] - use POSIX::setlocale() instead of relying on PERL5OPT=-C. The latter roots in old habits originating in perl(1) evolution problems Y2K2-3 (5.8.0 and 5.8.1). s-dkim-sign.c (plus support) v0.6.2 (2024-05-30): postfix(1)-only RFC 6376/8463 DKIM sign-only milter. [.] - FIX --client IP with CIDR mask (false code takeover from s-postgray, Coverity.com CID 1586924; unfortunately s-dkim-sign was stuck in some Coverity.com queue since end of April). - Fix compilation with LibRESSL and OpenSSL < 3.0.0. - The built-in set of headers includes some extensions more (including ones that "normally" not occur in "main headers"). - Stuff: o Make it compile with C++ o Generalize management of "obsoletion", and "need separate digest" o Coverity.com defect density 0.00: https://scan.coverity.com/projects/s-dkim-sign s-postgray.c (plus support) v0.8.3 (2024-06-23): postfix(1) graylisting policy daemon. See its README + manual for more. [* Many, many thanks to Jens Schleusener, and his cron job!] [.] - FIX: configuration reload stripped wrong flag mask. - FIX: two timeout calculations could overflow 16-bit and cause faulty gray DB entry timeouts thus. - Because i liked having those, add new --gc-linger behaviour which never outdates elder entries except due to --limit excess. - Gray DB maintenance, when faced with the necessity to remove entries to keep within --limit's, more less dumb (and maybe more secure). - No longer auto-adjusts --limit when repeatedly in out-of-memory situations, only logs. - fix a race condition in !--untamed mode on FreeBSD and Linux. - Stuff: o Make it compile with C++ o Ported to Solaris (OpenIndiana) o Coverity.com defect density 0.00: https://scan.coverity.com/projects/s--postgray Not for the masses: ------------------- oauth-helper.py: Handles OAuth 2.0 credentials. Supports Google, Microsoft, Yandex. [.] 2024-06-01: handle INT from keyboard specifically. s-port-knock.README (etc) v0.8.1 (2024-07-19): A simple port knock via SSH signatures. It requires modern OpenSSH (ssh-keygen(1)), openssl(1) and sh(1). [.] - Review iteration that FIXes a false #ifdef, an uninit strerror(), and in the script broken passing/usage of $PORT_KNOCK_SHELL. We also skip select(2) path entirely if a_DISTINCT_SOCKS is unset. (It was borked.) - Change packet format (no separating newline). - Add simplemost manual. Misc: ----- btrfs-snapshot.sh: Simple script to deal with BTRFS snapshots. [.] - (tar)ball support is gone; new syntax fixed. find-command.sh: Find an executable command within a POSIX shell. which(1) is not standardized, and command(1) -v may return non-executable, so here is how it is possible to really find a usable executable file. Thanks to Robert Elz (kre). git-topic-creator.pl: To ease maintaining of topic branches i use a linear history, so that i can use ``$ git rebase -i`` for fixups and squashes, without having to worry about recreation of topic branches. Instead i tag commit messages, and use this script to create the topics once i am finished. Read the --help output for more, and make use of verbosity when you use it first. gmane-fetch.pl: Download NNTP articles from Gmane.org and Gwene.org, incrementally, and store them in (append them to) a local MBOX. Read and adjust the script header for documentation and configuration. quote-rndtrip.sh: Round trip quote strings in POSIX (and elder) shell(s). Thanks to Robert Elz (kre). [- ensure outer driver(s) do not leak variabes. (Steven Penny)] In the fog: ----------- arena-manager: Offers some automatized operations on revision control repositories, like updating, (fast-forward) merging, garbage-collecting. backup.sh: My private backup script. Simple (uses tar(1)), but does some stuff which i need for my work flow (backups data which is in local repo clones but not yet pushed to their "real" counterparts). Needs perl(1). [- FIX faulty xarg/tar -c invocations. (Ralph Corderoy)] XXX No longer used: i switched to (subsets of) filesystem snapshots. cdoc-freebsd.S: FreeBSD 5.3 x86 prog to open/close /dev/cdrom tray. May work on newer ones, but have not tried it in a while. It had 416 object file bytes when everything was placed in ``.text`` (no .EH frames back then). entropy-saver.c: Linux: for my use cases i find it annoying that "entropy_avail" is not incremented when i restore the saved random seed that machines have collected so hard. This little program touches this count also. (Thanks Bernd Petrovitsch for pointing out EAGAIN and EBUSY.) [.] 2022-02-23: work when /proc/sys/kernel/random/entropy_avail is not de- cremented when reading /dev/random. 2022-04-20: Jason Donenfeld wrote something more generic that made it into busybox etc, and is therefore preferable: https://git.zx2c4.com/seedrng/plain/seedrng.c P.S.: most preferable would be "echo seed > /dev/random" fan-adaptive.sh: "Adaptive", more generic, and much more easily adaptable successor of fancontrol.sh. For now with simulator and MacBook Air model support. See the script header for more. gen-uushar-wrapper: Creates a shell archive similar to uushar as below, except that the archive (1) consists only of executable file members, and (2) will be itself executable. Run the generated shell archive script to invoke any of its programs. Upon first invocation the wrapper creates a hidden directory in $TMPDIR to unpack its members. Without arguments it shows its contents and the creation date. Simply execute it, it guides through the archive creation process. real-periodic.sh: A real periodic for NetBSD, FreeBSD, DragonFly BSD and OpenBSD that ensures that the daily/weekly/monthly maintenance stuff is executed, even if your laptop is running only one hour a day. Invoke this once per hour in the roots crontab and disable the usual periodic stuff of your system instead. Note it does not deal with timezone and DST (daylight saving time) switches, but instead only checks the day of the year that is reported by date(1). E.g., on my FreeBSD 10.0 box:: # do daily/weekly/monthly maintenance 15 * * * * root /usr/bin/nice -n 15 /usr/libexec/real-periodic.sh #1 3 * * * root periodic daily #15 4 * * 6 root periodic weekly #30 5 1 * * root periodic monthly ... uushar (manual in uushar.1): Writes a sh(1) shell script to standard output that recreates the file hierarchy specified by the command line operands. Directories will be recreated and must be specified before the files they contain. Compared to the well-known shar(1) program, uushar(1) adds optional compression and an uuencode(1)/uudecode(1) binary safe layer:: $ uushar [-(Z|z|J|j)] file ... It is easy to insert trojan horses into uushar files. It is thus strongly recommended that all shell archive files be examined before running them through sh(1). Archives produced using this implementation of uushar may be easily examined with the command:: $ grep '^[^X#]' shar.file zte.sh: Control a ZTE modem (MF79 and many others according to web search) from the command line. Needs curl(1) and OpenSSL(1). # s-ts-mode
[master]
One more option to manage your website. A camel approach to website building. ∞ vim(1) and it actually generated what you are looking at.
S-roff is a text processor that formats text. It accepts lines of text interspersed with lines of format control information and formats the text into a printable, paginated document having a user-designed style. S-roff offers unusual freedom in document styling: arbitrary style headers and footers; arbitrary style footnotes; multiple automatic sequence numbering for paragraphs, sections, etc; multiple column output; dynamic font and point-size control; arbitrary horizontal and vertical local motions at any point; and a family of automatic overstriking, bracket construction, and line-drawing functions.
S-roff is a fork of ∞ groff(1), stripped-down to not include any ∞ X.org related facility, the output devices grolj4 and grolbp as well as most contributed packages. The fork happened on the last commit that is still GPL2 licensed (1.19.2-574-gecbf4f1), but almost all changes up to and including v1.22.3 are included, as well as further bug reports.
The plan is to make it UTF-8 clean all through the toolchain, to make it more user friendly, e.g., by adding automatic detection of required preprocessors. Nonetheless keeping backward compatibility and accessibility of individual subcomponents, like nroff, troff and all the preprocessors. I would like to see the manual all in manual pages (mdoc). I really would like to have builtin support for TTF/OTF fonts. All of this is mid– to long–term.
First i will completely rework the build system and adapt this codebase to not need any autotool, but only the shell and make, just the same easy way as is used for S-nail, then perform a lot of rather invisible but desired code overhauling, like implementing consistent argument parsing etc. I hope this step is taken on Joe Ossanna's 50th day of death 2027-11-28.
I love C, ∞ perl(1) and dig plain old sh(1) and awk(1) more and more. I would love C++ (again) if it would be a plain C with classes; maybe not even automatic ctors and dtors. (If i really would go for learning a new language i think i would most likely have a go with ∞ Nim or ∞ Julia. I will however have to and look forward to dig into ∞ Lua.) I have discovered ∞ mksh(1) and used it on all my real-work boxes for almost a decade, but in 2021 i switched back to ∞ bash everywhere after finding myself in a buggy dead end situation. Whereas ∞ Dropbear SSH is used for outlined SSH cases, almost all of SSH is driven by the omnipresent ∞ OpenSSH. I make heavy use of ∞ WireGuard virtual private networks. Since about year 2000 i am a fan (though not a sophisticated user) of ∞ vim(1), it gave up in an endless loop twice. I am thankful for being able to use ∞ git(1) for version control today, after a lot of distress with other VCSs.
When on X(1) i was used to run the fantastic ∞ ahwm(1) window manager from about 2002/3 to November 2018, may Alex Hioreanu himself refer to it as historical or not; then switched to ∞ cwm(1) for about six years, and then switched to ∞ dwm(1) in October 2024 (in preparation for a free a bit fair Linux phone, and the same UI, everywhere). Because i mostly stay within the ∞ tmux(1) terminal multiplexer, to which i have switched (back) after about six years of using ∞ screen(1), i am satisfied with the minimalistic ∞ st(1) terminal — ∞ rxvt-unicode and its server mode served me very well before that. ∞ lynx(1) for browsing if text based browsing is possible, thus decreasingly often, which i dislike, and ∞ Firefox (pre-compiled) otherwise. Mail messages are being passed through ∞ bogofilter for Bayesian filtering, i have written and use a ∞ LMDB backend for and with it. I ended up using solely ∞ groff(1) for document preparation, viewing PDFs with ∞ mupdf(1); i do use ∞ Ghostscript.com from the same source.
It would also not work without enscript, less, curl, openssl, all the compression tools, the filesystems and their tools, iw, iwd, busybox, and all the other network tools, multimedia tools like ffmpeg, vorbis-tools, ogg123, sox, faad2, faac, of course xorg, GNU make, BSD make, and all the free compilers out there, gcc, clang, pcc and tinyc, and tools surrounding object files like objdump and readelf. In the past, nasm.
I am very thankful for being able to use virtual machines via ∞ QEMU: it is so handy to have a bunch of operating systems at hand for immediate testing, just as necessary! I have used ∞ FreeBSD for about ten years exclusively. It, ∞ Alpine Linux and the beloved ∞ Crux-∞ Linux with its nice SysV init are my development boxes, the latter drives my Laptop(s). I am also using ∞ archlinux, ∞ NetBSD, ∞ OpenBSD and ∞ The Void (Linux) distribution, and there are VMs with other systems, like ∞ DragonFly. I am in favour of BSD, it is a complete, self-contained environment, with good and up-to-date documentation. Just like ∞ Crux-∞ Linux.
While looking around for ∞ Unicode aware software i have been pointed to the ∞ Plan9 from Bell Labs operating system, which has been unknown to me before (except for dim memory on a very short notice in a German computer magazine featuring Glenda), and its ∞ 9atom and ∞ 9front extenders, which unfortunately have all died in the meantime, except for the latter; sometimes i wish i would have known Plan9 15 years earlier, and that it would have been licensed under BSD copyright back then, who knows how that relationship would have ended.
The server sdaoden.eu is driven by the ∞ Alpine Linux operating system (after a month of a quick-and-dirty (via inetd) setup ∞ FreeBSD system) with ∞ tc(8) (iproute2) traffic shaping in combination with an ∞ iptables(8) firewall. ∞ Dnsmasq caches DNS queries. ∞ Postfix manages SMTP and provides mailing lists via ∞ GNU Mailman. Web pages are served by the ∞ lighttpd web server and ∞ cgit makes the ∞ git(1) repositories accessible via HTTPS/HTTP for browsing purposes. Most services of sdaoden.eu are secured with a free certificate obtained from ∞ Let's Encrypt, which is managed by cron job via ∞ dehydrated. Inside a ∞ WireGuard VPN ∞ OpenSSH handles SSH, and ∞ BusyBox offers some services, like rdate; it also offers a lot of other things. The server is a VM hosted by ∞ Portunity with the use of green energy.
Copyright (c) 1997 - 2024, Steffen Nurpmeso <steffen@sdaoden.eu>
@(#)code.html-w42 1.414 2024-12-20T03:24:31+0000