Homelabs
Homelabs
Homelabing has recently become a huge part of my life and I both appreciate and regret what it has done for me. On one hand I have significantly more control over my digital privacy but on the other, it has been a huge time sink, and sometimes I feel like I could have spent that time better. I tend to be pretty stubborn when it comes to getting things working just the way I want them to, even to a fault. I have spent weeks configuring services just right only to find something better after I'm done. I'll usually scrap all the work I have already done in favor of the better service, but I don't feel great about having wasted so much time.
iMessage On Android
The most obvious example of this happened while I was switching from iOS to a fork of Android, I didn't want to lose access to iMessage because it is better than any messaging standard that Android has, RCS comes close but that requires me to run proprietary Google software on my phone which I would prefer to avoid doing as much as I can. With that being said I don't trust Apple either, I use this for casual conversations between friends that I would be more than ok with having on the street. Even though iMessage and RCS are "end-to-end encrypted" I fully believe that both Apple and Google have a plain text log of ever iMessage and RCS message that has ever been sent, the difference is that Google is definitely selling that data, Apple probably isn't. So, back to getting iMessage working on a fork of Android, I originally chose to go with a service called BlueBubbles, from my initial impression it seemed like it would be able to cover the scope of what I needed, that being; a working iMessage client on an android phone that is able to send messages over iMessage using a phone number, not an email. Using a phone number is important, without it to use iMessage all of my contacts with iPhones would have to update my contact to have an email address instead of a phone number, then all my iMessages would come though that, if a contact didn't update my info on their end messages would route over SMS, this is unacceptable. SMS is an insecure standard that should have fallen out of mainstream use 15 years ago. With my project scope in mind I got to work with setting up BlueBubbles, unfortunately this was easier said than done. BlueBubbles uses an application installed on a Mac (the server) and an application installed on a phone (the client), the server uses the iMessage client on the mac to send and receive messages, and it then relays all that information to the client. Unfortunately, this system requires a computer running macOS and I did not have one of those, nor did I intend on acquiring one. My solution to this problem was to "simply spin up a macOS VM in Proxmox" little did I know how much time that decision would consume. It took me a few days to get macOS working, and another few days to get iMessage working. iMessage and other apple services like iCloud have extra verification steps to make sure that the device that you are running is a legitimate Apple created macOS device, to get iMessage to run in a VM you have to spoof some values to Apples servers. After I had a fully functional macOS install, I went ahead with the BlueBubbles server installation process, and here is where we hit our big problem. BlueBubbles Requires Google Firebase for sane notifications, I say sane because also allow you to keep a constant connection to the server, but this is impractical, and it destroys your phone's battery life. As I have already established, I am not fond of Google and their data privacy practices and I have completely de-googled my life, luckily I was prepared for this, I had purchased a pre-paid sim in cash a few days before this and used it to create a new Google account that was not tied to my real identity at all. The BlueBubbles setup process is very well-thought-out, and the devs included an automatic script that sets up your Firebase project automatically so you don't have to do anything. It did not work for me, to this day I don't know why, but it would fail with an error code I couldn't find anywhere online. After over a week of troubleshooting I finally got it working by following the manual Firebase setup instructions on the BlueBubbles docs to about the halfway point and running the script, just following the manual instructions also didn't work for me, likely either the fault of Google or I. By this point I had been at this for 2-3 weeks, and it was finally in a working state, then I found out about OpenBubbles, after some reading about it, I grabbed a spare Mac Mini from my work ran through the setup process and had it working within 40 minutes, I then unplugged the Mac, and it has been working just fine ever since. OpenBubbles works in a very different way than BlueBubbles does. I mentioned before that BlueBubbles has a client and a server application, OpenBubbles skips the server-side application entirely and communicates directly with Apples servers by spoofing the Mac's information on device. This means that you don't need any sort of persistent server you just need one time access to a legitimate Apple macOS device, it does not matter what happens with the device after you do this, if its on or off, if it is used or not, you could even sell it if you wanted to, and OpenBubbles would still work. How I didn't find out about OpenBubbles in all of my research around BlueBubbles I do not know.
Self Hosted Privacy
Despite all that I just said I still love homelabs, they are incredible for experimenting with technology and a great way to learn new skills. I started trying to de-google my life in the summer of 2024 and about a month ago I stopped using YouTube and officially stepped into the fully de-googled life. Obviously I still need to be able to access YouTube, but I don't want Google to be able to link my traffic with my real identity. Part of the reason YouTube took me to long stop using was my very strict scope for it. I needed to be able to use YouTube privately, without being signed in, but I needed to be able to save playlists as well as watch and search history and that needed to sync between any device I watched YouTube on. Something like that wouldn't be easy to set up without a homelab or a VPS, and I'm not a fan of subscriptions. One day I stumbled across a project called Invidious, Invidious is fucking amazing. It does literally everything I could ever want from a service like this and, in a lot of cases it is able to bypass YouTube's sign in requirement on videos (Not age restricted ones though). I had a little bit of trouble getting Invidious up and running, mainly with getting the 2 independent services it requires communicating using SSL, but after a few days I managed to get it running smoothly.
Self Hosted Services
I use Obsidian for almost all of my writing, I use Obsidian because I haven't found anything better yet, I briefly played with the idea of using Emacs + Org Mode over an ssh tunnel to my homelab, but that won't work for me because I need my notes accessible on my phone. My original solution for this was to pay for obsidian sync which is quite pricey. One of my favorite things about homelabs is seeing my progress over time. Back when I first got a homelab I trued and failed to set up a self-hosted sync service for Obsidian, at the time I just did not understand enough of what I was doing to get the service working. A few months later when it came time to renew my Obsidian sync subscription I decided to cancel it instead and have another go at self-hosting my own sync, I have been happily using my own sync service for months now. Many times self-hosting services like this allow you to have a higher quality service tailored to your needs, my sync service is set up in a way that works extremely fast, if I have the same note open on my phone and my laptop (keep in mind both notes are markdown file stored locally on device) and I make an edit on my laptop the change is reflected on my phone in less than a second. Services like this have a ton more flexibility than non self-hosted services, Obsidian Sync is an expensive on/off switch, it either syncs or it doesn't, but my self-hosted service has the option for P2P connections to make it sync with in milliseconds instead of a second, this isn't something I need, so I haven't set it up, but you can't usually get this level of customization or personalization of service with non self-hosted options.
Conclusion
This is my first time writing for a blog. I am aware of how disorganized and sporadic my writing is, that something I am hoping to improve on by writing more. This post was not though through in advance at all, I just sat down and dumped my thoughts onto a page. The next posts here will have a more coherent theme or topic, they will mostly be about things that I am doing currently within technology. I do hope that at least some part of you enjoyed this writing enough to bookmark this page or subscribe to my RSS Feed.
bye, I guess.