Scaleway's ARM64 VPS has been successfully depenguinated! :) Now you can run FreeBSD on four ThunderX cores, 2GB RAM and 50GB SSD for 3€/month. Awesome!
Also, in the process, I finally discovered the cause of GPT partitions sometimes disappearing on reboot. It was the size of the partition table. It's 128 by default, but sometimes it's not — e.g. on the FreeBSD installer memstick image, it's 2. Creating a third partition with
gpart "succeeded", but the partition disappeared on reboot.
For 0.5 dollars per hour (or currently 0.1/hr if you reserve for 24h?) on packet.net you can get access to a dedicated dual-socket Cavium ThunderX server with 128GB RAM and a 250GB SSD. I took it for a few hours and now lang/crystal, lang/mono and some other ports work on aarch64.
Ironically, these two builds have involved long single-threaded compile processes. In the mono case, parallelism had to be disabled for C# compilation to work around a concurrency bug.
At least building things like WebKitGTK+ (to test a one line patch) and Krita felt awesome :D
BREAKING FreeBSD NEWS: AMDGPU DC works!
The 4.15 drm update apparently did not have amdgpu working yet... but I tried it anyway, since that's just an assertion failure.
Well... it does work. Even with DC (
compat.linuxkpi.dc="1")! Weston didn't work at first, but commenting out its "Disable all the planes" section that was causing a kernel warning solved the problem.
So quite possibly we have Vega support?
Booted into FreeBSD, launched Epiphany (GNOME Web), noticed slowness. Opened htop: 800-1200% load in kernel! Ran dtrace to find hot kernel stacks: it's all ZFS write threads, trying to compress. WTF? I mean, my fault for choosing gzip (I have a tiny SSD for this system, want max compression), but I expect zero I/O right now?! Found a DTrace script to show file I/O.
Turns out Epiphany is constantly writing to and reading from
Yeah, it was downloading the whole Google Safe Browsing database.
I guess that's the most privacy-friendly way to do Safe Browsing, but wow, that's a very surprising behavior. What if I had, like, a dial-up connection or something? :D
It is well known that Enlightenment/EFL is pretty awful. But I had to build it on my FreeBSD box since I'm testing a LuaJIT update and EFL does include LuaJIT support. So while I'm at it, I decided to add Wayland support to the port.
So at least it works, but its behavior is indeed kinda funny. Running their terminal with GL acceleration (
ELM_DISPLAY=wl ELM_ACCEL=opengl terminology) actually does work. Running it without acceleration (
ELM_DISPLAY=wl ELM_ACCEL=no terminology) results in the surface not showing up and… this message:
DRM_IOCTL_I915_GEM_APERTURE failed: Invalid argument Assuming 131072kB available aperture size. May lead to reduced performance or incorrect rendering. get chip id failed: -1  param: 4, val: 0
It's no "SPANK! SPANK! SPANK!" but how exactly did it decide to use an Intel GPU related system call? On my machine that has a Radeon card?!?! When I asked for software rendering??
haha, Phoronix wrote about the stuff I posted on wayland-devel@. So yeah, I'm working on Rust bindings for libweston that would eventually allow me to write the best Wayland compositor ever :)
And fractional HiDPI scaling was pretty easy to add. Wayland apps look awesome. However, X11 apps are blurry now, and bypassing the scaling for Xwayland is not as easy… So I made some changes to my Ports fork to enable Wayland support in more apps. Turns out a lot of complex applications run fine — LibreOffice (!), Inkscape, MyPaint, RawTherapee, Darktable.
The Firefox Wayland support though… is not usable yet :( It looks awesome but EGL isn't working and, even worse, the screen doesn't refresh when it needs to — so you're typing and letters don't appear until you scroll or some time passes. Hopefully this will be fixed soon.
So there's no support in pretty much all Wayland compositors for fancy keyboard mapping utilities like xcape because no one wants a keylogging protocol extension. (Even an access-controlled one!! Why.)
Turns out it's better to just solve this on the evdev level. And I've done it in the coolest way possible: with a tiny sandboxed scripting environment. Meet evscript! It runs Dyon scripts in an environment with evdev, uinput, stdout and nothing else. xcape functionality is already provided in the "standard library" :)
Ported a recent version of the Weston compositor to FreeBSD. Using this as my actual desktop for two days now — works fine. I miss window tiling and a good info bar, but this thing, this thing lets you just rotate windows arbitrarily!! :D
So I was reading the OpenBSD Chromebook Pixel post: it did not wake up from suspend without the TPM driver. Hmm.
Disabled TPM on my Thinkpad X240 and FreeBSD RESUMES FROM SUSPEND!!! Wow. I guess I'll stop using the TPM then (I was using it for SSH keys. And I did unload the tpm kernel module before suspend!)
Managed to get Servo to run with Capsicum sandboxing on FreeBSD!
FreeBSD 12-CURRENT brings the Year of FreeBSD on the Desktop! Currently with some unofficial modifications and building some stuff from source, but you can get evdev, Wayland, Vulkan, all that stuff, with support for Intel Kaby Lake and AMD Polaris (Radeon RX 4xx/5xx) GPUs (and older).
Build kernel with
options EVDEV_SUPPORT and Wayland panic workaround (TODO: Fork)
Awesome cutting edge ports: https://github.com/myfreeweb/freebsd-ports-dank — build Xorg with
UDEV to autodetect/hotplug evdev devices, Mesa with
WAYLAND, Vulkan SDK, Firefox Beta (don't forget to tweak FirefoxSettings), etc.
Fresh GPU drivers:
doas make -C/usr/ports/graphics/drm-next-kmod install clean…
Adventures in printing:
The proprietary blob plugin for HPLIP is ported to FreeBSD by literally saying "this Linux library is actually for FreeBSD" and adding a tiny implementation of a couple glibc functions, amazing! But HPLIP is not necessary for my printer, foo2zjs is an open source driver that supports it.
PostScript is not PostScript, apparently. (Actually my printer wants PDF, it seems — setting generic PDF on the client side when network printing over CUPS worked.)
And if CUPS doesn't see the printer when using the open source drivers, it IS a permissions issue, make sure to restart devd to activate the rule that's included with the cups package. (The fact that HPLIP sees the printer is… odd. Was it running HPLIP stuff as root?)
I've decided to move the VMs on my desktop from VirtualBox to Microsoft Hyper-V. Because reasons.
Actually because I've upgraded my desktop to an AMD Ryzen CPU: first, AMD-V/SVM is not supported by the Intel HAXM thing from the Android SDK, so I wanted to try out Microsoft's Hyper-V based Android "emulator" (VM configurator/runner thingy) instead. Second, giving 16 virtual CPUs on an SMT 8-core to a FreeBSD guest in VirtualBox results in a weird performance issue. (Though giving 4 vCPUs to multiple VMs on a 4-core CPU worked fine.) Third, it's Oracle VM VirtualBox and …
evdev support in the psm driver (with proper support for Synaptics touchpads and Thinkpad Trackpoints) landed in FreeBSD -CURRENT! Just set up libinput in Xorg for all devices, very nice. (Without device autodetection — with devd, Xorg wants to use the old keyboard and mouse drivers. Using the udev backend would work, but freebsd-ports-graphics is currently meh.)
Quake Champions is awesome (as in the gameplay — performance is meh).
Amazon Web Services is not awesome: it wasn't really obvious that promotional credits aren't spent on reserved EC2 instances :( Also HardenedBSD was behaving weird on it (secadm kernel panic, Python libssl segfaults).
But with regular FreeBSD I've set up a Matrix homeserver (Synapse) on EC2! I am now @greg:unrelenting.technology :) It's working as my new IRC bouncer, so with that I've been able to say goodbye to the previous VPS that served this website (which was still running my ZNC).
TIL: Intel chipsets have a hardware watchdog. Just like a Raspberry Pi.
Speaking of the Raspberry Pi watchdog (
bcmwd): it supports 15 seconds max interval. But if you try to run FreeBSD’s
watchdogd with 15 seconds, it’ll still complain. Look in the output — for some reason
watchdogd rounds it up to 17 or something. So the max interval is 9.