I read a few posts around personal websites and how to make it easier to make one, and this is my attempt at consolidating my thoughts on it.
A common theme emerged from the posts: the existing tools to create one’s own site (mainly referring to static site generators and self-hosting) are too developer-focused. Things that developers can do may be too much of a barrier for non-developers who just to write.
There were two solutions that resonated with me. One is encouraging developers to create simpler tools, which Giles mentions in Let’s make the indie web easier:
We need more self-hosted platforms for personal publishing that aren’t Wordpress. And don’t point me to Hugo or Netlify or Eleventy or all those things - all of them are great, but none of them are simple enough. We need web publishing tools that do not require users to open the Terminal at all. And we need lots of them.
We need a whole galaxy of options.
So that next time we say to someone: “You should own your own domain, and publish on your own website,” and they answer with “How?”, we can give an answer that’s more than just: “Install Wordpress.”
Versions of this approach exist with tools like Bearblog and Pika. Manuel has a list of blogging platforms on his website which lists more.
The other solution is encouraging developers to form groups that help people host sites using existing tools. Leon mentions this in Better tech won’t make joining the indieweb easier, but collectives could:
So, a starting point for collective blogging is a pool of folk with a range of skills to set up websites. […]
Perhaps this is one area where tech will help. We could use simple, cheap tech stacks with a few options – LAMP, WordPress and a set of robust themes seems an appropriate approach. But having established this foundation, we might be able to make the indieweb a more diverse place, where non-tech folk find it easier to publish their work.
This idea appeals to me a lot more, as I am more interested in hosting an existing tool rather than building a blogging platform from scratch in addition to figuring out hosting. The Fediverse does this well with Mastodon, and I think there is scope for a Mastodon equivalent for long-form blogging.
I haven’t used Wordpress personally, but a quick search brought up Wordpress Multisite, the ability to host multiple sites on the same instance. So there might be some potential there. The ideal, however, would be a tool that is open-source. Think a hybrid of Wordpress and Bearblog with multiple instances alongside the hosted instance, with built-in support for IndieWeb protocols so that they can interact with each other.
If someone is interested in building on this idea further or if you have other thoughts, please reach out. I’d like to hear from you.
I briefly mentioned the network setup in a post about starting my homelab, but wanted to describe the steps I took to get connectivity to the machine and the VMs within it.
Proxmox creates a basic network configuration during installation. It provides connectivity to the VM via a bridge interface—a virtual switch. The configuration assumes that the machine has a static IP, and is connected via an Ethernet interface.
auto lo
iface lo inet loopback
iface wlp3s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.101/24
gateway 192.168.0.1
dns-nameserver 192.168.0.1
bridge-ports wlp3s0
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
This assumption works well for servers (the intended place to setup a hypervisor), but not for a laptop with only a WiFi interface. Running the default configuration with a WiFi interface returns an error, as the interface could not be bridged directly.
# systemctl restart networking.service
# journalctl -u networking.service -n 2
Nov 14 23:47:32 pve /usr/sbin/ifup[7397]: warning: vmbr0: apply bridge ports settings: cmd '/bin/ip -force -batch - [link set dev wlp3s0 master vmbr0]' failed: returned 1 (Error: Device does not allow enslaving to a bridge.
Command failed -:1
)
Nov 14 23:47:32 pve systemd[1]: Finished networking.service - Network initialization.
Searching for workarounds brought up this guide from Vivek Kaushik, which worked for me!
auto lo
iface lo inet loopback
auto wlp3s0
iface wlp3s0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
auto vmbr0
iface vmbr0 inet static
address 10.10.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up sysctl -w net.ipv4.ip_forward=1
post-up iptables -t nat -A POSTROUTING -s '10.10.0.0/24' -o wlp3s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.0.0/24' -o wlp3s0 -j MASQUERADE
source /etc/network/interfaces.d/*
The bridge interface acts as the gateway of a private network, and NAT rules are set to rewrite the packets with the correct address before sending and after receiving them. With this setup, you can either set an IP address for each VM manually, or setup a DHCP server on the physical machine to assign addresses automatically. The latter option is covered in the guide, which I implemented.
This setup worked just fine, however I was curious if I could separate the routing configuration into a VM of its own. I’d seen posts and videos configuring routers using open-source router distributions like pfSense and OpenWRT, and I wanted to try them out too.
Another option I found was to pass-through the network card to a VM and configure that VM into a router, inspired by this guide from Ryjelsum. It didn’t work for my network card though, and I also had problems with troubleshooting as I would lose internet access each time I attempted the passthrough.
Having an Ethernet interface on the machine would make things easier, so I purchased a USB-to-Ethernet adapter. Figuring out how to get an Ethernet connection to my room from the main home router was quite the learning experience—figuring out how my home router is setup, knowing which Ethernet cables to buy and where to connect them. I also assigned a static IP to my homelab machine, making it easier to access and simplifying the network configuration.
auto lo
iface lo inet loopback
iface wlp3s0 inet manual
auto enx00e04c461997
iface enx00e04c461997 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.101/24
gateway 192.168.0.1
dns-nameservers 192.168.0.1
bridge-ports enx00e04c461997
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
Each VM now receives an IP address from my main home router via DHCP, so all VMs + the physical machine itself are on the same network. I have also been using the Ethernet adapter for a few months, and it seems to be working reliably so far!
The next step would be to create the router VM, and expand on that further. Also, now that the WiFi interface is unused and I have a working ethernet interface, I might try to make the passthrough work again.
Joel Dueck in Publishing Nerds (via):
[…] Publishing nerds end up as inveterate yak shavers and one-man bands performing in their own driveways. Our ingrained preference to control all levels of design, and the facility which computers give us for doing so, tend to preclude us from cross-pollinating and collaborating, which for most of us is a big developmental hazard.
I feel called out by this post. I think a lot about how my posts look visually, maybe too much. The hours I’ve spent designing this website has been time spent away from writing and collaborating with people.
I still enjoy working on the designing and don’t want to stop completely. so I’ll have to think of ways to balance writing and designing better.
An addendum in the article Looking beyond collective blogging (via)—a conversation between the author V.H.
Belvadi and Juhis—flipped a switch in my brain:
Juhis rightly pointed out that ‘the feeling of connection comes through putting an effort into it rather than through automation.’ In other words most people write and expect engagement without putting effort into participating with others themselves. So, while writing is integral to blogging, we should start treating participation with other blogs as a similarly important activity.
I think this quote might be one of the reasons why previous attempts at blogging regularly didn’t stick. I have a tendency to look inwards when creating. The focus is always on “where I could improve my writing” or “how I could make my work reach better”.
Aside from working on my posts this time round, I would like to try being more intentional about engaging with other’s work: reaching out to those who’s posts resonate, either via email/social media or by sharing them there along with a bit of commentary.
The article also talks about about the IndieWeb and specifically Webmentions, that I have been curious about. However, I want to commit to interacting manually first, before I choose to incorporate automation into my interactions.
I have a spare laptop—a 15-inch MacBook Pro from 2017—that I installed Ubuntu on sometime last year to understand Linux better. I did get a better understanding of how the hardware and OS work together (even wrote posts about it), but quickly ran into a roadblock on what else I could work on. My goals were to understand networking and develop Linux sysadmin skills.
I started lurking on r/homelab probably around the same time. Something about the term “lab” brings so much joy to me—a space where one could tinker to their heart’s content, break things and fix them, and then share their findings. However, along with joy also came feelings of overwhelm, as most of the posts I saw there went over my head.
It was after a few chats with people at the Recurse Center who were also working on their homelabs and searching for beginner posts on r/homelab that made things click for me.
Instead of running things on a single operating system or, what I needed was a hypervisor. I used to setup Linux/Windows virtual machines on my daily driver, but often had to delete them as they would take up a lot of space. Having a dedicated machine turned into a hypervisor solves this problem. The machine I’m using has 2TB of storage, which is more than enough to create and delete as many VMs as I want. I chose Proxmox as the hypervisor, which is built on top of the Debian Linux distribution.
Using a laptop instead of an actual server meant that I had some constraints:
-
The machine connects to the Internet via WiFi and does not have an Ethernet port. Proxmox doesn’t recommend using WiFi, however I tried my best to make it work. When I realized that it is too much of a limitation, I purchased a USB-to-Ethernet adapter. I learnt about how to get an Ethernet connection from my home router to my room for the first time, which was fun!
-
The machine is a laptop with a battery in it and the battery is quite power hungry, so keeping the machine up all day while plugged in wasn’t seeming like a good idea. So I decided that I wouldn’t keep the machine up at all times, and use it like a regular laptop.
Another constraint that I personally set was to rely on virtualization as much as possible and introduce additional hardware only where required. I wanted to get started quickly and not fall down the rabbit hole of deciding what hardware to buy. I also wanted to test the limits of the machine and tools I already had.
Here is a list of things I plan to work on, each of which might turn into one or more blog posts:
-
Setting up a virtual router to create an internal virtual network. This would help me learn about routing, VLANs, network protocols such as DHCP, and maybe even set up a VPN or a wireless access point to help me access the network from another machine.
-
An authoritative DNS server for the virtual network. I’ve been curious about what setting up a DNS server might look like, and it would be nice to not have to remember the IP address and use domain names instead.
-
A ethical hacking environment, which would include a Kali Linux and a Windows VM that I can use when participating in CTFs. I’ve also heard about people setting up VMs for learning Active Directory, emulating SOC-like environments, but I haven’t decided on details for it yet.
-
This might be against the “not keeping the server up all the time” constraint, but I have a lot of space on this machine + two external hard drives. A DIY NAS might be an interesting project to work on.