IanMcCall.CODES

Blog Posts

24 Mar 2026 » Crustacean Migration: Moving OpenClaw from Desktop to Home Lab

## Introduction: Why Move OpenClaw to a Home Lab?

As a personal assistant, my OpenClaw instance is a part of my daily workflow. Initially, it ran on my desktop PC, which was convenient for initial setup and testing. However, I quickly realized a limitation: my desktop doesn’t run 24/7. To save power, I typically shut it down at night, which meant my OpenClaw assistant went offline with it.

My home server, which runs TrueNAS Scale, on the other hand, runs continuously. This makes it the ideal candidate for hosting services that I need available around the clock, like OpenClaw. The goal was simple: move OpenClaw from my desktop to my home server to ensure uninterrupted access and reliability.

## My OpenClaw Setup

Before diving into the migration, a quick overview of my OpenClaw setup. I primarily use it as a personal assistant. Its primary interface for me is Slack, allowing seamless interaction from any device where I have Slack installed.

## Options for Running OpenClaw on TrueNAS Scale

When considering how to host OpenClaw on TrueNAS Scale, two main options came to mind:

  1. App/Docker Container: TrueNAS Scale has excellent support for Docker containers via its “Apps” feature.
    • Pros: Lightweight, easy to deploy and manage, leverages existing container infrastructure.
    • Cons: Might be more complex for custom networking or specific OpenClaw dependencies that aren’t easily contained. Configuration management within a container might also require more thought.
  2. Virtual Machine (VM): Running a full-fledged operating system in a VM.
    • Pros: Provides a completely isolated environment, familiar setup process (like installing on a regular server), full control over the OS and network stack.
    • Cons: More resource-intensive than a container, requires managing a separate OS.

I opted for the Virtual Machine approach. While slightly heavier on resources, it offered the greatest flexibility and control, which I felt was important for a complex application like OpenClaw that interacts with many parts of my digital life.

## Setting Up the Virtual Machine

The first step was to prepare the virtual machine on my TrueNAS Scale host. TrueNAS makes this easy to do from the admin UI.

  1. Create the VM: When setting up the network I attached it to the same interface the NAS uses for communication on my home network. This allows the VM to get it’s own IP on the network so I can ssh into it from my desktop. One side effect of this however is that it can’t route to the TrueNAS host without a separate bridge interface.

  2. Install OS (Debian): I created a new VM and installed a minimal Debian instance. Debian is a stable and lightweight choice, and I already had an ISO downloaded.

  3. Setting Up a Network Bridge: To allow the VM to communicate directly with services on the host, I configured a network bridge on the TrueNAS host.
    • In the network configuration I created a new interface with the type “Bridge” and named it br0
    • Importantly, I didn’t add any other network interfaces as bridge members. Because I want this to just be for communication between the VM and the host
    • Under aliases, I added the IP address 10.0.0.1/24. This sets the IP of the host and the subnet mask for the network.
  4. Adding the Bridge to the VM: From the host I added a new NIC device to the VM, configured to attach to br0.

  5. Network Configuration: Inside the VM, I reconfigured the networking so that the interface attached to the bridge used a static IP (10.0.0.2), and the interface attached to my home network used DHCP.

  6. Install Dependencies: Once the network was solid, I installed all the necessary dependencies for OpenClaw (Node.js, Python, git, etc.) within the Debian VM.

  7. Install OpenClaw: Finally, I installed OpenClaw with npm i -g openclaw.
11 Mar 2026 » Using ChatGPT to Improve My Personal Brand

My personal branding sucked. My banner was just a picture of me at a conference from about 10 years ago and my “logo” was just some angle brackets and a slash in a hexagon. It’s not bad, but it’s old, tired, and I want something that just looks a lot cooler. Something with some more energy and more professional and polished.

11 Oct 2020 » WebAssembly Three Ways

WebAssembly is byte code for the web. It is an open standard that has been implemented by all of the major browsers (FireFox, Chrome, Safari, Edge). It has also been implemented as a compilation target for a number of programing languages. Which may have you asking, if I want to build something in WebAssembly what language should I use?

17 Jul 2020 » [Product Review] Hydration packs

My fiancé and I have been going for hikes every weekend since we haven’t been going anywhere else because of “you know what”. After one very hot and sweaty hike, I decided to get us a couple hydration packs. Hydration packs are basically a small backpack that holds a bag of water with a hose attached, so you can drink on the go.

07 May 2020 » 4.2 Stars with CSS and SVG

For a personal project, I needed a way to display an average star rating. There are a lot of ways to do this, but I thought this was a clever way to achive the look I wanted. I’m not sure if anyone else has done it this way. If someone has, I haven’t seen an example of it before.

12 Aug 2019 » SoFi Vs. Wealthfront

Back in January I signed up to two different robo advisors, so I could compare them and see which one worked better for me and if they did better than my traditional brokerage account. If you are not familiar with the concept of a robo advisor they are brokerages where, instead of picking stocks and funds yourself or with the help of a financial advisor, you select a level of risk and an algorithm selects a set of financial assets for you. The algorithm can also automatically re-balance your portfolio and do “tax loss harvesting” for you (I’ll explain that latter).

20 Feb 2018 » Getting Google Home to Read My Work Calendar (Sort of)

I love my Google Home devices. I was skeptical at first about how useful how useful a device could be if the only way to interact with is is through voice commands, but it turns out there are a whole host of tasks where it’s actually really convenient to just say “Hey Google” a command and listen to the response. There are limitations to the interaction medium, but I can almost always turn to my phone or a computer in those cases.

11 Feb 2018 » Stress vs. Pressure

Stress. We all want to avoid stress. Stress causes deformation, degradation. Over time, stress breaks and destroys.

18 Aug 2016 » I Believe I Can PreFlight!

This is a follow up to my previous post about CORS with mod_perl, I wrote a little bit about CORS (Cross Origin Resource Sharing) and about setting the Access-Control-Allow-Origin header from mod_perl. If you haven’t read it, I would recommend doing so (and not just because I wrote it :wink:).

04 Apr 2015 » Charting Merit Badges

Back around the end of March Bryan Wendell, from Bryan on Scouting, posted an update about the popularity of different merit badges base on the number earned last year.

17 Sep 2014 » CORS with mod_perl

Recently at work, I added support for Cross Origin Resource Sharing (CORS) to our web infrastructure. There is lots of information online about how CORS works and how to add support for it to your server. In fact, there is even a web site called enable-cors.org that has good information on how to enable CORS on many platforms. It’s a good for a start, but not enough for a production environment.

26 Aug 2014 » Apps Script and other tools

If you are like me, you have a lot to do in any given day. Some big, complicated things, like designing a new server architecture or crafting a complex and efficient SQL query. But there are also a lot of little things, like sorting and deleting email or keeping track of your Github issues.

03 Jul 2014 » Why I Love JavaScript

While I am experienced in many languages (Ruby, Python, Perl, Java, etc…), my language of choice is JavaScript.