From 5d036e42dadd42ac8adf79d6c4b485b1046e421a Mon Sep 17 00:00:00 2001 From: will Date: Mon, 30 Sep 2024 13:29:41 -0600 Subject: [PATCH] Syncthing weirdness --- .gitignore | 0 .well-known/fursona | 0 LICENSE | 0 README.md | 0 about/index.php | 0 blog/blog.atom | 15 ++- blog/comment/comments.css | 0 blog/comment/feed.php | 0 blog/comment/index.php | 0 blog/comment/submit.php | 0 blog/index.php | 0 blog/posts/ai_art/index.md | 0 blog/posts/ai_art/index.php | 0 blog/posts/building_a_normal_server/index.md | 0 blog/posts/building_a_normal_server/index.php | 0 .../posts/building_a_sensible_server/index.md | 121 ++++++++++++++++++ .../building_a_sensible_server/index.php | 1 + .../index.md | 0 .../index.php | 0 blog/posts/discord/index.md | 0 blog/posts/discord/index.php | 0 blog/posts/fediverse_dms/index.md | 0 blog/posts/fediverse_dms/index.php | 0 blog/posts/foodhero/index.md | 3 + blog/posts/foodhero/index.php | 1 + .../guide_blacklist_websites_searxng/index.md | 0 .../index.php | 0 .../searxng.svg | 0 .../guide_blocking_user_agents_nginx/index.md | 0 .../index.php | 0 .../index.md | 0 .../index.php | 0 .../index.md | 0 .../index.php | 0 blog/posts/guide_pihole_lepotato/index.md | 77 +++++++++++ blog/posts/guide_pihole_lepotato/index.php | 1 + .../index.php | 0 .../index.php | 0 blog/posts/make_your_own_cables/index.md | 22 ++-- blog/posts/make_your_own_cables/index.php | 0 blog/posts/my_terrible_distro_hop/index.md | 0 blog/posts/my_terrible_distro_hop/index.php | 0 blog/posts/post.php | 12 +- .../index.md | 0 .../index.php | 0 chromealert.php | 0 etc/index.php | 0 etc/quotes/index.php | 0 favicon.ico | Bin greenhouse/index.php | 0 guestbook/feed.php | 0 guestbook/index.php | 0 guestbook/submit.php | 0 images/isopod.php | 0 index.php | 0 links/index.php | 3 + music/index.php | 3 +- nav.php | 0 not_found.html | 0 old/1/index.html | 0 old/1/mobile.html | 0 old/1/style.css | 0 old/1/tueaday.js | 0 old/2/index.html | 0 old/2/pages/blog.html | 0 old/2/pages/home.html | 0 old/2/pages/links.html | 0 old/2/pages/music.html | 0 old/2/pages/stats.html | 0 old/2/script.js | 0 old/2/shared.css | 0 old/2/themes/alterra/style.css | 0 old/2/themes/deeptwisty/style.css | 0 old/2/themes/default/style.css | 0 old/2/themes/geocities/style.css | 0 old/2/themes/gruvbox/style.css | 0 old/2/themes/none/style.css | 0 seasonal.php | 0 stats/index.php | 0 stats/packages.txt | 0 stuff/EnchantedToolsPack_v1.zip | Bin stuff/beat/digital.css | 0 stuff/beat/frame.php | 0 stuff/beat/index.php | 0 stuff/beat/pixel.css | 0 stuff/beat/sketch.css | 0 stuff/beat/time.php | 0 stuff/firefoxrss/feed.php | 0 stuff/index.php | 0 stuff/neon_boost_times.html | 0 stuff/rssfilter.php | 0 stuff/spotifycdnsilly/ip.php | 21 +++ stuff/webgarden/image1.html | 0 stuff/webgarden/image2.html | 0 stuff/webgarden/image3.html | 0 stuff/webgarden/image4.html | 0 stuff/webgarden/index.php | 0 stuff/webgarden/status.php | 0 stuff/webgarden/style.css | 0 stuff/webpkiller/webpkiller.cmd | 0 stuff/webpkiller/webpkiller.py | 0 stuff/webpkiller/webpkiller.sh | 0 stuff/webpkiller/webpkiller_win.zip | Bin style.css | 41 +++++- uses/compier/index.php | 2 +- uses/index.php | 4 +- 106 files changed, 306 insertions(+), 21 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .well-known/fursona mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 about/index.php mode change 100644 => 100755 blog/blog.atom mode change 100644 => 100755 blog/comment/comments.css mode change 100644 => 100755 blog/comment/feed.php mode change 100644 => 100755 blog/comment/index.php mode change 100644 => 100755 blog/comment/submit.php mode change 100644 => 100755 blog/index.php mode change 100644 => 100755 blog/posts/ai_art/index.md mode change 100644 => 100755 blog/posts/ai_art/index.php mode change 100644 => 100755 blog/posts/building_a_normal_server/index.md mode change 100644 => 100755 blog/posts/building_a_normal_server/index.php create mode 100755 blog/posts/building_a_sensible_server/index.md create mode 100755 blog/posts/building_a_sensible_server/index.php mode change 100644 => 100755 blog/posts/deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit/index.md mode change 100644 => 100755 blog/posts/deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit/index.php mode change 100644 => 100755 blog/posts/discord/index.md mode change 100644 => 100755 blog/posts/discord/index.php mode change 100644 => 100755 blog/posts/fediverse_dms/index.md mode change 100644 => 100755 blog/posts/fediverse_dms/index.php create mode 100755 blog/posts/foodhero/index.md create mode 100755 blog/posts/foodhero/index.php mode change 100644 => 100755 blog/posts/guide_blacklist_websites_searxng/index.md mode change 100644 => 100755 blog/posts/guide_blacklist_websites_searxng/index.php mode change 100644 => 100755 blog/posts/guide_blacklist_websites_searxng/searxng.svg mode change 100644 => 100755 blog/posts/guide_blocking_user_agents_nginx/index.md mode change 100644 => 100755 blog/posts/guide_blocking_user_agents_nginx/index.php mode change 100644 => 100755 blog/posts/guide_fix_youtube_buffering_firefox/index.md mode change 100644 => 100755 blog/posts/guide_fix_youtube_buffering_firefox/index.php mode change 100644 => 100755 blog/posts/guide_how_to_automount_drives_on_boot_in_linux/index.md mode change 100644 => 100755 blog/posts/guide_how_to_automount_drives_on_boot_in_linux/index.php create mode 100755 blog/posts/guide_pihole_lepotato/index.md create mode 100755 blog/posts/guide_pihole_lepotato/index.php mode change 100644 => 100755 blog/posts/guide_self_host_safely_with_wireguard/index.php mode change 100644 => 100755 blog/posts/guide_things_i_keep_having_to_google/index.php mode change 100644 => 100755 blog/posts/make_your_own_cables/index.md mode change 100644 => 100755 blog/posts/make_your_own_cables/index.php mode change 100644 => 100755 blog/posts/my_terrible_distro_hop/index.md mode change 100644 => 100755 blog/posts/my_terrible_distro_hop/index.php mode change 100644 => 100755 blog/posts/post.php mode change 100644 => 100755 blog/posts/unity_runtime_fee_and_proprietary_software/index.md mode change 100644 => 100755 blog/posts/unity_runtime_fee_and_proprietary_software/index.php mode change 100644 => 100755 chromealert.php mode change 100644 => 100755 etc/index.php mode change 100644 => 100755 etc/quotes/index.php mode change 100644 => 100755 favicon.ico mode change 100644 => 100755 greenhouse/index.php mode change 100644 => 100755 guestbook/feed.php mode change 100644 => 100755 guestbook/index.php mode change 100644 => 100755 guestbook/submit.php mode change 100644 => 100755 images/isopod.php mode change 100644 => 100755 index.php mode change 100644 => 100755 links/index.php mode change 100644 => 100755 music/index.php mode change 100644 => 100755 nav.php mode change 100644 => 100755 not_found.html mode change 100644 => 100755 old/1/index.html mode change 100644 => 100755 old/1/mobile.html mode change 100644 => 100755 old/1/style.css mode change 100644 => 100755 old/1/tueaday.js mode change 100644 => 100755 old/2/index.html mode change 100644 => 100755 old/2/pages/blog.html mode change 100644 => 100755 old/2/pages/home.html mode change 100644 => 100755 old/2/pages/links.html mode change 100644 => 100755 old/2/pages/music.html mode change 100644 => 100755 old/2/pages/stats.html mode change 100644 => 100755 old/2/script.js mode change 100644 => 100755 old/2/shared.css mode change 100644 => 100755 old/2/themes/alterra/style.css mode change 100644 => 100755 old/2/themes/deeptwisty/style.css mode change 100644 => 100755 old/2/themes/default/style.css mode change 100644 => 100755 old/2/themes/geocities/style.css mode change 100644 => 100755 old/2/themes/gruvbox/style.css mode change 100644 => 100755 old/2/themes/none/style.css mode change 100644 => 100755 seasonal.php mode change 100644 => 100755 stats/index.php mode change 100644 => 100755 stats/packages.txt mode change 100644 => 100755 stuff/EnchantedToolsPack_v1.zip mode change 100644 => 100755 stuff/beat/digital.css mode change 100644 => 100755 stuff/beat/frame.php mode change 100644 => 100755 stuff/beat/index.php mode change 100644 => 100755 stuff/beat/pixel.css mode change 100644 => 100755 stuff/beat/sketch.css mode change 100644 => 100755 stuff/beat/time.php mode change 100644 => 100755 stuff/firefoxrss/feed.php mode change 100644 => 100755 stuff/index.php mode change 100644 => 100755 stuff/neon_boost_times.html mode change 100644 => 100755 stuff/rssfilter.php create mode 100755 stuff/spotifycdnsilly/ip.php mode change 100644 => 100755 stuff/webgarden/image1.html mode change 100644 => 100755 stuff/webgarden/image2.html mode change 100644 => 100755 stuff/webgarden/image3.html mode change 100644 => 100755 stuff/webgarden/image4.html mode change 100644 => 100755 stuff/webgarden/index.php mode change 100644 => 100755 stuff/webgarden/status.php mode change 100644 => 100755 stuff/webgarden/style.css mode change 100644 => 100755 stuff/webpkiller/webpkiller.cmd mode change 100644 => 100755 stuff/webpkiller/webpkiller.py mode change 100644 => 100755 stuff/webpkiller/webpkiller.sh mode change 100644 => 100755 stuff/webpkiller/webpkiller_win.zip mode change 100644 => 100755 style.css mode change 100644 => 100755 uses/compier/index.php mode change 100644 => 100755 uses/index.php diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.well-known/fursona b/.well-known/fursona old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/about/index.php b/about/index.php old mode 100644 new mode 100755 diff --git a/blog/blog.atom b/blog/blog.atom old mode 100644 new mode 100755 index df5169a..006644b --- a/blog/blog.atom +++ b/blog/blog.atom @@ -3,7 +3,7 @@ isopod.cool blog https://isopod.cool/blog/ - 2024-02-28T00:00:00+00:00 + 2024-09-20T00:00:00+00:00 isopod.cool webmaster https://isopod.cool/ @@ -12,12 +12,23 @@ + + How to Set Up Pi-Hole (On a Le Potato) + guide_pihole_lepotato + + 2024-09-20T00:00:00+00:00 + 2024-09-20T00:00:00+00:00 + How to set up Pi-hole, a network-wide DNS-level ad-blocker, on the particular discount Raspberry Pi I did it on. + + + + You Should Learn To Make Cables make_your_own_cables 2024-09-09T00:00:00+00:00 - 2024-09-09T00:00:00+00:00 + 2024-09-14T00:00:00+00:00 I saved $140 by splicing together my own audio cables, and you can too! diff --git a/blog/comment/comments.css b/blog/comment/comments.css old mode 100644 new mode 100755 diff --git a/blog/comment/feed.php b/blog/comment/feed.php old mode 100644 new mode 100755 diff --git a/blog/comment/index.php b/blog/comment/index.php old mode 100644 new mode 100755 diff --git a/blog/comment/submit.php b/blog/comment/submit.php old mode 100644 new mode 100755 diff --git a/blog/index.php b/blog/index.php old mode 100644 new mode 100755 diff --git a/blog/posts/ai_art/index.md b/blog/posts/ai_art/index.md old mode 100644 new mode 100755 diff --git a/blog/posts/ai_art/index.php b/blog/posts/ai_art/index.php old mode 100644 new mode 100755 diff --git a/blog/posts/building_a_normal_server/index.md b/blog/posts/building_a_normal_server/index.md old mode 100644 new mode 100755 diff --git a/blog/posts/building_a_normal_server/index.php b/blog/posts/building_a_normal_server/index.php old mode 100644 new mode 100755 diff --git a/blog/posts/building_a_sensible_server/index.md b/blog/posts/building_a_sensible_server/index.md new file mode 100755 index 0000000..ceed2ac --- /dev/null +++ b/blog/posts/building_a_sensible_server/index.md @@ -0,0 +1,121 @@ +It has become clear to me that the [laptop NAS](../building_a_normal_server/) I built in December of last year, while a fun project and a good learning experience, is unfit for the purpose that I need it to fulfill and is best stripped for parts and replaced. Here I'll detail the main reasons why it sucks and my plan to build something just a little bit more sensible. + +## What In God's Name Have I Done + +To get you up to speed in case the limit of your attention span is somewhere between one blog post and two blog posts, as of late last year I had been using an old gaming laptop as a home server for Minecraft and such things to great effect for a while, and had decided that I also wanted a proper NAS. Rather than buy a whole new CPU, motherboard, and RAM for this purpose, I saw fit to attempt to upgrade, or rather modify, or rather pervert, bastardize, and generally corrupt my existing laptop to have the storage capacity I wanted. + +The end result of this initiative was a gaming laptop with a hole cut in the bottom to accept connections to a 2-port SATA controller card occupying the space where the WiFi card used to be, perched atop a custom chassis hewn of hardware store aluminum rods and 3d-printed brackets, within which was contained four high-capacity 3.5" HDDs, a pair of dubious SATA "splitters" to connect them all to the laptop, an ATX PC power supply to power the drives, and the pared-down mainboard out of a Supermicro enterprise-grade drive shelf to interface the power supply with a power button. + +It was beautiful, and for reasons that are entirely beyond my ability to grasp, it didn't end up working very well. + +This is where we find our intrepid hero today. + +## This Whole Enterprise Was Fundamentally Ill-Conceived + +I was expecting this thing to have problems, but I was unable to anticipate the specific problems it ended up having. Performance is... fine, actually. Better than expected, even. That horrible little 2-port SATA expander, or, failing that, the SATA multiplexers, are almost certainly bottlenecking the bandwidth to the HDDs, but it's fast enough to saturate the gigabit network infrastructure in my house, so it doesn't really matter. + +In fact, this little fucker is absolutely perfect for hosting an SMB share. It's been great for backups and the extensive collection of Linux ISOs that I install to machines on my network using Jellyfin. + +The real problem is stability. Crashing has been a constant problem, especially when I touch anything software-wise. I try to update an app and it crashes. I try to install Syncthing and it crashes. I *browse* for new apps to install in the TrueNAS web UI and it bloody crashes. It crashed while running a system update once. I briefly attempted to spin up a Minecraft server on this thing and it crashed when I went to turn Minecraft *off*. Sometimes I'll go to use Jellyfin and it just won't be there and I'll have to troubleshoot it, which usually involves a good couple reboots. This must be how people felt dealing with old versions of Windows. Put shrimply, this is fucking unusable. + +Like the Windows Vista users of old, I have no clue where to even begin diagnosing this. The one possibility I've got is that it could have something to do with the fact that my laptop keeps throwing "SMART errors" during boot, but like, I'd expect TrueNAS to complain if something was actually wrong and even then I've tried and failed to diagnose the SMART errors anyway! + +Whatever this is, I feel pretty well hopeless to fix it, and even then, it's also been getting some worrying temperature readings as of late and when I tried to re-paste it I stripped one of the screws holding the cooler on. So I guess short of some surgical dremel-ing of some tiny screws that's never gonna improve. With all that to contend with, I'm about ready to give up on this thing and start from scratch, properly this time. + +However, despite all the problems with the laptop itself, all the other hardware has been nothing short of totally rock-solid. All of it has worked as advertised and I'll be carrying the drives and, if possible, the PSU1 over into the new system. + +## Something Just A Little Bit More Sensible + +### Angle of Attack + +Firstly, as previously mentioned, the PSU and storage are accounted for already. I have eight total drives I want to put in the system: two 256GB SSDs as mirrored boot devices, 2 1TB SSDs, also mirrored, for TrueNAS apps and such things, and four big boy hard disks for bulk storage. Most of that stuff was bought for the original build, but the mirrored SSDs proved infeasible in the end. I don't strictly *need* them, but it would be very nice to have. Anything in serious consideration will need some way to accommodate my preponderance of SATA devices. + +This narrows down the possibilities considerably. Namely, a lot of the common advice for cheap or beginner home servers doesn't apply to me. A mini PC or almost any used consumer desktop wouldn't have enough space for drives, and anything new is right out for the same reasons plus cost — half the reason I did the laptop NAS project in the first place was to *save* money. + +I briefly considered getting a used workstation PC of some description. A used Lenovo Thinkstation P520 would have mounting space for all my drives and plenty of performance, but the proprietary motherboard, PSU, and power delivery system in general gave me pause, both for [repairability reasons](https://isopod.zone/notes/9uwehufw3t) and because I wasn't confident I could actually run power to all the drives. And that's the *best* option I've found. + +I could get a used rack-mount server, like a Dell PowerEdge or similar. This is also a decent option, and it would be *quite* cost-effective, but I've got a few good reasons not to. First, most of these servers have old Xeon datacenter chips in them that are still good for many home server tasks, but aren't particularly fast or efficient. Take this PowerEdge R730 for instance: + +![An Ebay listing for a Dell PowerEdge R730, with two Xeon E5-2623 v4 CPUs and 128GB of RAM, for $187 CAD, plus $57 CAD in shipping.](ebaypoweredge.png) + +This has two Xeon E5-2623 v4 datacenter CPUs. At 4 cores/8 threads and 85 watts apiece, this server would have the same core count as the Ryzen 5700G in my desktop for almost three times the power draw, and *half* the single-threaded performance. In many cases, especially for servers, lackluster single-core performance isn't a problem, but if I want to run game servers on this, which I do, these chips may struggle. + +Plus, rack-mount servers kind of suck for home use. They're very unweildy if you don't have a rack, and I don't, nor do I have anywhere to put one. They also tend to be *loud*. If you think the gaming laptop you've been using in your bed for the past three years and never cleaned sounds like a jet engine, you ain't seen nothing yet. Having one of these in my room would be intolerable. Of course, the R730 is a 2U server with no provisions for my 3.5" drives anyway, but a unit that could accommodate them wouldn't be much better. + +Logically, then, the only remaining option is to build a system from scratch, out of used parts, to my specifications. That, therefore, is what I shall do, and I think I can do it for a similar amount of money to the GPU upgrade I was *planning* to get before this whole thing really started becoming an issue. Here's my plan: + +### My Grand Design + +In spite of the machine it's in, I've found that the i7-9750H in the laptop performs admirably for my use case. I don't really need a CPU upgrade here — hence my efforts to repurpose the existing one — unfortunately, however, the BGA form factor of this particular chip is incompatible with 100% of consumer desktop motherboards, so I'll be needing a new CPU regardless. Though I don't want or need a major upgrade, I also don't want a *downgrade* if I can avoid it, so I'll primarily be looking at other high end gaming chips from the era. + +I initially gravitated towards the 9750H's desktop counterpart, the i7-9700K, for these reasons, but the significantly lower price, improved energy efficiency, superior upgrade potential, support for unregistered ECC RAM, and *vastly* superior multicore performance2 of its contemporary, the Ryzen 7 3700X, made the latter a bit of a no-brainer. I found one on Ebay for a cool 100 Canadian Prize Tokens and a matching X370 motherboard with *eight* whole SATA ports, which astute readers will recall is the exact amount I need, for about a hundred of God's True Imperial Dollars. As for cooling, the 3700X is a 65-watt chip, so the box cooler I've got lying around from my 5700G should suffice. + +The 3700X lacks an integrated GPU, so I'll need a dedicated one in some form. Since I'm installing a server OS that's gonna output plain text to a display exactly once per install, I won't need a ton of graphics horsepower. I considered something like a GT 730 for a token display out and nothing more, however I'd like some transcoding capability for Jellyfin as well. After some research into cheap, low power GPUs for this I settled on an Nvidia Quadro P400 for about 60 CanuckBucks™ after shipping. + +I've seen some redditors complaining about the P400's performance doing two 4k HDR streams at once, but all that tells me is that it can handle at least four simultaneous 1080p SDR streams, which is what I intend to use it for, without breaking a sweat. If I *really* need more, I can always upgrade to an Arc A310 once driver support for those in TrueNAS is less sketchy. + +TrueNAS likes a lot of RAM for various ZFS-related purposes. The laptop seems happy with 32 gigs, so I'll start there and upgrade down the road if need be. I'll grab something cheap from a reputable brand, and I'll probably get it new since used prices on DDR4 are currently not really better. + +I'd also like to get a pair of 10Gb network cards at some point to attach this thing directly to my main computer for maximum transfer speeds between the two, but that's not really critical and I'll worry about it later. + +Finally, I need a case. Fortunately, this time around I don't have to build one myself. After a cursory search on PCPartPicker for cases with four each of 2.5" and 3.5" drive mounts didn't turn up anything for particularly cheap, I went to look at used ones and didn't initially have much luck there either. I scrolled through about a dozen listings for off-brand gamer-spec swill that wasn't even priced better than the name brand stuff before filtering by used and finding a bunch of listings just labeled "PC case", none of which I could confirm met my exacting needs. + +The first case I found that obviously fit my use case was this thing, the weathered old shell of a Pentium III tower from the dawn of the ATX standard: + +
+
+ A beige PC tower with four 5.25" bays and two external 3.5" bays, populated with an optical drive and a floppy drive respectively. The only visible branding is a Pentium III sticker and a badge that reads "TOUCH". +
I'm curious about the branding here. If anyone recognizes that "TOUCH" badge, get in the comments.
+
+
+ +Honestly, I kind of love it. I'll transfer the 5.25"-to-3.5" adapter cage I bought to mount the drives in my homebrew case to the bays in this thing wholesale, and I can 3D print some brackets to mount the SSDs in the 3.5" bays. And, somewhat counterintuitively, it might actually be *easier* to build in than those modern RGB glass side panel power supply basement having ass Gaming™ cases: + +![The inside of the same old PC case. Its layout is extremely pragmatic: motherboard in the very bottom corner, PSU in the top corner above it, and all the drive bay mounts are in a cage lining the front side. In other words, it looks like an old PC case.](servercaseinside.jpg) + +Just look at it. Everything's right there. I can take the side panel off and instantly get to every component with my hands without spinning the case around and I don't need to run any cables through any fucking gromets to get them where they're going. It looks supremely convenient. As the type of person who enjoys *building* computers and not just using them as decoration, this is beautiful to me. + +The biggest issue with this case is the cooling. It's absolutely pitiful by modern standards. Based on these photos, it looks like there's a single 92mm, possibly 80mm, fan each for intake and exhaust, with a passive vent in the side. I'm already bringing some extra cooling to the table — my drive cage has a mount for a 120mm fan, and I can use the fan in my much better ventilated modern PSU for extra exhaust, and with a 65W CPU and no meaningfully powerful GPU that might just suffice. If not, I've got some ideas involving 3D printing and/or a hole saw to make this thing a little less stuffy. + +### Actually Building The Sucker + +Everything above that heading there was in large part written a few weeks ago, when I was ordering all this stuff and it was all fresh in my mind. We now rejoin our intrepid hero as she receives the last of her Ebay orders and prepares for initial testing. + +When I got it, the case was pre-loaded with all the stuff in those photos up there: a CD-ROM, a floppy drive, a power supply, a single 80mm intake fan3, and a generous helping of, to quote the PC repair technician from my Youtube shorts feed, Swamp Gooch™. The first thing I did was take the case apart and remove all that stuff, because I certainly wasn't going to be using any of it, least of all the dubious PSU. The next thing I did was hose it down to get rid of the almost thirty years of Home/Office Residue that had accumulated inside. + +Once it was clean, the case did, admittedly, need some updating. The set of motherboard standoffs in the case was incomplete — six of the usual nine were present — so I ordered new ones. I also had to design that 3D printed adapter bracket for my 2.5" SSDs myself, as well as a mount for another 80mm fan to eke some more airflow out of those unused front expansion bays4. + +After the case was prepared and the mounting brackets printed, there wasn't much to do until all the other parts arrived. I learned about some interesting limitations of the motherboard in my main computer while testing to make sure the GPU worked. I think I might be the sort of person who buys motherboards with the high-end chipset now. + +The last major component to arrive was the motherboard, and it arrived missing some important hardware, namely the M.2 standoff and the stock mounting bracket for the CPU cooler, the latter of which was *in the photo on the Ebay listing*! Fortunately both parts are pretty cheap to order online. + +Assembly went smoothly; not much to say here that you couldn't get from Linus Tech Tips. It turned out that *both* the original standoffs *and* the ones I ordered were the wrong height — the original ones were too long, and mine were too short. I ended up putting the original standoffs back in because neither were so far off as to render the rear I/O unusable and my standoffs made installing the GPU properly impossible. + +I had to use a couple of breadboard wires to hook up the power LED, since the pins on my motherboard were right next to each other and the connector in the case was 3 pins wide with a blank one in the middle, for some reason. Also, unlike *some* cases I've worked in, accessing the modular PSU cables was an absolute joy5. + +What didn't go smoothly was actually booting the thing. On first power on, it failed to POST and got stuck on a code "8" on the little seven-segment diagnostic code display. I initially assumed it was training the memory, since this can take a while on first boot, but after about five minutes of no change I started getting worried. I read a lot of very worrying forum posts that suggested that either the CPU or motherboard were straight up dead, and I very nearly bought another CPU to see if that was the case. First, though, I decided to try updating the BIOS using the "BIOS Flashback" feature, and that fixed it immediately. + + + + + +--- + +

1. I'm not referring to the Seasonic S12III from the last installment. That thing is honestly a little sketchy for me to be using it in a proper server if I don't have to, and I don't. When my PC's power supply, a Seasonic GX650, exploded, I RMA'd it and then bought a beefier one to replace it with, and the replacement unit Seasonic sent me went in my server, and will be going in the new one. The S12III is serving as an improvised benchtop PSU using one of these bad boys at the moment.

+ +

2. If cpubenchmark.net is to be believed, anyway.

+ +

3. I could, in theory, reuse this fan, but I don't want to. It's so nasty that attempting to run it seems like a good way to invent a new respiratory illness, and even if I cleaned it the bearing is geriatric and the performance probably isn't very good, plus my modern motherboard might not even have a header for it. Its replacement will suit me much better.

+ +

4. You can download the model for the fan mount and corresponding grill I designed here. I'd publish the drive bracket but the one I printed needed some modification in order to work, and I don't want to spend the time and filament to refine it right now.

+ +

5. Mind you, this case is well north of 20 years old. This case shipped to me with a Pentium III sticker on it. This thing may well predate modular power supplies as a concept, and somehow it accommodates them infinitely better than the 2-year-old case on my personal machine, which barely has room to insert a modular PSU, let alone actually get at the cables afterwards. I don't understand how this is possible.

\ No newline at end of file diff --git a/blog/posts/building_a_sensible_server/index.php b/blog/posts/building_a_sensible_server/index.php new file mode 100755 index 0000000..f572f79 --- /dev/null +++ b/blog/posts/building_a_sensible_server/index.php @@ -0,0 +1 @@ +1, a micro SD card, and an HDMI monitor and keyboard for initial setup, though you can use SSH to access it over the network after that. + +As for power, the Le Potato draws about 4 watts at most and as such can run off of any spec-compliant USB port, but the official guides on the Libre Computer forum make a big deal of ensuring the power supply and cable you're using are high-quality and of a generous rating — they recommend at least a 1.5A USB power source and a suitably **thick** cable to avoid any power issues. Pi-hole is a pretty low-demand application, though, even for this class of hardware, so you'll probably be fine regardless of what you use. + +Like the Pi, the Le Potato lacks any built-in storage, so you'll need to supply a micro SD card2. The docmentation for Armbian, the OS we'll be using, recommends an "A1" or "A2" class micro SD card, which you can more or less only get from Sandisk right now, for their *significantly* improved random access performance. Ideally you should use one of these, especially since they can be had quite cheaply nowadays, but it's not the end of the world if you have something else kicking around and use that instead. As for capacity, 16GB should be plenty, and you could probably get away with 8GB. + +Finally, I'd recommend getting a case. Fortunately, the Le Potato has the same dimensions and layout as, and as such is compatible with cases for, the Raspberry Pi 3 Model B. I 3D printed [this one](https://www.printables.com/model/67681-raspberry-pi-3b-case/files) in PETG, and a wide array of cases are available for cheap online if you can't do the same. I especially like the one that looks like a little NES. + +## Booting an OS + +Since I'd heard the Le Potato was broadly compatible with the Pi, I initially tried booting a Raspbian image from the official Raspberry Pi flasher tool. Maybe predictably, this did not work. The next thing I tried, and what we'll be using, is Armbian, a lightweight port of Debian designed for tiny SBCs like this one that happens to have a page on its website specifically for the Le Potato. + +[Go to that page](https://www.armbian.com/lepotato/) and get one of the **Server** images. I used the latest Debian one. Then write it to the SD card using your favourite flashing tool (I recommend [Balena Etcher](https://etcher.balena.io/)), and insert that into the slot on the Le Potato. + +To boot just connect it to power to turn it on and the boot sequence will start automatically. You can have the ethernet connected as you do this, but it seems like the keyboard and possibly display may need to be connected afterwards, so try that if it doesn't boot for you. The Le Potato has a series of indicator LEDs on it next to the micro USB port: essentially, red means it has power; red and blue means it's on; and red, green, and flashing blue means it's running software. Once you get to that last state, you should get output to the monitor soon. + +Now we set up Armbian. This process is detailed in the [official documentation](https://docs.armbian.com/User-Guide_Getting-Started/#how-to-boot) for Armbian, and it's fortunately pretty straightforward. It'll ask you to change the default root password, and then give you a choice of shell. Either is perfectly fine, but I like ZSH. Then it will prompt you to create a login for your user account (make sure you're writing these logins down, btw) and then ask for your timezone and other basic local information. If you're connected to the network, it should auto-detect this stuff. If you're left with a root prompt here (it should look like this: `lepotato:~:#`) log out and log back in with the credentials you just created. + +This is a good time to assign a static IP address to the Le Potato, so you can access it with SSH going forward. Once you have, reboot it and you should be able to access it via SSH at the local IP you just gave it. On Linux that's just `ssh yourusername@yourlocalip` in the terminal, and on Windows [PuTTY](https://putty.org/) is allegedly good for this. + +Now that you're logged in, run a quick software update: + +``` +sudo apt update +sudo apt upgrade +``` + +## Setting Up Pi-hole + +Installing Pi-hole is pretty simple. Just download and run the install script: + +``` +wget -O basic-install.sh https://install.pi-hole.net +sudo bash basic-install.sh +``` + +The script will prompt you for some settings. Most of them are pretty straightforward. I selected "Yes" for everything and the first of the three entries for Quad93 as my upstream DNS provider. Set a privacy level to your preference, but maybe check with anyone else you live with before selecting "show everything". Once the installation is done, you can change the web admin password with `pihole -a -p` if desired, and then log in by typing the Le Potato's static IP into your browser. + +The last step to get Pi-hole working on your network is to set its static IP as your router's primary DNS server. The Pi-hole devs recommend setting your Pi-hole device as the only DNS server for the network to guarantee it always gets every request, but I set a couple of fallbacks in case my Pi-hole server ever goes down and it seems to still work fine. + +## Post-setup Configuration + +Pi-hole has a lot of powerful functionality, but here I'd like to focus on fine-tuning your blocklist. The default one is pretty good, but [The Firebog](https://firebog.net/) has a lot of good ones if you'd like to broaden your coverage — I use one or two of the green ones from each category. + +I live with other people who aren't as tolerant of tech weirdness as I am, so for something that'll affect *everything* on the network, convenience often takes priority over maximum adblocking. In other words, I don't want to break anything. There's an [official list](https://discourse.pi-hole.net/t/commonly-whitelisted-domains/212) of commonly whitelisted domains that are important for certain functionality but get blocked by default, and I use [this script](https://github.com/anudeepND/whitelist) to import them and keep the list up to date automatically with a crontab entry. + +Beyond that, [this article](https://avoidthehack.com/best-pihole-blocklists) has a lot of good information blocklist-wise. + +--- + + + +- [Le Potato official guides](https://hub.libre.computer/t/aml-s905x-cc-le-potato-overview-resources-and-guides/288) +- [Armbian image download page for Le Potato](https://www.armbian.com/lepotato/) +- [Armbian docs](https://docs.armbian.com/) +- [Balena Etcher](https://etcher.balena.io/) +- [Pi-hole docs](https://docs.pi-hole.net/) +- [The Firebog (blocklist list)](https://firebog.net/) +- [Commonly whitelisted domain list](https://discourse.pi-hole.net/t/commonly-whitelisted-domains/212) +- [Common whitelist importer script](https://github.com/anudeepND/whitelist) +- [Avoid The Hack blocklist article](https://avoidthehack.com/best-pihole-blocklists) + +--- + +

1. You can, theoretically, use wi-fi for this, but I would strongly recommend against it.

+ +

2. The Le Potato also has a connector for an EMMC module, but that's a whole different can of worms.

+ +

3. Quad9's filtering is intended to block malware domains. I like having it as an extra layer of security on top of Pi-hole. Any of the DNS providers in the list should work fine, and you can always change it later.

\ No newline at end of file diff --git a/blog/posts/guide_pihole_lepotato/index.php b/blog/posts/guide_pihole_lepotato/index.php new file mode 100755 index 0000000..f572f79 --- /dev/null +++ b/blog/posts/guide_pihole_lepotato/index.php @@ -0,0 +1 @@ +0, but it works. +
+
+ A 3.5mm jack to 4-pin mini XLR adapter cable with a shiny black braided exterior +
This braided sheathing can be had for cheap on Amazon by searching "braided cable sleeve". I used the 6mm variant here, and it comfortably fits the three 24AWG wires.
+
+
This isn't the only time I've had to do this, either β€” I, through a bizarre series of events, happen to own a piece of musical equipment made in the 1960s, in the Netherlands, with weird output jacks to match: @@ -22,12 +25,13 @@ These are 2-pin DIN connectors, from the same family as the 5-pin DIN connectors In order to get this thing connected to my other equipment, I had to fashion my own adapter cable out of a stereo-to-dual-mono TRS splitter cable and two of those connectors purchased standalone from the internet. -![A Stereo 1/4" TRS to dual mono 2-pin DIN adapter cable](homebrew2pindincable.jpg) +
+
+ A Stereo 1/4 inch TRS to dual mono 2-pin DIN adapter cable +
I wonder how far away from me the nearest other cable of this type is.
+
+
I'm not going to attempt to teach you how to do this here β€” there's plenty of people on Youtube who are much more qualified to do that than me β€” but I think if you're at all comfortable messing with electronics this is a good skill to have. It's proven surprisingly useful to me, not just as a hobbyist who builds weird electronic gizmos for fun but as a casual enjoyer and maker of music. -If this ever happens to you, consider saving the money on some bullshit expensive cable and spending it on some [soldering gear](https://pine64.com/product-category/pinecil/) instead. It's easier than you probably think it is and it can save you, like, a lot of money. - ---- - -0. As of writing, I've ordered some cable sleeve to put over this. I'm not a monster. Remind me to replace this photo after it gets here and the cable looks presentable. \ No newline at end of file +If this ever happens to you, consider saving the money on some bullshit expensive cable and spending it on some [soldering gear](https://pine64.com/product-category/pinecil/) instead. It's easier than you probably think it is and it can save you, like, a lot of money. \ No newline at end of file diff --git a/blog/posts/make_your_own_cables/index.php b/blog/posts/make_your_own_cables/index.php old mode 100644 new mode 100755 diff --git a/blog/posts/my_terrible_distro_hop/index.md b/blog/posts/my_terrible_distro_hop/index.md old mode 100644 new mode 100755 diff --git a/blog/posts/my_terrible_distro_hop/index.php b/blog/posts/my_terrible_distro_hop/index.php old mode 100644 new mode 100755 diff --git a/blog/posts/post.php b/blog/posts/post.php old mode 100644 new mode 100755 index 9a67812..b3e217e --- a/blog/posts/post.php +++ b/blog/posts/post.php @@ -20,15 +20,15 @@ foreach($feed->entry as $entry) { - <?php echo($title); ?> - "); ?> - "); } - + ?> Seirdy - A look at search engines with their own indexes + + modem.io - How to Monetize a Blog +

More Stuff

diff --git a/music/index.php b/music/index.php old mode 100644 new mode 100755 index 5efc91c..e91a2df --- a/music/index.php +++ b/music/index.php @@ -76,6 +76,7 @@ Patricia Taxxon - Walks of LungRed Vox - RealignKill Memory Crash - American Automatic + Everything Everything - Raw Data FeelTOBACCO - Fucked Up Friends 3Justice - Audio, Video, DiscoLAZERPUNK - Synthicate @@ -86,7 +87,7 @@ γƒŸγƒ©γ‚―γƒ«γƒŸγƒ₯ージカル - Hawaii: Part IIFoo Fighters - Concrete and GoldGreen Day - Revolution Radio - Alt-J - This Is All Yours + Alt-J - This Is All YoursMatt Gray - The Last Ninja 2 (C64) OSTScalameriya - Aeon Core diff --git a/nav.php b/nav.php old mode 100644 new mode 100755 diff --git a/not_found.html b/not_found.html old mode 100644 new mode 100755 diff --git a/old/1/index.html b/old/1/index.html old mode 100644 new mode 100755 diff --git a/old/1/mobile.html b/old/1/mobile.html old mode 100644 new mode 100755 diff --git a/old/1/style.css b/old/1/style.css old mode 100644 new mode 100755 diff --git a/old/1/tueaday.js b/old/1/tueaday.js old mode 100644 new mode 100755 diff --git a/old/2/index.html b/old/2/index.html old mode 100644 new mode 100755 diff --git a/old/2/pages/blog.html b/old/2/pages/blog.html old mode 100644 new mode 100755 diff --git a/old/2/pages/home.html b/old/2/pages/home.html old mode 100644 new mode 100755 diff --git a/old/2/pages/links.html b/old/2/pages/links.html old mode 100644 new mode 100755 diff --git a/old/2/pages/music.html b/old/2/pages/music.html old mode 100644 new mode 100755 diff --git a/old/2/pages/stats.html b/old/2/pages/stats.html old mode 100644 new mode 100755 diff --git a/old/2/script.js b/old/2/script.js old mode 100644 new mode 100755 diff --git a/old/2/shared.css b/old/2/shared.css old mode 100644 new mode 100755 diff --git a/old/2/themes/alterra/style.css b/old/2/themes/alterra/style.css old mode 100644 new mode 100755 diff --git a/old/2/themes/deeptwisty/style.css b/old/2/themes/deeptwisty/style.css old mode 100644 new mode 100755 diff --git a/old/2/themes/default/style.css b/old/2/themes/default/style.css old mode 100644 new mode 100755 diff --git a/old/2/themes/geocities/style.css b/old/2/themes/geocities/style.css old mode 100644 new mode 100755 diff --git a/old/2/themes/gruvbox/style.css b/old/2/themes/gruvbox/style.css old mode 100644 new mode 100755 diff --git a/old/2/themes/none/style.css b/old/2/themes/none/style.css old mode 100644 new mode 100755 diff --git a/seasonal.php b/seasonal.php old mode 100644 new mode 100755 diff --git a/stats/index.php b/stats/index.php old mode 100644 new mode 100755 diff --git a/stats/packages.txt b/stats/packages.txt old mode 100644 new mode 100755 diff --git a/stuff/EnchantedToolsPack_v1.zip b/stuff/EnchantedToolsPack_v1.zip old mode 100644 new mode 100755 diff --git a/stuff/beat/digital.css b/stuff/beat/digital.css old mode 100644 new mode 100755 diff --git a/stuff/beat/frame.php b/stuff/beat/frame.php old mode 100644 new mode 100755 diff --git a/stuff/beat/index.php b/stuff/beat/index.php old mode 100644 new mode 100755 diff --git a/stuff/beat/pixel.css b/stuff/beat/pixel.css old mode 100644 new mode 100755 diff --git a/stuff/beat/sketch.css b/stuff/beat/sketch.css old mode 100644 new mode 100755 diff --git a/stuff/beat/time.php b/stuff/beat/time.php old mode 100644 new mode 100755 diff --git a/stuff/firefoxrss/feed.php b/stuff/firefoxrss/feed.php old mode 100644 new mode 100755 diff --git a/stuff/index.php b/stuff/index.php old mode 100644 new mode 100755 diff --git a/stuff/neon_boost_times.html b/stuff/neon_boost_times.html old mode 100644 new mode 100755 diff --git a/stuff/rssfilter.php b/stuff/rssfilter.php old mode 100644 new mode 100755 diff --git a/stuff/spotifycdnsilly/ip.php b/stuff/spotifycdnsilly/ip.php new file mode 100755 index 0000000..e8332ff --- /dev/null +++ b/stuff/spotifycdnsilly/ip.php @@ -0,0 +1,21 @@ +"; + +?> + + + + + + + <?php echo($addr); ?> + + "); ?> + + + + + diff --git a/stuff/webgarden/image1.html b/stuff/webgarden/image1.html old mode 100644 new mode 100755 diff --git a/stuff/webgarden/image2.html b/stuff/webgarden/image2.html old mode 100644 new mode 100755 diff --git a/stuff/webgarden/image3.html b/stuff/webgarden/image3.html old mode 100644 new mode 100755 diff --git a/stuff/webgarden/image4.html b/stuff/webgarden/image4.html old mode 100644 new mode 100755 diff --git a/stuff/webgarden/index.php b/stuff/webgarden/index.php old mode 100644 new mode 100755 diff --git a/stuff/webgarden/status.php b/stuff/webgarden/status.php old mode 100644 new mode 100755 diff --git a/stuff/webgarden/style.css b/stuff/webgarden/style.css old mode 100644 new mode 100755 diff --git a/stuff/webpkiller/webpkiller.cmd b/stuff/webpkiller/webpkiller.cmd old mode 100644 new mode 100755 diff --git a/stuff/webpkiller/webpkiller.py b/stuff/webpkiller/webpkiller.py old mode 100644 new mode 100755 diff --git a/stuff/webpkiller/webpkiller.sh b/stuff/webpkiller/webpkiller.sh old mode 100644 new mode 100755 diff --git a/stuff/webpkiller/webpkiller_win.zip b/stuff/webpkiller/webpkiller_win.zip old mode 100644 new mode 100755 diff --git a/style.css b/style.css old mode 100644 new mode 100755 index d48e0fe..0731883 --- a/style.css +++ b/style.css @@ -226,10 +226,36 @@ figure.quote figcaption { margin-top: var(--stdpadding); } -/* Misc */ +/* Media, plus captions thereof */ img, picture, video { max-width: 100%; + max-height: 50rem; } +:is(body, p, picture) > img, picture, video, figure.media { + margin: auto; + display: block; +} + +figure.media { + width: fit-content; +} +figure.media > div { + display: inline-block; +} +figure.media > div > figcaption { + width: min-content; + min-width: 100%; + font-size: 0.9em; + padding: calc(var(--stdpadding) * 0.9); + margin: 0; + margin-bottom: initial; + margin-top: -4px; + border-left: var(--stdaccentborder); + background-color: var(--blockbg); + box-sizing: border-box; +} + +/* Misc */ summary:hover { cursor: pointer; } @@ -386,4 +412,17 @@ hr { * { transition-duration: 0s !important; } +} + +@media print { + body { + text-shadow: none; + color: black; + } + h1 { + margin-top: initial; + } + nav, form { + display: none; + } } \ No newline at end of file diff --git a/uses/compier/index.php b/uses/compier/index.php old mode 100644 new mode 100755 index 8b0b61c..516cc2d --- a/uses/compier/index.php +++ b/uses/compier/index.php @@ -10,7 +10,7 @@

the compier

my main computer

-

My main PC is an ever-shifting, questionably arranged agglomeration of components selected as if at random, designed and assembled by yours truly circa March of '22. Apparently, I have a lot to say about it.

+

My main PC is an ever-shifting, questionably arranged agglomeration of components selected as if at random, initially designed and assembled by yours truly circa March of '22. Apparently, I have a lot to say about it.

Internals

CPU — AMD Ryzen 7 5700G

I chose the 5700G mainly for its inclusion of an integrated GPU, not because I wanted to use it, but because I wanted it as a fallback in case my dedicated GPU failed. In fact, I tested and Blender renders perform worse when I use both GPUs in parallel instead of just the one.

diff --git a/uses/index.php b/uses/index.php old mode 100644 new mode 100755 index d5167bc..e4049a0 --- a/uses/index.php +++ b/uses/index.php @@ -40,6 +40,8 @@

I run mine with Prusa's satin textured bed plate for easier removal of PETG parts (I managed to damage the included smooth plate printing big stuff in PETG) and a hardened steel E3D Nozzle X™ for printing with filaments with abrasive additives. I'd like to upgrade the hotend to a Revo one at some point if I can find the money.

CyberPower CP1500PFCLCD

A UPS I bought to run my computer, server, and related paraphernalia off of. I got it for all the normal reasons you get a UPS (power outage protection and such-like) and it has thus far performed as advertised. It has yet to be put to the test in a real power outage, but it's kept my computer alive through a couple blips at this point. Highly recommend getting one.

+

Netgear GS308

+

It's a gigabit network switch. It has 8 ports. It performs as advertised. What else is there to say?

Software

Desktop Operating System - EndeavourOS (Linux)

My main computer runs EndeavourOS with the GNOME desktop environment. I chose it mostly to get the AUR, which has occasionally proved useful, but at this point I'm kind of stuck here because all the config files for my programs are in standard locations, god forbid, and everyone else is on flatpaks now, which fuck that all up for no good reason. I once failed to switch to Fedora because of this.

@@ -49,7 +51,7 @@

Mobile Operating System - Graphene OS (Android)

My phone runs Graphene OS, a hardened, de-googled fork of the Android Open Source Project. I bought a Pixel specifically to run this and I'm glad I did. It's very nice. I'm especially a fan of the improved control over app permissions.

Web Browser - Firefox

-

I quite like Firefox. It's extremely customizable, especially if you know where to look, the devtools are better, and there's a wealth of privacy tools available that just kind of don't exist in Chrome (including adblockers as of late). It can also edit PDFs now!

+

I quite like Firefox. It's extremely customizable (especially if you know where to look), the devtools are better, and there's a wealth of privacy tools available that just kind of don't exist in Chrome (including adblockers as of late). It can also edit PDFs now!

On top of being generally superior, I also use Firefox on principle. It's currently the only major browser outside of the Apple-exclusive Safari that isn't built atop Google's Chromium, and I don't like the idea of Google having total monopolistic control over all web browsers.

Firefox is one of the only pieces of software I'll actively advocate switching to, so go do it. Do it now. It, like essentially all other browsers, can import your data from its competition, and I'd also recommend using this profile generator to fortify it for maximum privacy while you're at it.

All that said, Mozilla is under questionable management at the moment and kind of in Google's pocket anyway, so maybe we shouldn't be relying completely on them to champion the free web. Maybe throw some money in the general direction of the Servo project.