hakk

software development, devops, and maybe some other stuff

Blogs

Deploy WordPress on KataCoda Kubernetes

A step by step guide to deploying WordPress on Kubernetes provided by the KataCoda website. Please note that this shouldn’t be used for a production deployment and should only be used for learning and/or practice. Create a Secret for the MySQL Password The first step is to create a secret that can be used to store the MySQL database password. Later in the deployment this will be used in creating the MySQL database pod and then used by the WordPress pod to connect to the database. Read more...

Vagrant Ubuntu with Docker install

Creating an Ubuntu VirtualBox and installing Docker. Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64" config.vm.define "docker-1" do |node| node.vm.hostname = "docker-1" config.vm.box_check_update = false config.vm.network "public_network" config.vm.provider "virtualbox" do |vb| vb.name = "docker-1" vb.memory = "2048" vb.cpus = "2" end node.vm.provision "install-docker", type: "shell", :path => "ubuntu/install-docker-2.sh" end end install-docker-2.sh cd /tmp curl -fsSL https://get.docker.com -o get-docker.sh sh /tmp/get-docker.shvagrant up Wait for the virtual machines to get created and started. Read more...

Building a VirtualBox ISO with Packer

I wanted to try building my own Vagrant base box, I decided to use one of the chef bento templates for ease. It was moving along nicely, downloaded the ISO, verified the checksum and suddenly this error appears. VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine packer Not quite sure where to start I decided to do a quick Google, read some posts about VirtualBox modules. I was quite sure that wasn’t my issue. Read more...

VBoxManage - Manage VirtualBox VMs From The Command Line

VirtualBox is a fantastic tool, previously I had been using it from the GUI. However, recently I started running it remotely on a server and using VNC to connect and manage the virtual machines. I decided that I would rather use the command line for this task as well. However, remembering all the commands is proving difficult. So I’m going to create a list and hopefully help myself and others along the way. Read more...

Go embed example of serving static files at the root URL path

Go 1.16 introduced the embed package which allows serving static files from directly within the binary without the need for any external package. Screenshot of the example web page Here are two example’s showing how to serve from the root URL path. example.go shows an example of how to use the new io/fs package and the Sub func. The comments offer a word of caution however that it may not prevent access outside of the subdirectory. Read more...

Detect Visitors DNS Provider

Recently I had bought a new router and was in the process of setting it up, during that process I started looking for various DNS-over-TLS and DNS-over-HTTPS providers. That’s when I came across NextDNS, on the setup page I saw the following: NextDNS Setup page I thought what!? How do they know that? After some investigation it all made sense, I’ll share what I found and a demo implementation. Read more...

ModuleNotFoundError: No module named 'distutils.util' on Ubuntu

If you’re using Ubuntu 16.04, 18.04, 20.04 whether you upgraded or freshly installed and want to use a newer version of Python from 3.7 to 3.8 you have probably seen this error message ModuleNotFoundError: No module named 'distutils.util'. bmcculley@hakk:~$ pip3 Traceback (most recent call last): File "/usr/local/bin/pip3", line 5, in <module> from pip._internal.cli.main import main File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/main.py", line 10, in <module> from pip._internal.cli.autocompletion import autocomplete File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module> from pip. Read more...

How to Install Python 3.8 on Ubuntu 16.04 and 18.04

Page Navigation - Building Python - Install with Apt - Update the default Python - Troubleshooting The Zen of Python Python is one of the most popular and most widely used programming languages in the world at this time. The philosophy behind the Python programming language is most likely the reason. It’s very easy to learn with its simple syntax, that same syntax makes the language very readable, therefore easy to understand what someone else wrote. Read more...

How to Install Telnet on Mac (Including M1, M2 models)

Page Nav Using Brew Building from Source Have you found at the most inopportune time that Telnet is no longer on MacOS? Well, take solace in the fact that you’re not alone. Telnet has been removed from modern versions of the system software starting from MacOS Mojave and newer. These instructions will work for MacOS Mojave and newer, including Monterey (These are the steps that I have personally used to get Telnet back). Read more...

Setting up www-data for git deployment

A brief guide about setting up the www-data account so it’s able to clone and/or pull from a git repo. This was done for GitHub, it will be a very similar process for other git hosting services, I believe. After creating a git repo and a githook listener (I’m planning a future post for this), there are a few more steps that need to be taking before the listener will be able to pull down the new code or posts. Read more...