<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/feed_style.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="https://www.rssboard.org/media-rss"><channel><title>WeirdTreeThing's Site</title><link>https://tree123.org/</link><description>Recent content on WeirdTreeThing's Site</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>bradyn127@protonmail.com (Brady Norander)</managingEditor><webMaster>bradyn127@protonmail.com (Brady Norander)</webMaster><copyright>Brady Norander</copyright><lastBuildDate>Tue, 28 Jul 2026 12:00:00 -0400</lastBuildDate><atom:link href="https://tree123.org/index.xml" rel="self" type="application/rss+xml"/><icon>https://tree123.org/logo.png</icon><item><title>Server hardware upgrades</title><link>https://tree123.org/posts/server-upgrades/</link><pubDate>Tue, 28 Jul 2026 12:00:00 -0400</pubDate><author>bradyn127@protonmail.com (Brady Norander)</author><guid>https://tree123.org/posts/server-upgrades/</guid><description><![CDATA[<p>For a few years now, I&rsquo;ve been using a small form factor HP gaming desktop as a server to run my website and various other services. The &ldquo;HP Pavilion Gaming Desktop 690-00xx&rdquo;, which I received for free, features an AMD Ryzen 5 2400G (yes, that is a laptop chip in a &ldquo;gaming&rdquo; desktop), 6GB of DDR4 RAM, a 128GB SATA SSD, and 1TB of spinning rust.</p>
<p>While this machine has served me well for the low price of $0, I have been pushing it to its limits for a while. The relatively weak CPU combined with the low amount of memory means that I can&rsquo;t run too much on it at once. I ended up using an Asus Chromebox 3 CN65 (codename TEEMO) as a secondary server to put less load on the HP system. While this did help, I also ran into limitations of the Chromebox&rsquo;s Intel Core i7-8550U CPU still not being quite as powerful as I&rsquo;d like. Having multiple servers also means I need two different systems to cooperate with each other. One of them hosts nginx and uses certbot to get ssl keys, while the other hosts some services which use the same ssl keys. I have a cron job to transfer the keys between the systems, but this is not ideal as it adds more complexity and another thing which could fail.</p>
<p>Another issue I&rsquo;ve been wanting to solve for a while is file storage. My files are currently scattered across several devices with no clear organization system. I want a central system where I can store files (with redundancy) and access them across all of my devices. I also need bulk data storage for my services, including <a href="https://files.tree123.org">files.tree123.org</a>. I currently have bulk data storage on the 1TB HDD in the HP system, but 1TB of data storage isn&rsquo;t much and I will eventually need more than the drive can provide. Another advantage of having a networked storage server is the ability to quickly and easily share files across any device running any OS.</p>
<p>To solve both these problems, I want to build a new server. My goal for this new server is to build an Ultimate Everything Server™. This new server will take on the role that my current HP + Chromebox combo has while also providing serveral TBs of networked storage for me and my services. It will also being significantly faster and able to handle more tasks at once.</p>
<h1 id="the-base-system">The base system</h1>
<p>I didn&rsquo;t want to spend too much money on this project (my upper limit was around $500 USD), and given the current RAM/SSD/HDD crisis, this means I will have to reuse some hardware I already own. Luckily, I had some hardware laying around and doing nothing! A few years ago, I found an old custom built gaming system locally that was being given away for free. I was skeptical of a free PC, but after seeing that it has liquid cooling, I knew it must have somewhat powerful hardware. After picking it up and taking a look, I discovered that it has an Intel Core i7-9700K, 32GB of DDR4-3200 RAM, an ASUS ROG Maxiumus XI Hero motherboard, an NZXT 360mm AIO cooler, and an ASUS ROG 850W platinum PSU. I gave the whole PC a good clean and fired it up, and sure enough it actually worked.</p>
<p>While this gaming hardware may not seem like the best fit for a server, it is still very capable hardware and buying a whole system would cost way too much in this economy. There were a few issues though. The PSU didn&rsquo;t come with any cables beyond the 8-pin CPU power cable, the 24-pin motherboard power cable, and a single SATA power cable being used by the AIO cooler. Since this is a gamer-y case, it only has space to mount two 3.5&quot; HDDs. I plan on using 8 HDDs, so this case will not work.</p>
<h1 id="extra-hardware">Extra hardware</h1>
<p>The first extra piece of hardware I had to get was the case. After doing a bit of research, the <a href="https://www.amazon.com/dp/B0CQZS7KN5">Darkrock Classico Storage Master</a> seemed to be the best budget-friendly case with the ability to mount 10 3.5&quot; HDDs. While this case did seem very appealing, there are some issues with it (you get what you pay for), but more on that later.</p>
<p>The next issue to tackle is powering 8 drives. I found a seller on eBay who sells aftermarket SATA power cables for my PSU, which I ended up ordering two of. With two SATA power connectors per cable, I can use 4 SATA power splitters to power a total of 8 drives while still using the original SATA power cable to power the AIO cooler.</p>
<p>Now for the most expensive part, the drives themselves. The unfortunate truth is you have to get really lucky to find drives for a reasonable price in 2026. New drives are absurdly expensive, and refurbished drives also climbed up in price. I chose to play the &ldquo;eBay Lottery&rdquo; and got 10x 4TB SAS 7200RPM drives for $260. These drives were once part of an IBM PowerSystem and came in caddies, which would have been originally slotted into a PowerSystem. After removing each drive from its caddy, they can be used as normal SAS drives. In order to use these drives in my server, I would need a SAS HBA. I found a listing on eBay for a SAS HBA which includes two cables to break out the two SAS connections on the HBA into a total of 8 connections for the drives.</p>
<h1 id="assembly">Assembly</h1>
<p>Assembly in this case starts out just like any other ATX system. I put the motherboard in and screwed it down in place. The I/O shield is integrated on this board so I did not have to install that.</p>
<p>Before mounting the radiator, I chose to route the radiator fan cables and plug in the CPU power cable. These would be very hard to access with the raditor installed so it makes more sense to do it now. Now I can mount the radiator, but before I could do that, I had to remove the top HDD cage to give myself enough room to mount it.</p>
<p>Next to go in the case is the PSU. This mounts just like any standard ATX PSU. Since this case includes a fan mesh below the PSU, I mounted the PSU with the fan facing down for better airflow. At this point I installed the 24 pin motherboard power cable, the fan cables, and all of the front panel cables.</p>
<p>Now it&rsquo;s time for the HBA. The SAS HBA I bought is fanless, and I heard they can get quite hot, so I had to find a way to cool it down. Luckily, I had a random 12v fan from a different project which I could repurpose for this build. The fan only has two wires, but it can be plugged in to a standard fan header just fine, with the only catch being no speed control.</p>
<p>Finally, the drives can go in. I first had to remove each drive from its caddy. There were two screws on each side securing the drive to the caddy, but I still couldn&rsquo;t get the drive out with those screws removed. The caddy surrounds the drive and seems to be clipped in place. I ended up using a screwdriver to unclip the plastic, damaging most of the caddies in the process. While I would have preferred to not cause damage, these caddies are effectively worthless, so nothing of value was lost. Each HDD cage can now be unscrewed, have the HDDs installed, and be screwed back into the case.</p>
<p>After all of that, the build is now complete!</p>
<p><img src="/images/server-upgrades/front.png" alt="Front side of the final build">
<img src="/images/server-upgrades/back.png" alt="Back side of the final build"></p>
<h1 id="final-thoughts">Final thoughts</h1>
<p>My thoughts on this Darkrock case are complicated. I love the idea of this case, but the execution leaves me a bit disappointed.</p>
<p>The pros of this case are the cheap price and lots of mounting space for various hardware components including HDDs, radiators, and vertical PCIE devices. This case even included some fans and SATA data cables, which I was not expecting at all for a case this cheap.</p>
<p>But everything has a cost, and while this case may not cost a lot of money, it will cost you your sanity. Building in this case is annoying at times. The included bag of screws has every screw type mixed together, so I had to sort the pile of screws to find the correct types I needed. The HDD cages take up a lot of room in the case and can block access to install a radiator. The gap between the back panel of the case and the frame is quite small and the cables connected to my HDDs would not fit. I had to leave half of the back panel not connected to the case because of this. The cable management clip in the back was too small to fit the 24 pin power cable. The HDD cages were slightly annoying to access and felt quite cheap and flexible. The front panel connector was split into several cables instead of having a single large connector (I understand that not all boards share the same common front panel header layout, but a nicer solution I&rsquo;ve seen from other brands is to include a breakout adpater). All of these small issues lead to an unpleasant building experience.</p>
<p>Aside from the case, I am overall quite happy with my new server. As of writing this I have used the server for a good few months and have had no major issues. Despite the frustrations, I did enjoy working on this project, and I finally got to crimp an ethernet cable to use on this build! It also feels nice to finally put some spare hardware to work instead of sitting and collecting dust.</p>
]]></description><media:thumbnail url="https://tree123.org/images/server-upgrades/cover.png"/></item><item><title>How I Created My Own WiFi 6 Access Point</title><link>https://tree123.org/posts/diy-wifi6-ap/</link><pubDate>Fri, 09 Aug 2024 13:35:56 -0400</pubDate><author>bradyn127@protonmail.com (Brady Norander)</author><guid>https://tree123.org/posts/diy-wifi6-ap/</guid><description><![CDATA[<h2 id="why-though">Why though?</h2>
<p>My current access point is a cheap Netgear WAC104 running OpenWRT that I found on ebay for $20. While it does work well for the price, the speeds aren&rsquo;t the best, especially when I&rsquo;m far away from it. It also uses the older WiFi 5 standard, instead of the newer WiFi 6 standard.</p>
<p>While I could buy a new WiFi 6 access point, they tend to cost more, and I don&rsquo;t want to spend a lot of money on one. Creating one myself from spare parts I already have not only doesn&rsquo;t cost any money, but is also more fun!</p>
<h2 id="the-hardware">The hardware</h2>
<p>My access point is powered by an <a href="http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5-plus.html">Orange Pi 5 Plus</a>, with a Rockchip RK3588 SoC, 16GB of ram, a 512GB NVMe SSD, and dual 2.5GBe. While this is very overkill for just an access point, I thought it would be fun to see how well this works as one. This will most likely not be a permanent solution so I don&rsquo;t mind using it for this purpose.</p>
<p>The most important piece of hardware for this is the WiFi chip. I&rsquo;m using a <a href="https://www.mediatek.com/products/broadband-wifi/mediatek-filogic-330">MediaTek MT7922</a>. This chip supports WiFi 6/6E (6E is unable to be used for the access point though, more on that later). While it was intended for consumer devices like laptops, it works (mostly) well enough in an access point.</p>
<p>A note for anyone trying this at home, the WiFi chip used matters a lot. It needs to support the correct frequency in AP mode. Modern Intel chips will not work for this, see <a href="https://wiki.archlinux.org/title/Software_access_point#Cannot_start_AP_mode_in_5_GHz_band">here</a> for more details.</p>
<h2 id="the-software">The software</h2>
<p>The Orange Pi is running <a href="https://postmarketos.org/">postmarketOS</a>, an Alpine-based Linux distro. I chose postmarketOS because I&rsquo;m a big fan of it for being lightweight and easy to work with, and also I was the one who created the postmarketOS port for this device.</p>
<p>A few tools are needed for the access point. One of them being <code>bridge-utils</code>, which provides the <code>brctl</code> command for creating and modifying bridge network devices. The other one is <code>hostapd</code>, which is what creates the access point.</p>
<p><code>hostapd</code> by itself doesn&rsquo;t do anything except create an access point, which means that devices that connect to the access point are unable to communicate with anything else. A bridge is needed to connect the wifi interface to the upstream ethernet interface, which is connected to my router.</p>
<p>Before I can configure anything, I need to stop NetworkManager as it will try to take control over my network interfaces.</p>
<pre tabindex="0"><code># rc-service networkmanager stop
</code></pre><p>Next, I need to create and configure my bridge interface <code>br0</code>. For this I need to know which ethernet interface is being used. <code>ip a</code> will show the status of every interface.</p>
<pre tabindex="0"><code># ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether c0:74:2b:fe:67:95 brd ff:ff:ff:ff:ff:ff
3: eth1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 2e:13:c5:10:8d:37 brd ff:ff:ff:ff:ff:ff
    inet 10.69.0.198/24 brd 10.69.0.255 scope global dynamic noprefixroute eth1
       valid_lft 6988sec preferred_lft 6988sec
    inet6 fe80::c886:593b:9a47:5269/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: wlan0: &lt;BROADCAST,MULTICAST&gt; mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 12:56:ff:43:13:2a brd ff:ff:ff:ff:ff:ff
</code></pre><p><code>eth1</code> has an ip address which means I want to add that one to my bridge.</p>
<pre tabindex="0"><code># brctl addbr br0
# ip link set br0 up
# brctl addif br0 eth1
</code></pre><p>Now, eth1 is part of the bridge <code>br0</code>.</p>
<pre tabindex="0"><code># ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether c0:74:2b:fe:67:95 brd ff:ff:ff:ff:ff:ff
3: eth1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 2e:13:c5:10:8d:37 brd ff:ff:ff:ff:ff:ff
    inet 10.69.0.198/24 brd 10.69.0.255 scope global dynamic noprefixroute eth1
       valid_lft 6824sec preferred_lft 6824sec
    inet6 fe80::c886:593b:9a47:5269/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: wlan0: &lt;BROADCAST,MULTICAST&gt; mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 12:56:ff:43:13:2a brd ff:ff:ff:ff:ff:ff
5: br0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 2e:13:c5:10:8d:37 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::6434:8fff:feaf:e880/64 scope link 
       valid_lft forever preferred_lft forever
</code></pre><p>Next, configuring <code>hostapd</code>. I looked at various resources online for configuring <code>hostapd</code>, and found <a href="https://github.com/morrownr/USB-WiFi">a github repo</a> with pre-made configs for hostapd, including <a href="https://github.com/morrownr/USB-WiFi/blob/main/home/AP_Mode/hostapd-WiFi6.conf">one for WiFi 6</a>. I would have liked to use WiFi 6E instead of 6, but this chip doesn&rsquo;t support 6GHz in AP mode. The config already had everything I need, including a line to use <code>br0</code>, so I simply copied it and changed the ssid and password. Before I can run hostapd, I need to unblock wifi with <code>rfkill</code>.</p>
<pre tabindex="0"><code># rfkill unblock wifi
# hostapd hostapd.conf &amp;
</code></pre><p>Now, I can connect to the access point from any device capable of WiFi 6. The screenshot below from my phone shows the WiFi type is WiFi 6.
<img src="/images/diy-wifi6-ap/wifi6-details.png" alt="Screenshot of wifi network details"></p>
<h2 id="how-well-does-it-work">How well does it work?</h2>
<p>Very well!</p>
<p>WiFi 5 speeds:
<img src="/images/diy-wifi6-ap/wifi5-speeds.png" alt="Screenshot of wifi 5 speedtest"></p>
<p>WiFi 6 speeds:
<img src="/images/diy-wifi6-ap/wifi6-speeds.png" alt="Screenshot of wifi 6 speedtest"></p>
<p>Over a 200 mbit/s improvement!</p>
<h2 id="my-final-thoughts">My final thoughts</h2>
<p>I&rsquo;m impressed with how well this works as an access point. I wasn&rsquo;t expecting the improvement to be that great. Despite the improved speeds, I will not be keeping this as a permanent solution for a few reasons. One is I would like to use my Orange Pi for other projects, and I can&rsquo;t do that if it is my access point. Maybe if I had a lower end SBC that is more fit for the task of being an access point I would keep using it. Another reason is the fan is quite annoying. The case fan is always on as it is directly connected to 5v over GPIO. The SBC itself has a PWM fan which while it isn&rsquo;t on at all times, it&rsquo;s more annoying than the case fan when it is on. And without the case fan, the board ends up being hotter.</p>
]]></description><media:thumbnail url="https://tree123.org/images/diy-wifi6-ap/opi5.png"/></item><item><title>Hello World</title><link>https://tree123.org/posts/hello-world/</link><pubDate>Wed, 24 Jan 2024 15:44:29 -0500</pubDate><author>bradyn127@protonmail.com (Brady Norander)</author><guid>https://tree123.org/posts/hello-world/</guid><description><![CDATA[<h2 id="hello-world">Hello World!</h2>
<p>For a while now, I&rsquo;ve been wanting somewhere to document the various projects I work on, so I created this. I intend to go into detail about my thought process and why I did things the way I did. Maybe you&rsquo;ll even learn a thing or two from here.</p>
<p>I don&rsquo;t know how often I&rsquo;ll create new posts here, but I already have plans for a new project, which will end up being a few posts.</p>
]]></description></item></channel></rss>