New Test System

Now that “DNSSEC Mastery 2/e” is ready for copyedit, I can turn my attention to “OpenBSD Storage Mastery.”

Back in 2014, I bought a machine for writing the ZFS books. Ten hard drives. 32 GB memory. Enough power supply to heat my office during a Michigan winter, which was great during Michigan winters and not so great in the summer. Fan noise that belonged in a datacenter. That machine’s now in the basement, ready for me to test things that require large amounts of storage.

As of today I have a more modern system on my desk, running a current OpenBSD snapshot. Clean and simple, the way God and Dennis Ritchie intended.

By unpopular request, here’s the details. It’s clean out of the box, I don’t even have tcsh installed yet, let alone my .cwmrc copied over.


OpenBSD 7.0-current (GENERIC.MP) #132: Mon Nov 29 08:51:58 MST 2021
deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 33592328192 (32036MB)
avail mem = 32558276608 (31049MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 3.3 @ 0xc6a02000 (72 entries)
bios0: vendor American Megatrends Inc. version "2423" date 08/10/2021
bios0: ASUS ROG STRIX B550-F GAMING
acpi0 at bios0: ACPI 6.0
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP IVRS SSDT SSDT SSDT FIDT FPDT MCFG HPET VFCT BGRT WPBT TPM2 SSDT CRAT CDIT SSDT SSDT SSDT WSMT APIC SSDT SSDT
acpi0: wakeup devices X162(S4) GP17(S4) XHC0(S4) XHC1(S4) X161(S4) PTXH(S4) X1_1(S4) X1_2(S4) X1_3(S4) I225(S4) X162(S4) M2_2(S4)
acpitimer0 at acpi0: 3579545 Hz, 32 bits
acpimcfg0 at acpi0
acpimcfg0: addr 0xf0000000, bus 0-127
acpihpet0 at acpi0: 14318180 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: AMD Ryzen 5 5600G with Radeon Graphics, 3893.28 MHz, 19-50-00
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu0: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu0: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu0: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 8 var ranges, 88 fixed ranges
cpu0: apic clock running at 99MHz
cpu0: mwait min=64, max=64, C-substates=1.1, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu1: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu1: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu1: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu1: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu1: smt 0, core 1, package 0
cpu2 at mainbus0: apid 4 (application processor)
cpu2: AMD Ryzen 5 5600G with Radeon Graphics, 3892.70 MHz, 19-50-00
cpu2: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu2: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu2: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu2: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu2: smt 0, core 2, package 0
cpu3 at mainbus0: apid 6 (application processor)
cpu3: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu3: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu3: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu3: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu3: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu3: smt 0, core 3, package 0
cpu4 at mainbus0: apid 8 (application processor)
cpu4: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu4: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu4: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu4: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu4: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu4: smt 0, core 4, package 0
cpu5 at mainbus0: apid 10 (application processor)
cpu5: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu5: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu5: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu5: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu5: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu5: smt 0, core 5, package 0
cpu6 at mainbus0: apid 1 (application processor)
cpu6: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu6: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu6: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu6: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu6: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu6: smt 1, core 0, package 0
cpu7 at mainbus0: apid 3 (application processor)
cpu7: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu7: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu7: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu7: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu7: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu7: smt 1, core 1, package 0
cpu8 at mainbus0: apid 5 (application processor)
cpu8: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu8: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu8: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu8: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu8: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu8: smt 1, core 2, package 0
cpu9 at mainbus0: apid 7 (application processor)
cpu9: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu9: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu9: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu9: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu9: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu9: smt 1, core 3, package 0
cpu10 at mainbus0: apid 9 (application processor)
cpu10: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu10: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu10: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu10: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu10: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu10: smt 1, core 4, package 0
cpu11 at mainbus0: apid 11 (application processor)
cpu11: AMD Ryzen 5 5600G with Radeon Graphics, 3892.69 MHz, 19-50-00
cpu11: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA,UMIP,PKU,IBPB,IBRS,STIBP,SSBD,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu11: 32KB 64b/line 8-way I-cache, 32KB 64b/line 8-way D-cache, 512KB 64b/line 8-way L2 cache
cpu11: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu11: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu11: smt 1, core 5, package 0
ioapic0 at mainbus0: apid 13 pa 0xfec00000, version 21, 24 pins
ioapic1 at mainbus0: apid 14 pa 0xfec01000, version 21, 32 pins
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (GPP6)
acpiprt2 at acpi0: bus -1 (GPP7)
acpiprt3 at acpi0: bus -1 (GPP8)
acpiprt4 at acpi0: bus -1 (GPP9)
acpiprt5 at acpi0: bus 8 (GP17)
acpiprt6 at acpi0: bus -1 (GPP0)
acpiprt7 at acpi0: bus -1 (GP18)
acpiprt8 at acpi0: bus 7 (GPP4)
acpiprt9 at acpi0: bus -1 (GPP5)
acpiprt10 at acpi0: bus 1 (GPP3)
acpipci0 at acpi0 PCI0: 0x00000010 0x00000011 0x00000000
acpicmos0 at acpi0
acpibtn0 at acpi0: PWRB
amdgpio0 at acpi0 GPIO uid 0 addr 0xfed81500/0x400 irq 7, 184 pins
tpm0 at acpi0 TPM_: unsupported TPM2 start method
"ACPI0010" at acpi0 not configured
acpicpu0 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu1 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu2 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu3 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu4 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu5 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu6 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu7 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu8 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu9 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu10 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
acpicpu11 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1 mwait), PSS
"AMDIF030" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
cpu0: 3893 MHz: speeds: 3900 1700 1400 MHz
pci0 at mainbus0 bus 0
ksmn0 at pci0 dev 0 function 0 "AMD 17h/6xh Root Complex" rev 0x00
"AMD 17h/6xh IOMMU" rev 0x00 at pci0 dev 0 function 2 not configured
pchb0 at pci0 dev 1 function 0 "AMD 17h/6xh Host" rev 0x00
pchb1 at pci0 dev 2 function 0 "AMD 17h/6xh Host" rev 0x00
ppb0 at pci0 dev 2 function 1 "AMD 17h/6xh PCIE" rev 0x00: msi
pci1 at ppb0 bus 1
xhci0 at pci1 dev 0 function 0 "AMD 500 Series xHCI" rev 0x00: msi, xHCI 1.10
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
ahci0 at pci1 dev 0 function 1 "AMD 500 Series AHCI" rev 0x00: msi, AHCI 1.3.1
ahci0: port busy after first PMP probe FIS
ahci0: port busy after first PMP probe FIS
ahci0: port 1: 6.0Gb/s
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 1 lun 0: naa.5002538fc16090b3
sd0: 953869MB, 512 bytes/sector, 1953525168 sectors, thin
ppb1 at pci1 dev 0 function 2 "AMD 500 Series PCIE" rev 0x00
pci2 at ppb1 bus 2
ppb2 at pci2 dev 0 function 0 "AMD 500 Series PCIE" rev 0x00: msi
pci3 at ppb2 bus 3
ppb3 at pci2 dev 4 function 0 "AMD 500 Series PCIE" rev 0x00: msi
pci4 at ppb3 bus 4
nvme0 at pci4 dev 0 function 0 "SanDisk WD Black NVMe" rev 0x00: msix, NVMe 1.3
nvme0: WDBRPG0010BNC-WRSN, firmware 111130WD, serial 213733803989
scsibus2 at nvme0: 2 targets, initiator 0
sd1 at scsibus2 targ 1 lun 0:
sd1: 953869MB, 512 bytes/sector, 1953525168 sectors
ppb4 at pci2 dev 8 function 0 "AMD 500 Series PCIE" rev 0x00: msi
pci5 at ppb4 bus 5
ppb5 at pci2 dev 9 function 0 "AMD 500 Series PCIE" rev 0x00: msi
pci6 at ppb5 bus 6
igc0 at pci6 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4 queues, address 7c:10:c9:45:b2:d1
ppb6 at pci0 dev 2 function 2 "AMD 17h/6xh PCIE" rev 0x00: msi
pci7 at ppb6 bus 7
nvme1 at pci7 dev 0 function 0 "SanDisk WD Black NVMe" rev 0x00: msix, NVMe 1.3
nvme1: WDBRPG0010BNC-WRSN, firmware 111130WD, serial 213733806541
scsibus3 at nvme1: 2 targets, initiator 0
sd2 at scsibus3 targ 1 lun 0:
sd2: 953869MB, 512 bytes/sector, 1953525168 sectors
pchb2 at pci0 dev 8 function 0 "AMD 17h/6xh Host" rev 0x00
ppb7 at pci0 dev 8 function 1 "AMD 17h/6xh PCIE" rev 0x00
pci8 at ppb7 bus 8
amdgpu0 at pci8 dev 0 function 0 "ATI Cezanne" rev 0xc9
drm0 at amdgpu0
amdgpu0: msi
azalia0 at pci8 dev 0 function 1 "ATI Renoir HD Audio" rev 0x00: msi
azalia0: no supported codecs
ccp0 at pci8 dev 0 function 2 "AMD 17h/1xh Crypto" rev 0x00
xhci1 at pci8 dev 0 function 3 "AMD 17h/6xh xHCI" rev 0x00: msi, xHCI 1.10
usb1 at xhci1: USB revision 3.0
uhub1 at usb1 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
xhci2 at pci8 dev 0 function 4 "AMD 17h/6xh xHCI" rev 0x00: msi, xHCI 1.10
usb2 at xhci2: USB revision 3.0
uhub2 at usb2 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
azalia1 at pci8 dev 0 function 6 "AMD 17h/1xh HD Audio" rev 0x00: apic 14 int 12
azalia1: codecs: Realtek ALC1220
audio0 at azalia1
piixpm0 at pci0 dev 20 function 0 "AMD FCH SMBus" rev 0x51: polling
iic0 at piixpm0
iic1 at piixpm0
pcib0 at pci0 dev 20 function 3 "AMD FCH LPC" rev 0x51
pchb3 at pci0 dev 24 function 0 "AMD 19h/5xh Data Fabric" rev 0x00
pchb4 at pci0 dev 24 function 1 "AMD 19h/5xh Data Fabric" rev 0x00
pchb5 at pci0 dev 24 function 2 "AMD 19h/5xh Data Fabric" rev 0x00
pchb6 at pci0 dev 24 function 3 "AMD 19h/5xh Data Fabric" rev 0x00
pchb7 at pci0 dev 24 function 4 "AMD 19h/5xh Data Fabric" rev 0x00
pchb8 at pci0 dev 24 function 5 "AMD 19h/5xh Data Fabric" rev 0x00
pchb9 at pci0 dev 24 function 6 "AMD 19h/5xh Data Fabric" rev 0x00
pchb10 at pci0 dev 24 function 7 "AMD 19h/5xh Data Fabric" rev 0x00
isa0 at pcib0
isadma0 at isa0
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
efifb at mainbus0 not configured
dt: 451 probes
uhidev0 at uhub0 port 10 configuration 1 interface 2 "AsusTek Computer Inc. AURA LED Controller" rev 2.00/1.00 addr 2
uhidev0: iclass 3/0, 236 report ids
uhid0 at uhidev0 reportid 236: input=64, output=64, feature=0
ugen0 at uhub0 port 10 configuration 1 "AsusTek Computer Inc. AURA LED Controller" rev 2.00/1.00 addr 2
uhub3 at uhub0 port 11 configuration 1 interface 0 "Genesys Logic USB2.0 Hub" rev 2.00/60.90 addr 3
uhidev1 at uhub0 port 13 configuration 1 interface 0 "Unicomp Endura Pro Keyboard" rev 1.10/43.34 addr 4
uhidev1: iclass 3/1
ukbd0 at uhidev1: 8 variable keys, 6 key codes
wskbd1 at ukbd0 mux 1
uhidev2 at uhub0 port 13 configuration 1 interface 1 "Unicomp Endura Pro Keyboard" rev 1.10/43.34 addr 4
uhidev2: iclass 3/1, 3 report ids
ums0 at uhidev2 reportid 1: 3 buttons, Z dir
wsmouse0 at ums0 mux 0
ucc0 at uhidev2 reportid 2: 573 usages, 18 keys, array
wskbd2 at ucc0 mux 1
uhid1 at uhidev2 reportid 3: input=1, output=0, feature=0
ugen1 at uhub1 port 2 "Realtek USB3.0 802.11ac 1200M Adapter" rev 2.10/2.10 addr 2
urtwn0 at uhub2 port 2 configuration 1 interface 0 "Realtek 802.11n NIC" rev 2.10/2.00 addr 2
urtwn0: MAC/BB RTL8192EU, RF 6052 2T2R, address 98:de:d0:0f:c9:62
vscsi0 at root
scsibus4 at vscsi0: 256 targets
softraid0 at root
scsibus5 at softraid0: 256 targets
root on sd0a (d25c4224901b9485.a) swap on sd0b dump on sd0b
[drm] *ERROR* sdma_v4_0: Failed to load firmware "amdgpu/green_sardine_sdma.bin"
[drm] *ERROR* Failed to load sdma firmware!
drm:pid0:psp_init_asd_microcode *ERROR* fail to initialize asd microcode
[drm] *ERROR* Failed to load psp firmware!
[drm] *ERROR* sw_init of IP block failed -2
drm:pid0:amdgpu_device_init *ERROR* amdgpu_device_ip_init failed
drm:pid0:amdgpu_attachhook *ERROR* Fatal error during GPU init
efifb0 at mainbus0: 1920x1080, 32bpp
wsdisplay0 at efifb0 mux 1: console (std, vt100 emulation), using wskbd0
wskbd1: connecting to wsdisplay0
wskbd2: connecting to wsdisplay0
wsdisplay0: screen 1-5 added (std, vt100 emulation)

Dang, that’s a whole mess of CPUs. Maybe I should have replaced my desktop earlier?

Pretty sure this will spark questions, so:

  • Yes, I’m writing an OpenBSD storage book next.
  • No, I have no date on its release, or on a release of a third edition of Absolute OpenBSD.
  • Sponsorships will open once I ship the DNSSEC sponsor gifts.
  • No, I don’t have a hashtag yet.
  • I have no answer to any questions about any related topics.

Thank you for understanding.

640% Kickstarter, Sponsorships, and Shipping

In forty-eight hours, my experimental Kickstarter funded six hundred and forty percent.

Those of you who told me so, may now commence declaring that you told me so.

I am considering using Kickstarter for future books, in combination with my sponsorship program. (Sponsors pay me while I’m still writing the book.) The sponsor program will never go away, mind you. My end goal is reader disintermediation; I want folks coming directly to me for their books, instead of buying through Amazon or whoever. Sponsorship is the culmination of disintermediation. But sponsorship is for dedicated readers, while Kickstarter attracts casual ones. I’m thinking that I’ll use sponsorship to pay bills as I write, while Kickstarter will pay the bills of publishing. I’ll have to figure out how to make any sponsor books more precious than the Kickstarter ones, though. Maybe a special SPONSOR EDITION note on the cover.

One wrinkle with Kickstarter that’s raised a bunch of questions, though, is shipping. Overseas shipping costs are EXPENSIVE. They are set by my experience with sponsor gifts.

When it comes to shipping books internationally, the US post office provides three options.

  1. Media Mail. I can get it just about anywhere in the world for less than $10. No international tracking. No guarantee of delivery. Might take months or years. Those container ships moored outside every port in the world, waiting months for an opportunity to unload? There are Media Mail packages adrift in every one.
  2. First class mail. Costs $25 +/- $5-ish. Delivery guaranteed, eventually. Might take months. I can complain to the post office, and they’ll fill out a form. What they’ll do with that form is another issue.
  3. International Priority Mail. Costs about $40 ($30 to Canada). Ouch. Delivers within a week or two, sort of guaranteed. Insured. Complaints are taken mostly seriously.

I normally use First Class mail.

Ever since the pandemic started, sponsor gifts anywhere outside the USA keep going astray. Thanks to the tracking number I am able to watch packages bounce between, say, Chicago and London, England. I don’t know if the actual package keeps circling or if the computer is confused, but either way the sponsor does not get their gift. This is unacceptable. If some maniac generous soul puts food on my table as I write the book, my ethics declare that I must get their thank-you gift to them. Asking the post office staff for a better solution gets me the same answer every time: Use International Priority Mail.

Delivery failures are not my fault, but they are my responsibility. Here in the USA, a backer with a tracking number can contact the Post Office themselves. That’s not an option for a backer in Farawayistan. I must be able to investigate and resolve problems. That means tracking. I elected to go with Priority Mail all around this time, so that any complaints merit more than a tally in a database.

I would prefer to offer backers shipping options like “Would you like cheap ‘I promise to ship it, good luck getting it and I can’t help you’ or expensive ‘will arrive ASAP’?” Kickstarter does not offer that flexibility.

When I offer OpenBSD Storage Mastery for sponsorship, I will offer that choice. Sponsors already accept some risk–if I drop dead while writing the book, they’re out of luck. 1 Some of them will choose the cheap mail, probably the same people who tell me not to ship them a gift.

“Domesticate Your Badgers” Kickstarter Opens

My first ever Kickstarter crashed past its first stretch goal in three hours.

I think nonfiction books should be written by people who have done the thing. If you write a book about systems administration, you ought to have been a working sysadmin for years. If you write a book about rats, you better spend quantity time with the squeaky little bastards. If you write a book about martial arts, you better have been a serious student for decades. That’s why I don’t write a book about, say, devops. The book would make me a heap of money, at the expense of my reputation and integrity. Friends know better than to get me started about how-to books written by dilettantes, because the rant can go on for hours.

Well, minutes. But they feel like hours.

Similarly, someone who writes a book about the long game of writing, how to establish your writing skills, and how to build a long-term writing career, had better have written a heap of books that got published. Sadly, that person is now me.

Last year, I figured out something unique to say about the craft of writing. This year, I wrote Domesticate Your Badgers: Become a Better Writer through Deliberate Practice.

Every time I publish a book, I run an experiment or test. Most of these experiments are invisible, and of no interest to anyone except publishing nerds. This time, I’m experimenting with Kickstarter. Other writers have success launching books there, so I’ll try it. If it’s successful, I might add Kickstarter options to my other books. My goal is still reader disintermediation, but sponsorships target existing hard-core fans and Kickstarter is about more casual fans and attracting new readers.

The stretch goal format also lets me play with my expenses. I’d like to illustrate the interior, because badgers, but are people willing to pay for it? Is including a Foreword written by an enemy (a “Foeword”) as funny as I think it is? Dunno. People will tell me, though, and as they’re speaking with their wallets they will tell the truth.

And I learned how to glue snippets together to create more complicated videos. I have no idea what I’ll do with this skill. Probably something ill-advised.

If you have any interest in how I not only write books, but keep writing books, I wrote it all down. Take a look.

October 2021’s Bipolar Updates

This business is enough to make you bipolar.

Yesterday, someone went out of their way to inform me that while the technical content in TLS Mastery was impeccable, the book was not as funny as my other tech books. If any other author had written this book they would give it five stars, but on the Lucas Scale it rated only four.

First: it is very true that writers rely on reviews for their business. I appreciate reviews posted anywhere, for any reason, of any rating. I explicitly don’t want to know about them, however. It’s number five in the beginning of my FAQ.

Second: When you encounter a book that weirdly lacks some of the author’s usual glee, check the publication date. Any book written in 2020 is not going to have the usual bonfire of delight. We were lucky to strike even a spark.

I started writing TLS on 5 May 2020, as we were realizing exactly how awful the pandemic would be. I finished the first draft on 1 March 2021, when vaccines were an exotic treasure limited to health care workers. My wife is a nurse. We lost colleagues and family members to covid. It was not a good year. The mortgage waits for no writer, though.

Thinking I’ll use Camus’ “The Plague” as a motif for the OpenBSD storage book.

Also yesterday, I got copies of two new anthologies I’m in: Fantastic Christmas and Mysterious Christmas, both edited by Kristine Kathryn Rusch. She has won so many dang awards for writing and editing that she uses the heavier ones as doorstops. (Truth.) While it’s horrid form to quote from one’s own reviews, quoting what an anthology editor says about your story is merely gauche and I’m all about gauche. The editor’s intro to my story in Fantastic Christmas says:

The reason I decided to lead with “The Last Hour of Hogswatch,” though, is that it is one of the best stories I’ve read all year, if not one of the best I’ve read in the past several years.

Both of these, on the same day.

I probably should see a physical therapist about that whiplash.

In other news: DNSSEC Mastery 2/e is now at the technical review. It uses BIND as the reference implementation, but it’s less BIND-centric than the first edition. If you’re a DNSSEC expert and want to tech review, drop me a note. Tech reviews are due 8 November. It’s only 35,000 words, so a smaller book. I’ll be on OpenBSD Storage Mastery next. Sponsorships for that will open when I ship the DNSSEC sponsors their gifts.

Here’s the current 2020 books. I suspect this will be it for the year, but one of the things currently cooking might sneak out before the end of the year.

The question you’re all dying to ask, I’m sure, is: does this make the total stack taller than me? I don’t think so. Maybe next year. But publishing eight and a half inches in a year isn’t bad.

Forthcoming Mastery Book Price Changes

Just like the rest of the industrial world, the print book supply chain is struggling. All over the world, my printers are raising their prices. My indie publishing unit, Tilted Windmill Press, must roll with the changes. If you want print books, I recommend purchasing them soon.

I don’t know what the final prices will be. I have many titles, and churning through them all is a right pain. Some will require cover updates, because I foolishly put the prices on the back cover just like big publishers do. (I have built Tilted Windmill Press by producing products that can compete with the big publishers, which meant looking like Big Publishing books. Unfortunately, Big Publishing lets books age like milk, when my books age like wine.) (Also, why did nobody warn me that this insane business might succeed? I had dozens of exit strategies for my inevitable failure, but never asked “What will you do if your self-pub biz–hang on, hear me out–works? What if this book is still in print in, oh, I don’t know, TEN YEARS?”)

Prices are going up everywhere, for everything. The pandemic has everything higgledy-piggledy, and there’s no way to know where it will settle down. I’ll post shortly on what that means for my ebook side.

“DNSSEC Mastery, 2nd Edition” Cover Reveal

You might have glimpsed this elsewhere, especially if you’re a Patronizer, but here’s the cover of DNSSEC Mastery, Second Edition.

The original is Baraldi’s “Romans Engaged in Learning,” as reimagined by Eddie Sharam. Of course, Unix history being what it is, this is clearly “Tux Engaged in Learning.” Beastie is doing the teaching, thank you very much.

The book is still open for sponsorship, but I hope to finish the first draft this month.

Auction Against Human Trafficking

My wife works with Soroptimist International of Grosse Pointe to support their anti-human-trafficking efforts. They usually hold a variety of fundraisers, including a 5K race in September.

2020 and 2021 have been less than optimal fundraising years. Running a 5K on your own is much less interesting than trying to outrace a whole bunch of folks.

This year SIGP is raising money for the Joseph Project, a non-for-profit organization who connect human trafficking survivors with skilled pro bono legal counsel. One of the worst parts of human trafficking is that people must break the law to survive, let alone escape. Survival usually means a criminal record. I’ve written about human trafficking before, and completely support the efforts to give these folks a new chance.

Meanwhile, here I am with a variety of stuff that’s explicitly designed to raise money in the most daft way possible, and a whole mass of readers who couldn’t be unemployed if they tried. To try to cover the gap, I’m auctioning off something that was never before available online, and never will be again.

The Bail Bond Denied edition of FreeBSD Mastery: Jails.

Only five copies of this edition exist. One is in my archives. One was auctioned off at BSDCan 2019, the other at Penguicon 2019. The fourth will be reserved for the next charity auction I attend in person.

The fifth is being auctioned off right here. The members of the Grosse Pointe Soroptimists Club are signing it to express their gratitude for your generosity. I’ll sign it myself, thereby destroying their added value.


This is your only opportunity to get this book without being present at an event I’m at. Yes, I’m opening this up to seven billion people.

The auction rules are simple:

Comment on this post to bid. I advise bidders to click the “notify me of new comments by email” button, so they can see when they’re outbid.

The auction runs from now until 5 PM EDT 25 September. Most of the bidding happens on the first and last days, but I want to leave time for the Internet’s slow publicity machine to catch on. If bidding is frenzied in those last moments, I’ll leave the auction running to squeeze the most cash out of you get the best result for the Soroptimists.

Once the auction closes, send your donation to SIGP Paypal, by following the link on grossepointesoroptimist.net and send me your receipt. I will mail you the book at my expense.

Note that you don’t need to win a silly book to donate. You can donate out of your own generosity. I promise they’ll appreciate it. If you need someone to blame to keep your hard-boiled reputation, tell them I made you do it.

“$ git sync murder” is out, so: how many books have I written?

The hardcovers are in stores now, so I think it’s official. $ git sync murder is out everywhere except my print bookstore. You can get it at all of the usual stores. I have the ebook in my store.

Every time I release a new book, or dare to show my face in public, folks ask me how many books I’ve written. My answer is, “define written and book.” That’s not as snarky an answer as you might think.

First, they’re asking the wrong question. I’ve written many books that were not published and that you will never read. Immortal Clay didn’t pick up a bunch of 4-star and 5-star reviews by being the first novel I ever wrote. It got those by being my fifteenth finished novel in a series of deliberate practice that continues to this day, and my first published novel. So, let’s change the question to “how many books have you published?”

Here’s the current output of the SNMP object where I keep my publications catalog. (Accessing this object is an easter egg in the Networknomicon or, if you’re still attached to your sanity, SNMP Mastery.)

SNMP table: TWP-MIB::mwlBooksTable

 titleIndex                                             title year      genre      length
          1                                       Gatecrasher 1992    fiction full-length
          2                               Believe it or Else! 1993    fiction full-length
          3                           Gatecrasher 2nd edition 1995    fiction full-length
          4                 Women who Run with the Werewolves 1995    fiction   anthology
          5                                      Absolute BSD 2002 nonfiction full-length
          6                                  Absolute OpenBSD 2003 nonfiction full-length
          7                   Cisco Routers for the Desperate 2004 nonfiction full-length
          8                                         PGP & GPG 2006 nonfiction full-length
          9                     Absolute FreeBSD, 2nd edition 2007 nonfiction full-length
         10      Cisco Routers for the Desperate, 2nd edition 2009 nonfiction full-length
         11                             Network Flow Analysis 2010 nonfiction full-length
         12                           Horror Library volume 2 2010    fiction   anthology
         13                                   Opening the Eye 2011    fiction       story
         14                               Breaking the Circle 2011    fiction       story
         15                                       SSH Mastery 2012 nonfiction full-length
         16           Vicious Redemption: Five Dark Fantasies 2012    fiction full-length
         17                                    DNSSEC Mastery 2013 nonfiction full-length
         18                                      Sudo Mastery 2013 nonfiction full-length
         19                          Absolute OpenBSD, 2nd ed 2013 nonfiction full-length
         20                       No More Lonesome Blue Rings 2013    fiction       story
         21                            Sticky Supersaturation 2013    fiction       story
         22                                          Lavender 2013    fiction       story
         23                                        Pax Canina 2013    fiction       story
         24                              Wednesday's Seagulls 2013    fiction       story
         25               FreeBSD Mastery: Storage Essentials 2014 nonfiction full-length
         26                                     Immortal Clay 2014    fiction full-length
         27                               Waking Up Yesterday 2014    fiction       story
         28                                   Calling Control 2014    fiction       story
         29                                Moonlight's Apples 2014    fiction       story
         30             Networking for Systems Administrators 2015 nonfiction full-length
         31                                   Tarsnap Mastery 2015 nonfiction full-length
         32                              FreeBSD Mastery: ZFS 2015 nonfiction full-length
         33                                     Forever Falls 2015    fiction     novella
         34              Spilled Mirovar (Prohibition Orcs 1) 2015    fiction       story
         35                                      Whisker Line 2015    fiction       story
         36                                    Wifi and Romex 2015    fiction       story
         37                                       PAM Mastery 2016 nonfiction full-length
         38                     FreeBSD Mastery: Advanced ZFS 2016 nonfiction full-length
         39                   FreeBSD Mastery: Advanced ZedFS 2016 nonfiction full-length
         40                   Kipuka Blues (Immortal Clay #2) 2016    fiction full-length
         41                                   Hydrogen Sleets 2016    fiction full-length
         42             Drowned Mirovar (Prohibition Orcs #2) 2016    fiction     novella
         43                  Butterfly Stomp Waltz (Beaks #1) 2016    fiction full-length
         44           Earthquake Kitten Kiss (Beaks spin-off) 2016    fiction     novella
         45                        Butterfly Stomp (Beaks #0) 2016    fiction full-length
         46             Forced to Talk, Like, With Your Mouth 2016    fiction       story
         47            FreeBSD Mastery: Specialty Filesystems 2016 nonfiction full-length
         48                                 git commit murder 2017    fiction full-length
         49                                savaged by systemd 2017    fiction       story
         50                          Httpd and Relayd Mastery 2017 nonfiction full-length
         51                                        Ed Mastery 2018 nonfiction     novella
         52               Ed Mastery, Manly McManface Edition 2018 nonfiction     novella
         53                          SSH Mastery, 2nd edition 2018 nonfiction full-length
         54                     Absolute FreeBSD, 3rd edition 2018 nonfiction full-length
         55                           Bedazzled by Blockchain 2018    fiction       story
         56                                         Face Less 2018    fiction       story
         57                Boundary Shock: Tuesday After Next 2018    fiction   anthology
         58 Boundary Shock: Robots, Androids, Cyborgs, Oh My! 2018    fiction   anthology
         59                         Sudo Mastery, 2nd edition 2019 nonfiction full-length
         60                            FreeBSD Mastery: Jails 2019 nonfiction full-length
         61                     Terrapin Sky Tango (Beaks #2) 2019    fiction full-length
         62                                 Winner Breaks All 2019    fiction       story
         63             Boundary Shock: Apocalypse Descending 2019    fiction   anthology
         64                      Fiction River: Superstitious 2019    fiction   anthology
         65                                 Snot-Nosed Aliens 2019    fiction   anthology
         66                        An Interpretation of Moles 2019    fiction   anthology
         67                                      SNMP Mastery 2020 nonfiction full-length
         68                      Boundary Shock: Alien Dreams 2020    fiction   anthology
         69                                The Networknomicon 2020 nonfiction full-length
         70                            Cash Flow for Creators 2020 nonfiction full-length
         71              Boundary Shock: What Might Have Been 2020    fiction   anthology
         72                                  Face The Strange 2020    fiction   anthology
         73                                  Bloody Christmas 2020    fiction   anthology
         74                              Drinking Heavy Water 2020    fiction full-length
         75                                        Final Gift 2020    fiction       story
         76                                    Woolen Torment 2020    fiction       story
         77                   Drums with Delusions of Godhood 2020    fiction       story
         78                    Uncollected Anthology: Deities 2020    fiction   anthology
         79                                    Woolen Torment 2021    fiction       story
         80               Aidan Redding Against the Universes 2021    fiction full-length
         81                            Fiction River: Chances 2021    fiction   anthology
         82           Fiction River: Dark and Deadly Passions 2021    fiction   anthology
         83                                       TLS Mastery 2021 nonfiction full-length
         84                                    Only Footnotes 2021 nonfiction     novella
         85                                   git sync murder 2021    fiction full-length
         86                        The Holiday Spectacular #2 2021    fiction   anthology

That’s 86 things with my name on the cover, excluding articles in periodicals and web sites. (I don’t have the energy to go through all that stuff.) So, I’ve published 86 books.

Except some of these are stories in anthologies. Anthologies are written by multiple authors. They’re only partially “by me.” Excluding those, the catalog has 70 entries. I have published 70 books.

Except some of those are basically chapbooks: single stories, put out on their own in print. I have many more stories than these, by the way, but they’re electronic-only. I ran out of energy before I collected all that information.

47 things with my name on them that are classified as either “full-length” or “novella.” This categorization is incorrect, however. The word “novella” means “a short novel.” The definition on “novel” has bloated over the last one hundred fifty years, driven by manufacturing concerns. Arthur Conan Doyle’s first Sherlock Holmes novel, A Study in Scarlet, is about 43,000 words. Publishers would laugh at Doyle today and tell him to try a chapbook publisher based on the length alone. In the 1920s, a 20,000-word tale was considered a novel and might be published as such. I have a great big stack of Rex Stout mystery novels, and many of them contain fewer than 40,000 words.

Let’s take a nonfiction “novella.” Ed Mastery. It is a short book, but it’s unquestionably “a book.”

Alternately, consider Drowned Mirovar the second Prohibition Orcs tale. It’s over 30,000 words. In the era it was set, it would be a full novel that would appear first in a magazine, then as a standalone book. Today, it’s a prologue. As it’s packaged, it’s “a book.” It would look just fine on the shelf next to any of my 1950s novels.

Then there are collections. Vicious Redepmtion is a collection of my short stories. Aidan Redding Against the Universes collects short stories and novels. They’re listed here as “full-length,” which they certainly are. Should I could those as books?

Surely there’s a culturally-accepted standard or industry standard on how to count the number of books you’ve written?

Er… no.

Isaac Asimov established a standard that “if I appear in it, it counts.” He counted anthologies. He counted chapbooks. By that standard, I’ve published 86 books. I am uncomfortable with this definition.

I know authors who won’t count anything shorter than 60,000 words. By that standard, I’ve published 22 books. It excludes all of the Mastery titles except SNMP Mastery. That’s clearly not right for me, either.

For me, the original question is about milestones. It’s about accomplishments. I want to be able to say “I made this thing” and stand by it.

My preferred definition is, if I whack you with it, will it leave a mark? Bystanders would object, however. And I have created some titles that, while they’d leave a mark, I don’t consider them independent books. An example would be the Bail Bond Denied edition of FreeBSD Mastery: Jails. It is literally the exact same text as the regular FreeBSD Mastery: Jails, but with a cover drawn in crayon by yours truly. It is a thing. It gets offered up for charity auctions. I have a small amount of pride in it. It’s not really a discrete book.

So I’m trying this definition.

a) 15,000 words or longer
b) requiring distinct and discrete effort to create
c) something I’m not embarrassed to call “a book.”

This definition lets me exclude titles like the ZedFS version of FreeBSD Mastery: Advanced ZFS, the Beck and Provost editions of Terrapin Sky Tango, and the Manly McManface version of Ed Mastery. Only Footnotes might have brand new footnotes in it, but it wasn’t hard to make. It’s excluded. Don’t get me wrong, I’m proud of these, but only because they polish my reputation as the good sort of troll. I knocked them all off in a morning. (They’re still in the pic of me with one copy of every edition of everything I’ve written, because that picture is only for fun.)

It lets me include works like Ed Mastery and Cash Flow for Creators. I spent three weeks writing the cash flow book, and thirty years learning how to write the cash flow book. It include volumes like the Networknomicon, because producing that required a whole bunch of work. It was a different sort of labor for me, but that unspeakable tome fine educational work is clearly a discrete, unique book.

I’m also counting collections. Again, the “how many books have you published” question is about milestones. Writing enough of A Thing to create a collection is a milestone. Aidan Redding Against the Universes is the closest thing to a Brandon Sanderson doorstop I’ve produced on the fiction side. (Also, that hardcover has two different covers, one on the dust jacket and one on the laminate, and they’re both lovely.)

Applying this definition leaves me with these titles.

          1                                       Gatecrasher 1992    fiction full-length
          2                               Believe it or Else! 1993    fiction full-length
          3                           Gatecrasher 2nd edition 1995    fiction full-length
          5                                      Absolute BSD 2002 nonfiction full-length
          6                                  Absolute OpenBSD 2003 nonfiction full-length
          7                   Cisco Routers for the Desperate 2004 nonfiction full-length
          8                                         PGP & GPG 2006 nonfiction full-length
          9                     Absolute FreeBSD, 2nd edition 2007 nonfiction full-length
         10      Cisco Routers for the Desperate, 2nd edition 2009 nonfiction full-length
         11                             Network Flow Analysis 2010 nonfiction full-length
         15                                       SSH Mastery 2012 nonfiction full-length
         16           Vicious Redemption: Five Dark Fantasies 2012    fiction full-length
         17                                    DNSSEC Mastery 2013 nonfiction full-length
         18                                      Sudo Mastery 2013 nonfiction full-length
         19                          Absolute OpenBSD, 2nd ed 2013 nonfiction full-length
         25               FreeBSD Mastery: Storage Essentials 2014 nonfiction full-length
         26                                     Immortal Clay 2014    fiction full-length
         30             Networking for Systems Administrators 2015 nonfiction full-length
         31                                   Tarsnap Mastery 2015 nonfiction full-length
         32                              FreeBSD Mastery: ZFS 2015 nonfiction full-length
         33                                     Forever Falls 2015    fiction     novella
         37                                       PAM Mastery 2016 nonfiction full-length
         38                     FreeBSD Mastery: Advanced ZFS 2016 nonfiction full-length
         40                   Kipuka Blues (Immortal Clay #2) 2016    fiction full-length
         41                                   Hydrogen Sleets 2016    fiction full-length
         42             Drowned Mirovar (Prohibition Orcs #2) 2016    fiction     novella
         43                  Butterfly Stomp Waltz (Beaks #1) 2016    fiction full-length
         44           Earthquake Kitten Kiss (Beaks spin-off) 2016    fiction     novella
         47            FreeBSD Mastery: Specialty Filesystems 2016 nonfiction full-length
         48                                 git commit murder 2017    fiction full-length
         50                          Httpd and Relayd Mastery 2017 nonfiction full-length
         51                                        Ed Mastery 2018 nonfiction     novella
         52               Ed Mastery, Manly McManface Edition 2018 nonfiction     novella
         53                          SSH Mastery, 2nd edition 2018 nonfiction full-length
         54                     Absolute FreeBSD, 3rd edition 2018 nonfiction full-length
         59                         Sudo Mastery, 2nd edition 2019 nonfiction full-length
         60                            FreeBSD Mastery: Jails 2019 nonfiction full-length
         61                     Terrapin Sky Tango (Beaks #2) 2019    fiction full-length
         67                                      SNMP Mastery 2020 nonfiction full-length
         69                                The Networknomicon 2020 nonfiction full-length
         70                            Cash Flow for Creators 2020 nonfiction full-length
         74                              Drinking Heavy Water 2020    fiction full-length
         80               Aidan Redding Against the Universes 2021    fiction full-length
         83                                       TLS Mastery 2021 nonfiction full-length
         85                                   git sync murder 2021    fiction full-length

This makes $ git sync murder my 45th book.

Could this definition be gamed? Sure it could. But I don’t care enough to game it. I stopped counting my releases somewhere around 17 or 18 books. I counted titles on my brag shelf at one point a few years ago, using my gut as a definition, and got a number like 31 or 33 or something like that. I haven’t cared enough to count until today, when I’m putting off doing real work. Now that I’ve counted, I suspect I’ll maintain a silent count until I break 50 and then lose count again. 50 is a milestone, after all.

If you want to argue about my definitions, please find someone else to argue with.

Total Mastery, 2021 July

Hypothesis are the key to understanding and the fundamental root of science. A hypothesis must be falsifiable. Here’s an example.

Nobody will buy a bundle containing all the IT Mastery ebooks. Long-time readers already have some, and only want select volumes. New readers will want to try one or two first.

Folks at my mug.org talk last night assure me this is not true, and that if such a bundle existed people would buy it.

I’m testing this hypothesis via the Total Mastery ebook bundle. All my IT Mastery ebooks, 10% off.

Note that it’s dated. When I release a new book, I’ll create a new bundle.

Or stop bothering with it, when I fail to falsify my hypothesis.

“DNSSEC Mastery, 2nd Edition” Open for Sponsorships

I’ve started making words on a new edition of DNSSEC Mastery.

After weeks of folks repeatedly asking when they can sponsor it, I have an answer other than “later.” Sponsorships are open now. Eddie Sharam will be doing the cover, as usual.

If you’ve just come across my sponsorships, here’s the deal. You give me money before I’ve produced anything suitable for human consumption. In return, I put your name in the book. $25 or more gets your name in the epub and mobi ebook versions, while $100 or more gets your name in the print and electronic versions. (The PDF version is straight from the print, so while it’s technically an ebook you need to have print-level sponsorship to appear in there.)

For the record: yes, I consider sponsorships something of an open scam. There’s no way you get enough benefit from a sponsorship to merit the cause. They’re a throwback to the medieval patronage system, where folks with money supported artists they considered worthwhile. Or, if you prefer: you give me money your excess cash, and write it off as a business expense.

On the other hand, I got bills. So here it is.

If you want to trickle money to me, rather than big lumps, I offer monthly patronage opportunities at both Patreon and my e-bookstore.

Or, just go to your favorite bookstore and buy my books. That’s all the support I need.