Quick eth<->wifi script for OpenBSD lappy users

This is just a quick and dirty script I use on the new laptop, if you are interested. You will obviously need to convert this to your hardware and ensure your user has doas rights. I also have a symlink to this script in /usr/local/bin. This can be easily hacked to your liking for permanent IP’s, etc.

Good luck. Enjoy.


doas ifconfig $eth down
doas ifconfig $wifi up
doas route -n flush

if [[ $1 == "search" ]]; then
	doas ifconfig $wifi scan

if [[ $1 == "connect" ]]; then
	doas ifconfig $wifi nwid $2 wpa wpakey $3 wpaprotos wpa1,wpa2
	doas dhclient $wifi

if [[ $1 == "disconnect" ]]; then
	doas ifconfig $wifi down

if [[ $1 == "ethernet" ]]; then
	doas ifconfig $wifi down
	doas ifconfig $eth up
	if [[ $2 == "on" ]]; then
		doas dhclient $eth
	if [[ $2 == "off" ]]; then
		doas ifconfig $eth down

Die Cortana, you insolent wench! DIE!

I’m certain I heard Cortana scream as she neared her throes of death and the laptop sigh a breath of relief after i typed `dd if=/dev/urandom of=/dev/rsd0c bs=1m` and hit enter, releasing the great pressure to support the giant Microsoft pig. Die Cortana, you insolent wench! DIE!

And that is how the installation of OpenBSD 6.2-beta on the Lenovo T470s 5th Generation began. Then, it was on to encrypting the entire drive with bioctl and cranking through the quickest and easiest OS installation on the planet. FYI, it takes longer to calculate just how you want your partitions to look than it does to install OpenBSD.

Of course, that was after booting in to Windoh’s to update the BIOS and insert a custom boot GIF to make Stef look good when she boots. I think she’ll be happy flashing my customary X logo on her beautiful, WQHD IPS screen. I loaded her up, too. Stef has all she can hold: the i7-7600U Intel CPU, 8GB on the motherboard, the additional 16GB DIMM to bring her to a total of 24GB of memory, and the 1TB SSD PCIe-NVMe OPAL2 for storage. Yeah, she’s a beauty: light and fast. We’ll think of her as my midlife-crisis laptop upgrade.

After getting xfce4 and all of its goodies installed and tweaked, it was time to grab the tree and compile the kernel with the preliminary Kaby Lake patch. I think I’m going to like it, as I continue to put packages on I need, want, or just want to check out. I finally have a dedicated laptop for development, where everything just works. Perhaps, now, I’ll get busybeed completed (busybeed on github). Perhaps, someday, it’ll be ready to offer to the community, if anyone is interested. It’s working beautifully for all of my packets and datalogging, thus far. Just need to finish busybctl.

dmesg for anyone interested:

OpenBSD 6.2-beta (GENERIC.MP) #0: Wed Sep 20 12:19:38 MDT 2017
real mem = 25486426112 (24305MB)
avail mem = 24706985984 (23562MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 3.0 @ 0x6f0bc000 (62 entries)
bios0: vendor LENOVO version "N1WET38W (1.17 )" date 09/01/2017
acpi0 at bios0: rev 2
acpi0: sleep states S0 S3 S4 S5
acpi0: wakeup devices GLAN(S4) XHC_(S3) XDCI(S4) HDAS(S4) RP01(S4) RP02(S4) RP04(S4) RP05(S4) RP06(S4) RP07(S4) RP08(S4) RP09(S4) RP10(S4) RP11(S4) RP12(S4) RP13(S4) [...]
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpihpet0 at acpi0: 23999999 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz, 2904.00 MHz
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: TSC frequency 2904000000 Hz
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 24MHz
cpu0: mwait min=64, max=64, C-substates=, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz, 2904.00 MHz
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: smt 0, core 1, package 0
cpu2 at mainbus0: apid 1 (application processor)
cpu2: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz, 2904.00 MHz
cpu2: 256KB 64b/line 8-way L2 cache
cpu2: smt 1, core 0, package 0
cpu3 at mainbus0: apid 3 (application processor)
cpu3: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz, 2904.00 MHz
cpu3: 256KB 64b/line 8-way L2 cache
cpu3: smt 1, core 1, package 0
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 120 pins
acpimcfg0 at acpi0 addr 0xf8000000, bus 0-63
acpiec0 at acpi0
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus 1 (RP01)
acpiprt2 at acpi0: bus -1 (RP02)
acpiprt3 at acpi0: bus 58 (RP03)
acpiprt4 at acpi0: bus -1 (RP04)
acpiprt5 at acpi0: bus -1 (RP05)
acpiprt6 at acpi0: bus -1 (RP06)
acpiprt7 at acpi0: bus -1 (RP07)
acpiprt8 at acpi0: bus -1 (RP08)
acpiprt9 at acpi0: bus 60 (RP09)
acpiprt10 at acpi0: bus -1 (RP10)
acpiprt11 at acpi0: bus -1 (RP11)
acpiprt12 at acpi0: bus -1 (RP12)
acpiprt13 at acpi0: bus -1 (RP13)
acpiprt14 at acpi0: bus -1 (RP14)
acpiprt15 at acpi0: bus -1 (RP15)
acpiprt16 at acpi0: bus -1 (RP16)
acpiprt17 at acpi0: bus -1 (RP17)
acpiprt18 at acpi0: bus -1 (RP18)
acpiprt19 at acpi0: bus -1 (RP19)
acpiprt20 at acpi0: bus -1 (RP20)
acpiprt21 at acpi0: bus -1 (RP21)
acpiprt22 at acpi0: bus -1 (RP22)
acpiprt23 at acpi0: bus -1 (RP23)
acpiprt24 at acpi0: bus -1 (RP24)
acpicpu0 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS
acpicpu1 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS
acpicpu2 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS
acpicpu3 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS
acpipwrres0 at acpi0: PUBS, resource for XHC_
acpipwrres1 at acpi0: WRST
acpipwrres2 at acpi0: WRST
acpitz0 at acpi0: critical temperature is 128 degC
acpithinkpad0 at acpi0
acpiac0 at acpi0: AC unit online
acpibat0 at acpi0: BAT0 model "00HW022" serial  2535 type LiP oem "SANYO"
acpibat1 at acpi0: BAT1 model "01AV406" serial  3303 type LiP oem "SMP"
"INT3F0D" at acpi0 not configured
"LEN0071" at acpi0 not configured
"LEN006C" at acpi0 not configured
"INT0E0C" at acpi0 not configured
acpibtn0 at acpi0: SLPB
"PNP0C14" at acpi0 not configured
acpibtn1 at acpi0: LID_
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"MSFT0101" at acpi0 not configured
"INT3394" at acpi0 not configured
"USBC000" at acpi0 not configured
acpivideo0 at acpi0: GFX0
acpivout at acpivideo0 not configured
cpu0: Enhanced SpeedStep 2904 MHz: speeds: 2801, 2800, 2700, 2500, 2400, 2200, 2000, 1800, 1600, 1500, 1300, 1100, 800, 700, 600, 400 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 7G Host" rev 0x02
"Intel HD Graphics 620" rev 0x02 at pci0 dev 2 function 0 not configured
xhci0 at pci0 dev 20 function 0 "Intel 100 Series xHCI" rev 0x21: msi
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 addr 1
pchtemp0 at pci0 dev 20 function 2 "Intel 100 Series Thermal" rev 0x21
"Intel 100 Series MEI" rev 0x21 at pci0 dev 22 function 0 not configured
ppb0 at pci0 dev 28 function 0 "Intel 100 Series PCIE" rev 0xf1: msi
pci1 at ppb0 bus 1
ppb1 at pci0 dev 28 function 2 "Intel 100 Series PCIE" rev 0xf1: msi
pci2 at ppb1 bus 58
iwm0 at pci2 dev 0 function 0 "Intel Dual Band Wireless-AC 8265" rev 0x78, msi
ppb2 at pci0 dev 29 function 0 "Intel 100 Series PCIE" rev 0xf1: msi
pci3 at ppb2 bus 60
nvme0 at pci3 dev 0 function 0 "Samsung SM961/PM961 NVMe" rev 0x00: msi, NVMe 1.2
nvme0: SAMSUNG MZVLW1T0HMLH-000L7, firmware 6L7QCXY7, serial S35ANX0J808745
scsibus1 at nvme0: 1 targets
sd0 at scsibus1 targ 0 lun 0:  SCSI4 0/direct fixed
sd0: 976762MB, 512 bytes/sector, 2000409264 sectors
pcib0 at pci0 dev 31 function 0 "Intel 200 Series LPC" rev 0x21
"Intel 100 Series PMC" rev 0x21 at pci0 dev 31 function 2 not configured
azalia0 at pci0 dev 31 function 3 "Intel 200 Series HD Audio" rev 0x21: msi
azalia0: codecs: Realtek/0x0298, Intel/0x280b, using Realtek/0x0298
audio0 at azalia0
ichiic0 at pci0 dev 31 function 4 "Intel 100 Series SMBus" rev 0x21: apic 2 int 16
iic0 at ichiic0
em0 at pci0 dev 31 function 6 "Intel I219-LM" rev 0x21: msi, address 54:e1:ad:79:27:e4
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
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
wsmouse1 at pms0 mux 0
pms0: Synaptics clickpad, firmware 8.2, 0x1e2b1 0x943300
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
efifb0 at mainbus0: 2560x1440, 32bpp
wsdisplay0 at efifb0 mux 1: console (std, vt100 emulation), using wskbd0
wsdisplay0: screen 1-5 added (std, vt100 emulation)
uchcom0 at uhub0 port 1 configuration 1 interface 0 "QinHeng Electronics CH340 serial/parallel" rev 1.10/2.54 addr 2
uchcom0: CH341
ucom0 at uchcom0
ugen0 at uhub0 port 5 "Generic EMV Smartcard Reader" rev 2.01/1.20 addr 3
ugen0: setting configuration index 0 failed
uvideo0 at uhub0 port 8 configuration 1 interface 0 "SunplusIT Inc Integrated Camera" rev 2.00/0.10 addr 4
video0 at uvideo0
umass0 at uhub0 port 15 configuration 1 interface 0 "Generic USB3.0-CRW" rev 3.00/2.04 addr 5
umass0: using SCSI over Bulk-Only
scsibus2 at umass0: 2 targets, initiator 0
sd1 at scsibus2 targ 1 lun 0:  SCSI4 0/direct removable serial.0bda0316501030900000
vscsi0 at root
scsibus3 at vscsi0: 256 targets
softraid0 at root
scsibus4 at softraid0: 256 targets
sd2 at scsibus4 targ 1 lun 0:  SCSI2 0/direct fixed
sd2: 976761MB, 512 bytes/sector, 2000407649 sectors
root on sd2a (15fb1f476651c6ee.a) swap on sd2b dump on sd2b
iwm0: hw rev 0x230, fw ver 22.361476.0, address cc:2f:71:9f:86:7a

The XDehydr8r

SMD board with through-hole components … mostly! :D

Some day, I’ll have an outdoor kitchen. There is half a plan in place for this to happen. But, peppers are coming on strong in the garden, so the outdoor kitchen appliances will have to start and the kitchen designed to house them. Well, it, anyway. Introducing the XDehydr8r, which is designed to go outside in the kitchen. The board actually came first, which was designed in KiCAD — my first attempt to move from Eagle. I have to say, I love KiCAD. Took a bit of a learning curve, but the time was well worth it.

One can simply not dehydrate food without heat and airflow. So, the canon was built out of an inline 6″ fan, a 4″ computer fan, and a heat-gun element. The theory seemed sound. However, like all of my best plans, it wasn’t quite right. Not enough airflow kept the coil overheating and shutting itself off.

I kept designing and building and trimming and working and finishing, while the new, much larger fan shipped in. It finally arrived.

Beefy! Surely, that’ll make it work! On to getting the panel finished up and wiring completed.

Hey, what do you know, it got all wired. Stuff was in place. It was ready for burn in. AIR FLOW! HEAT! … click … off went the heat. … shit.

It was apparent the heat-gun element was not going to work. So, I ordered two halogen bulbs, like the ones used in Frankenroaster! YAY. Success. New heat chamber.

I didn’t like the amount of heat coming from the SSRs. Granted, there is a TON of current flowing through them, but at 40A and tons of heat sinking, it shouldn’t be thus. I don’t trust it. SSRs are notorious for sticking open. So, I decided to replace them with physical relays. I have yet to burn them in, but I’m certain I’ll have better peace of mind.

After those were replaced, I put on the lid. I still need to oil the whole thing, but I feel it’s done. I can watch temps and humidity from my phone, as the data is being fed to a server. Next stop, The kitchen! :D (ok, next stop is the fermentation/dry-age fridge)