Jason Weatherly
DevOps Engineer, electronics tinkerer, Linux and Homelab enthusiast. Also a big fan of anime, a good book, and the occasional short circuit...
Build completed. The Lian-Li A3-mATX case is a bit larger than expected, but it kinda had to be with respect to the 360mm AIO that's mounted in it. Had to abandon top-mounting the AIO because the radiator was too thick, but managed to get everything installed and managed.
Final specs:
- CPU: AMD Ryzen 9 5950X
- GPU: AMD Radeon 7900XT
- RAM: 2x16GiB DDR4-3200 (can't remember exactly which brand)
- Motherboard: ASUS STRIX X570-I Gaming mITX
- PSU: Corsair 1000W SFX
- Cooler: Arctic Liquid Freezer III Pro 360mm AIO
- OS: Bazzite (KDE)
The computer is now in its home behind the TV. Later: more playing games.
The whole DIY Steam Machine was kinda an itch to see if I could build one with the parts I already had and to see if there were going to be any issues with the OS, software, things like that. However, after playing some games on it and just enjoying it: I think I'm gonna keep this build around for awhile.
There are a few issues that need to be addressed: the components are friggin' hot. The 5950X + 7900XT combo in that small case is not helping out at all. The NCASE M1 is being replaced with a slightly larger case (the Lian-Li A3-mATX) and a bigger cooler (the ARCTIC Liquid Freezer III Pro 360). Once those come in I can get everything moved over into the new case, get the IO shield installed, and that should also reduce the amount of fan noise as well since the AIO shouldn't have to do as much work to keep things cool.
Update on the Steam Machine knock-off: like I was saying earlier, there are some sharp edges on going down your own path building your own. The latest sharp bit is resuming from sleep which I'd argue is pretty critical for any "set top box". Can you wake it up from sleep via the controller and jump back into gaming?
Right now for my build, the answer is *yes. Unfortunately, that yes has the caveat of "and when it comes back from sleep you will be presented with the most psychedelic version of SteamOS".
I still need to figure out exactly how to fix this so it doesn't happen, but cycling the "Automatically Set Resolution" under Settings -> Display will get the display back to where it's supposed to be.
I'm pretty stoked as I sit here drinking a celebratory beer: finally paid off the credit card. Took a long while, but I'm pretty happy looking at the $0 balance on it. Now it's time to finish up the last of the debt: my car loan. I owe about $4,600 and I'm pretty sure I can get that number down to zero before June.
WiFi antennas installed, things are downloading/installing. Next step is to take this downstairs, plug it into the home theater system, and see what small issues will crop up.
Homelab migration done, all of the VMs are on Debian which makes things easier to manage. Currently deleting the old mirrors out of storage and running a few backups at the moment. I think it's time to maybe play some vidya games and just enjoy the rest of Sunday.
It's that time of year again as I start getting everything ready for the Palmetto Cyber Defense Competition. Upgraded the switch in the VoIP (Cisco SG300 24-port PoE -> Cisco C1000-48P-4G-L 48-port PoE), got everything configured which took far, far too long, then started verifying that all of the phones would boot and call each other. I still have a ton of phones to go and label, but the hard part is done. The annoying part is the only part left...lol
Everything pulled out of the old build and ready for installation into the new case along with the new cooler and what have you. Smol motherboard, but yuuuge GPU by comparison. Basically the same hardware going into the larger case but with much improved cooling and a significantly reduced risk of snapping something off of the GPU.
Pictures of the "final version" of the Steam Machine knock-off. The case looks great, and there was absolutely no way I was gonna pull the motherboard out of the case to put the IO shield on it...lol
Holy crap, I just spent the last half-hour tracking down the wireless antennas for the STRIX X570-I motherboard...wireless is a hard requirement for the Steam Machine. Now I need to find a wireless keyboard and I can get that moved downstairs and connected to the living room TV.
So, my initial review of the Yaelink SIP-T42S before I have the in hand:
- The documentation exists, but can be a pain in the ass to track down exactly what you need.
- Looks like I've got everything already setup to serve the boot configurations and should work with my FreePBX installation. I'll probably get these setup as backups in case I lose a couple of Digium D40 phones during the competition.
- Firmware is still available for the phone, but it is EoL.
- English isn't the greatest in the documentation, but it gets the job done.
- Cheap as hell as I bought 15 of these for $34 which is absolutely insane.
Almost 600 lines of OpenAPI documentation later and I'm done. I think I'll package the `/doc` endpoint with the Docker images since I can just copy over the static directory and have it live in the container. I'll add directions on how to add the docs to the standalone binaries as well which should cover that use case. Overall, it turned out pretty well.
Work on the Sisyphus server rewrite in #golang has begun, and I forgot how much I enjoyed Gin. All of the GET routes have been implemented, and only a few random crashes had to be figured out...next up is the rest of the routes...lol
https://git.jamesthebard.net/jweatherly/sisyphus-server-golang
Got all of the phones online and working, replaced two bad phones, added a third phone, and got the smol Netgear PoE switch working. The Cisco C1000 switch's configuration is good to go and all of the IP addresses/networks and phone numbers have been documented. Pretty sure everything is a go!
Welp, figured having some spares would be a good idea so I found an eBay seller selling a lot of 15 Yaelink phones...should be pretty "interesting" to set up and this totally is a good idea and I won't be taking any opinions that don't also think it's awesome...lol
So, spent most of the day getting Handbrake compiled with the `svt-av1-psyex` and `svt-av1-essential` forks of the SvtAv1 encoder. However, I did win that battle and both are now available in the `sisyphus-client` containers. Definitely a pain in the ass, but it's nice to have options depending on what you want to use. Also updated the documentation to make sure I don't forget which is which.
I still need to implement some pipelines to build these, but holy crap the Handbrake compiles take forever to finish.
https://git.jamesthebard.net/jweatherly/-/packages/container/sisyphus-client/latest
I'm done with the server for the time being, got everything working the way I want it to and the performance is where I wanted it to be at before starting some client work.
https://git.jamesthebard.net/jweatherly/sisyphus-server-golang/releases
So, decided to get them rookie /queue numbers up so did a quick bit of caching. For a 12-job queue, I went from 240 RPS (Python/Flask) to 680 (Golang/Gin) then to 3400 RPS with some proper caching. The /workers endpoint would benefit as well, but I think its performant enough though I may end up adding a bit of caching later.
After fixing two AUR PKGBUILD files and a bit of patching, the initial rough Arch repo is online. Even made the package list look good with some fancy indexing. The compile takes a long time, but since it's in a VM I'm not too bothered about it. I will probably make an actual build system, but for now the crontab will suffice.
A nice afternoon running some brutal encodes across the homelab. This is initial testing of the 5fist fork of the `svt-av1-psy` encoder with some pretty severe settings. Hoping that the results are worth the wait, but gotta wait until the first few results come out of the workers.
The madness continues. I'm working on getting Handbrake compiled with support for the SvtAv1 `psyex` fork, and after quite a few attempts and fixing a few patches I have it working. This will end up in the final `sisyphus-client:latest` container assuming the current tests pass. I have something similar I need to do with the `sisyphus-client:latest-essential` container with the `essential` SvtAv1 fork as well, but things are looking good.
Oh yeah, things are working as intended now. Unfortunately, I did crank the settings so these encodes are going to take about an hour each. However, the homelab seems to be up to the challenge.
I think this might be the most frustrating thing I've dealt with: the `av1an` encoder not being able to create files in the client container. Definitely has free space, the user is running in the container as `root` (also does the this as a regular user) but absolutely refuses to run.
The mystery continues.
Time to put the newly rewritten server into action. Broke out my totally stock firmware LG WH16NS60 drive, and started in on some Bluray TV episode sets. Currently ripping at ~9.2X which definitely helps out.
Think I'm gonna target AV1 via `av1an` and use the `svt-av1-psyex` encoder. Already have the subtitles and attachments though I'll have to offset the subs by 1000ms for everything to work out.
Documentation continues. Done with the `queue` and `worker` endpoints, probably about 50% of the way done with this. I still need a good way to package all of this up with the binary which means putting the `openapi.yaml` file somewhere on the net so it can be pulled if need be. I'll deal with that later...lol
Ansible playbook done "enough", everything is now matching. Evidently I did forget to transition one server over to Debian, but got that sorted and now everything is running pretty well.
The Sisyphus client rewrite continues after a bit of a break. The ffmpeg module is mostly finished and should serve as a good template for handbrake, av1an, mkvmerge, and cleanup modules. Logging is progressing pretty well. The config has been expanded slightly and can now pull from TOML files on top of the standard environment variables.
Nerd sniped myself this time: after getting sniped yesterday with showing that for primes `p >= 5` that `24 | p^2 - 1`, I decided to look at primes `p, q` where `p, q >= 5` and see if `24 | p^2 - q^2`.
So, got the server in place but discovered that the Docker image that I created that has the Sisyphus client and all of the binaries like ffmpeg, av1an was not very happy. Ffmpeg crashed because it couldn't find the libSvtAvcEnc.so.4 library which was because I had a custom version of it installed (svt-av1-psyex).
Got the Dockerfile fixed by installing svt-av1-psyex and then compiling ffmpeg against those libraries, then installing both svt-av1-psyex and ffmpeg into the final container which makes ffmpeg happy. Also saw an issue where the Vapoursynth lsmash module wasn't being found, but that got tracked down to a stale Docker image (forgot to pull the latest from the repo).
I have two encodes going: one ffmpeg and one av1an which should be the real final test. If they turn out well, attachments where they're supposed to be, etc., etc. then I'll probably start working on documentation and get this out there.
#sisyphus #encoding #av1an #vapoursynth #ffmpeg #svtAv1Psyex
So, ripped my copy of Odin Sphere: Leifthrasir and decided to replay it using shadPS4. So far it is an outstanding experience, no issues, and the murder bird is still an absolute joy to play. Granted, not all PS4 games are compatible, but this one looks to be 100% good to go. Definitely a great way to play the game.
So, the Palmetto Cyber Defense Competition is over and it was a blast even if I'm completely exhausted. However, figured I'd post some code I actually wrote and ran in the competition:
package main
func main() {
for i := 0; i < 8; i++ {
go func() {
for {
}
}()
}
for {
}
}
New PSU in and it's smol. The case should be in here soon and I can get this build back online. Also not pictured, I installed a 2TB NVMe drive in the M.2 slot on the back of the motherboard.