Category Archives: Guides

A collection of tutorial, how to guides and tips on system administration or other technology related posts.

Optimize Your MacBook Setup with Mackup and Openboot

When I replaced my MacBook Air, I skipped the usual Migration Assistant approach entirely. A full disk clone carries over years of cruft, forgotten background agents, and app installs that are hard to audit. Instead, I wanted something repeatable: start from a clean OS, restore only what mattered, and end up with an inventory I could reuse for the next disaster recovery or migration.

The tools

Mackup

Mackup backs up application preferences and dotfiles to a synced storage location of your choice, and, more importantly here, it produces a manifest of the apps it manages. That manifest doubles as an inventory of what’s installed on the machine.

Openboot

Openboot is a bootstrap script for fresh Mac setups. It installs your development tooling and, as a bonus, applies the Finder and system preference tweaks I’d otherwise configure by hand on every new machine.

Step 1: Snapshot the old machine

On the outgoing MacBook Air:


brew install mackup
mackup backup

This writes preferences and a manifest to ~/.mackup and a .mackup.cfg file lets you point the storage engine anywhere. I pointed mine at a folder synced by Synology Drive to my local NAS, and copied my home directory and Documents the same way.

Step 2: Set up the new machine clean

On the new MacBook Air, I went through the standard macOS setup without restoring anything from Time Machine or Migration Assistant, then ran openboot to configure my dev environment and system settings in one pass:


curl -fsSL https://raw.githubusercontent.com/openbootdotdev/openboot/main/install.sh | bash

(Check the openboot repo for the current install command, since these things evolve.) Beyond the dev tooling, openboot also applied the Finder and system preference tweaks I usually set by hand, which was a nice bonus.

Step 3: Restore the app inventory

Once Synology Drive synced the .mackup folder to the new machine, I installed Homebrew and mackup, then restored:


brew install mackup
mackup restore

Mackup restores preferences for everything it manages, and just as usefully, it prints out the apps that were on the old machine but not installed through Homebrew. That short list became my to-do list: reinstall those via brew install (or brew install –cask) so the next migration is even simpler.

Why bother

Skipping the full disk migration meant no years-old cruft rode along to the new machine. And centralizing on Homebrew means a single brew bundle dump going forward gives me a complete, versioned inventory of my apps, ready for whenever I need to rebuild again.

How to: Samsung Odyssey G9 firmware update

After a few hours of struggling to get my Samsung G9 monitor to “find update files” in order to flash a newer firmware I decided to make a post listing everything that you need to do ‘end-to-end’ to get a new firmware flashed on this device.

Continue reading

Finding the cheapest Virtual Private Server (VPS) providers (<$10 per year)

Sometimes we want to test software or do remote monitoring and testing that you may not want to pay a premium to do, or maybe you just want to do it as a hobby. In this post I will share some tips on where to find dirt-cheap providers of virtual servers (VPS).

I strongly advise against placing any production or critical workflows on any of these; use for testing or fun.

Continue reading

Install proxmox on a partition instead of a full-disk

By default, installing Proxmox with ZFS during the installation process will force you to use the entire disk for the root zpool. For most installs this is good enough. However, I like to do things differently sometimes.

I have a pair of Samsung 840 Pro 256GB SSDs that I wanted to use for my new homelab that I am currently building (moving from vmware to proxmox). You may be wondering why I want to install the operating system on a partition instead of an entire disk. Several reasons:
Continue reading

Troubleshooting networking issues after fresh install of proxmox VE 4.4

Writing a quick troubleshooting guide and informative post to address an issue I came across when installing Proxmox VE 4.4 on two of my machines.

On servers with more than two network interfaces Debian/Proxmox renames all interfaces and does not properly detect eth0 as the on-board ethernet as many other linux flavors. This may cause a mild headache if you just installed Proxmox with static IP addresses using the installer and upon reboot you can’t access any network resources. Continue reading

How to flash Seagate firmware onto HP enterprise MB2000EAMZF drives

In my previous post I talked about how HP locks down their hard drives (made by Seagate) with custom firmware that is exclusive to HP and with the huge caveat that if you do not have an HP storage controller the software update package provided by HP won’t work for you at all.

I spent the past 48 hours researching and trying different things. I unpacked the official HP firmware and tried to find the binary/firmware dump from within the .scexe file provided by HP on their website to no avail.  I even contacted HP for help and they would not be willing to help if the drives were not connected to HP hardware.

After some research I discovered that the HP MB2000EAMZF 2TB drive I had was almost exactly the same (part number) as the official Seagate ST32000644NS  drive after failing to be able to flash HPs firmware using HP’s bootable Firmware Update 8.3 (injecting the .scexe files inside this live CD) – I decided I really had nothing to lose but try the method I will explain below.
Continue reading

Useful software development tools

This post is meant to be updated with useful tools for software development. I will only classify the tool and post a link to it, this post will be helpful for someone just starting out in devOps

API

  • Postman: allows to share, test, document & monitor APIs.

IDE

  • Visual Studio: Windows software development IDE (C#/WPF)
  • Jetbrains Webstorm: Javascript IDE that becomes powerful with plugins (I use it for writing Go code)

Text editors

Must have tools

  • Git (or Github Desktop or Git for Windows)
  • Linux terminal/bash (available on any Mac/Linux machine, for Windows download Git for Windows linked above)

cPanel DNSonly bind recursion

In case you may be running into issues with named/bind domain service on cPanel DNSonly not responding to DNS queries recursively, I have a fix for you.

In older versions of named/bind9 used by cPanel if you wanted to allow anyone (or if you wanted security you could have setup an ACL, let’s assume you want to allow all) you could simply edit the configuration file and change “recursion no;” to “recursion yes;” to allow anyone to make queries to your DNS server for those domains or records that are not kept in your local server (ie: resolve yahoo.com)
Newer versions of BIND9/named changed their past behavior and now require a more specific configuration, just add these under “options” section

options {
...
allow-recursion { any; };
allow-query { any; };
allow-query-cache { any; };
...
};

I found a detailed explanation on why bind/named dns server changed its behavior, on the next page  a copy of the support bulletin from July 2007:

Overriding Google Compute Engine hostname from getting reset

On my last post, I explained how I am experimenting with Google Compute Engine (GCE) to host my backup DNS service and my post about configuring mailjet as an exim mail relay.

I have run into a few issues on Google Compute Engine, it looks like every time the instance gets a DHCP offer the hostname of the machine will get reset to the internal hostname, overriding whatever setting you may have set… this is bad news for a server that needs to respond to DNS settings.

After a few hours of digging and testing out different approaches, including trying to setup a DHCP hook to run the “hostname” linux command I came across documentation from Google talking about “custom metadata”.

How to setup Mailjet on exim for cPanel dnsonly on Google Cloud

I have been experimenting with Google Compute Engine (GCE) for the past few days. I wanted to migrate a slave DNS server to Google as an experiment and this blog post will talk about the shortcomings, my workarounds, configuration and tips to achieve the goal of having cPanel DNSonly installed and setup using Google’s infrastructure.

What is Google Compute Engine?

Google Compute Engine (or “GCE”) is Google’s answer to Amazon’s AWS, it basically offers you the ability to deploy Virtual Machines (VMs) at Google’s datacenters. In the most simplistics of setups you would use a single VM or “compute instance” and if you wanted to have a more complex setup you could deploy multiple instances in different geographic locations spread across different datacenters in the United States to achieve a more redundant setup or to provide you with better capacity for large traffic workflows.

It all depends on what your goals are, myself I am just starting out with a simple requirement. I would like to use a single compute instance running CentOS linux that runs cPanel DNSonly (proprietary control panel/dns clustering solution for cPanel servers).

The goal is not to host websites or any critical services on this instance, but rather only keep a copy of my DNS zones. If my experiment fails or my instance goes down or gets destroyed there won’t be any losses or damages for this experiment as my primary server is still running on Proxmox PVE.

The limitations of GCE… What I learned so far

GCE instances run behind Google’s firewalls and depending on the datacenter you decide to host your instance your VM will have an internal IP within that datacenters network scope/range (for example: us-central1 datacenter zone has a 10.128.0.0/20 range for all VMs).

This means that assigning a IPv4 public static IP, which is needed to allow anyone to query the DNS server we’ll be hosting inside this instance will actually have to forward packets to the instances internal network. Not really a big deal unless your application can’t be behind a NAT firewall like it is the case here.

For our intensive use and purposes it is fine. One important issue that I found is that doing any kind of e-mail server related activities on GCE is prohibited (source). You won’t be able to use SMTP (Simple Mail Transfer Protocol) port 25, 465 or 587 to send or receive email.

Now for a DNS server that will not be a mailserver this is not a blocker, but it is really a pain in the ass. Why? because monitoring scripts running on the server need to email the administrator to notify me of issues or errors so they can be investigated.

Continued on the next page.