Use lego, gcloud DNS, and DNS Challenge to Generate Let's Encrypt SSL Certificates

Tuesday, November 8, 2016

Since it was released to the world, Let’s Encrypt has been a boon for anyone wanting to secure their website or web application with TLS. A lot of work has been, and continues to be, done to provide HTTPS to the masses.

Because Let’s Encrypt is an open certificate authority and provides an API to generate, renew, and revoke SSL certificates, anyone can create tools to make a historically cumbersome and difficult process more efficient and easier.

Continue reading...

Kickstart CentOS 7 with eth0 Instead of Predictable Network Interface Names

Saturday, July 23, 2016

By default, CentOS 7 will kickstart and boot using predictable network interface names. This is useful when provisioning and using similar bare metal servers, but it isn’t very useful when provisioning and using disparate bare metal servers and virtual machines.

Continue reading...

Issues Connecting External Hard Drives to a Retina MacBook with USB-C

Thursday, July 14, 2016

As of OS X 10.11.4 and .5, not sure which, I have issues connecting external hard drives to an Early-2015, 12-inch, retina MacBook. I suspect it has something to do with USB-C or OS X’s USB drivers. Apple’s OS X El Capitan 10.11.4 release notes reference updates to USB audio devices and Apple’s USB-C adapters.

Continue reading...

parted Commands Cheat Sheet

Saturday, June 4, 2016

Linux users have used fdisk for as long as can be remembered to partition their hard disks. However, as large hard disks have become more and more prevalent, fdisk can no longer be used because it has a 2 TB partition limit. Luckily, parted has been around for a long time and can be used to label and partition any modern sized hard disk.

Continue reading...

Using siege to Load Test Your Website and API

Wednesday, March 30, 2016

ab, Apache Bench, is often used to load test websites, but I didn’t find it extensible enough for my needs. Unless an unofficial patch is applied, it cannot attempt to simulate a real person by going to random URLs. This is where siege comes in.

Continue reading...

A Better Way to Inject Content into a Jekyll Post

Monday, March 28, 2016

In a previous post, I described a method to inject content into a Jekyll post. The method worked but felt hacky and inelegant. Additionally, you could only inject content one time in a Jekyll post.

Continue reading...

A Simple, Secure, Ephemeral Way to Share Passwords

Friday, March 25, 2016

My job frequently requires me to distribute passwords to people. Those people could be coworkers or employees from another company or organization. Obviously passwords are something that need to be transmitted securely, but I didn’t have a simple, secure way to do this.

Continue reading...

find Commands Cheat Sheet

Monday, February 22, 2016

find is an extremely powerful command. It not only finds your files and directories, it can be combined with other shell commands to perform actions on those found files and directories.

Continue reading...

sed Commands Cheat Sheet

Monday, February 1, 2016

sed is an extremely powerful stream editor. The web is full of useful sed one liners; especially here.

This post will be an ever growing list of sed one liners I have found useful.

Continue reading...

Transfer Files and Directories Containing Spaces Using scp

Sunday, December 6, 2015

Have you ever used scp to transfer files and/or directories containing spaces only to have it output the following errors:

Continue reading...

Use the OpenStack swift Command with Rackspace Cloud Files

Thursday, December 3, 2015

Rackspace Cloud Files is, and has always been, powered by OpenStack Swift.

The easiest way to interface with Rackspace Cloud Files is through the web portal or third-party clients such as Cyberduck.

Continue reading...

Install and Configure Cobbler on Ubuntu 14.04

Thursday, November 26, 2015

Cobbler has always been my goto for provisioning bare metal servers. This is due in large part to its ability to provision CentOS, RHEL, Ubuntu, and Debian easily and quickly.

This post will cover setting up Cobbler on Ubuntu 14.04 and how to provision a server with Ubuntu Server 14.04.

Continue reading...

Debian/Ubuntu Preseed Documentation and Working Examples

Wednesday, October 14, 2015

Debian/Ubuntu’s Preseed is not the easiest thing to understand. Having used Red Hat/CentOS Kickstart Profiles for so long, trying to setup a Preseed file for the first time was an extremely uninviting process.

Ubuntu has support for using Kickstart Profiles but it isn’t as full featured as Preseed, and I have encountered plenty of edge cases where Kickstart Profiles do not work for provisioning Ubuntu systems.

I currently spend a lot more time with Ubuntu than Red Hat or CentOS, so all I can do is try to better understand Preseed.

Continue reading...

Create a Bootable Ubuntu USB Drive in OS X

Tuesday, October 13, 2015

Ubuntu has a great set of instructions on creating a bootable USB drive in Mac OS X, but they have an additional step I found to not be needed; there’s no need to convert the Ubuntu ISO to an IMG file. You can simply download the ISO and use dd to copy it to a USB drive.

Continue reading...

Nostalgic Ambient Noise

Wednesday, August 26, 2015

I’m on a computer far too much. Most of the time I have music, a TV show, or a movie playing in the background. The ambient noise helps me focus. However, sometimes it’s difficult to focus with understandable conversation or singing in the background.

It’s easy to find ambient noise loops of the ocean, wind, crowds, etc., but I wanted something a bit more nostalgic.

Ambient noise from video games and sci-fi TV shows and movies provided that nostalgia.

This post will be an ever growing list of the better nostalgic ambient noise streams I have come across.

Continue reading...

VirtualBox Commands Cheat Sheet

Monday, August 24, 2015

VirtualBox has always been the go-to piece of software to spin up virtual machines on your workstation.

More often than not, you will work with VirtualBox using its GUI. However, for those occasions where you are SSH’ing into a remote workstation running VirtualBox, it is often easier to work with it using the command line instead of forwarding X.

This post will be an ever growing list of useful VirtualBox commands.

Continue reading...

Install, Configure, and Use minidlna on OS X Yosemite

Sunday, August 23, 2015

Sony finally released a DLNA media player for the Playstation 4 on June 16, 2015. I don’t have a lot of streamable media, but what I do have is stored on my laptop.

I have used Plex in the past, but it is overly complicated and “heavy” for my needs. I wanted a light weight DLNA server that could be daemonized and point to a media directory. minidlna turned out to be the answer.

Continue reading...

ffmpeg Commands Cheat Sheet

Saturday, August 22, 2015

ffmpeg is the swiss army knife of video and audio processing tools.

This post will be an ever growing list of useful ffmpeg commands.

Continue reading...

Sort of Turn Off Safari's Two Finger Swipe Animation

Sunday, July 12, 2015

I have never liked Safari’s two finger swipe back animation. It is unnecessary and slow, and forces the previous web page to be reloaded (this particular part will change in OS X El Capitan). Most people’s internet connections will load a web page faster than the animation can complete, so it just adds unnecessary waiting to web browsing.

Continue reading...

OS X Yosemite SendRawHCICommand EnqueueRequestForController

Tuesday, June 23, 2015

I frequent the Console application in OS X, and, lately, I have been noticing a lot of the following error message:

Continue reading...

Fix Error 0x80070057 When Installing Windows 7 64-bit on a SSD

Saturday, May 9, 2015

While installing Windows 7 64-bit onto a Samsung 850 Evo SSD, I encountered error 0x80070057 immediately after formatting the hard drive.

Microsoft has a couple of support articles on this issue, but neither of them provide working solutions.

Continue reading...

Datadog OpenStack Capacity Reporting Plugin

Thursday, April 16, 2015

Datadog is a fantastic monitoring as a service company. Install their agent on your host and within seconds metrics are uploaded to their service to begin graphing. Their service can integrate with many popular products, but I have yet to find a plugin to integrate Datadog with one of the most talked about pieces of software today: OpenStack.

Continue reading...

Setup Varnish 4 on CentOS 6 as a Caching Server and Load Balancer

Sunday, March 29, 2015

In a previous post, I detailed how to setup Varnish 2.1.5 on CentOS 6 as a caching server and load balancer. After setting this up, I realized MP4 files were not streaming and large downloads were taking too long to begin.

Varnish 4 is the latest major release of Varnish and has fixed all of these problems.

This post will be exactly the same as the last post, but will provide the new VCL syntax that applies to Varnish 4.

Continue reading...

Setup Varnish 2.1.5 on CentOS 6 as a Caching Server and Load Balancer

Saturday, March 28, 2015

Varnish is a highly regarded HTTP caching server. It sits in front of your web server tier and caches content in RAM so subsequent requests are served as quickly as possible.

Varnish can also be a basic load balancer. Combining a caching server and a load balancer works extremely well when one or more of your web servers becomes unavailable. Because Varnish is also acting as the load balancer, no longer will the end user possibly see a “Service unavailable” message while the load balancer is removing the unhealthy web server from the load balanced pool, they will simply see a cached paged instead.

Continue reading...

Gluster Heal Not able to fetch volfile from glusterd

Wednesday, February 25, 2015

I recently setup a two node replica Gluster cluster on CentOS 6.6 with Gluster version 3.6.2-1. I setup a private network specifically for Gluster replication and communication and binded the Gluster daemons to this network.

Continue reading...

Change Gluster Volume Connection Timeout for GlusterFS Native Client

Tuesday, February 24, 2015

After setting up a two node replica Gluster cluster to use as a web content backend, I began testing what would happen when I brought down one of the Gluster nodes. The web nodes access the Gluster cluster using the GlusterFS native client and I expected them to quickly see that one of the Gluster nodes was down and begin serving content from the healthy Gluster node, but that was not happening. My test involved simply rebooting one of the Gluster nodes and that node was coming back online within about 30 seconds. However, within that 30 seconds my website was down.

Continue reading...

An Actual Temporary Fix for OS X Yosemite's UI Lag

Saturday, January 31, 2015

Every since I upgraded to OS X Yosemite, the experience has been lackluster. A simple Google search will reveal a host of problems Yosemite has introduced, but the absolute most annoying problem for me has been the UI lag. This UI lag mainly occurs when I have an external monitor attached.

Continue reading...

Inject Content into a Jekyll Post

Wednesday, January 14, 2015

Sverrir Sigmundarson has created a better method to do this. I suggest using his method which I have detailed here.

There was a period where I wanted to inject an ad into a particular part of every Jekyll post. I did not want to put the actual ad markup in the middle of the Markdown text file because it was ugly and would be difficult to manage if I had to change something.

Continue reading...

Remove a User's Ability to Unlock FileVault 2 with their User Password

Sunday, January 11, 2015

I have used FileVault 2 since OS X Lion without issue and it has worked as expected. With FileVault 2 enabled, before I can login with my user password, I have to first unlock the hard drive using the disk encryption password I previously set.

Continue reading...

Problems Provisioning Ubuntu with Cobbler and Kickstart Profiles

Friday, December 19, 2014

Using cobbler to provision Ubuntu systems is no problem when using Preseed, but it is a problem when using Kickstart Profiles (Ubuntu has had Kickstart compatibility since at least 10.04).

Continue reading...

ExifTool Commands Cheat Sheet

Tuesday, December 9, 2014

ExifTool by Phil Harvey is a fantastic tool to edit the exif metadata on your pictures. It is especially useful when you have a lot of pictures to edit and have no desire to change metadata by hand.

Continue reading...

Understanding the OpenStack Swift Ring

Tuesday, December 9, 2014

The folks over at SwiftStack have put together a great blog post and video describing how the ring works in OpenStack Swift.

Continue reading...

libpng Not Symlinking When Installing ImageMagick on OS X Yosemite

Monday, December 8, 2014

After upgrading from OS X Mavericks to OS X Yosemite, I attempted to install ImageMagick via Homebrew, but encountered the following error when brew was trying to install the libpng dependency:

Continue reading...

Centering Images with Jekyll and Markdown

Sunday, November 30, 2014

There are a handful of ways to center an image on a web page. The simplest method is to create a CSS class with the margin and display properties and apply that class to the image link.

Continue reading...

iCloud Photo Library items were not uploaded due to a network error

Friday, November 28, 2014

Apple recently enabled the ability for users to upload photos to iCloud Photo Library through Prior to that users could only upload ohotos to iCloud Photo Library through

I have been uploading photos to iCloud Photo Library every since it was first enabled on However, I have recently run into problems.

Continue reading...

Multi-machine Vagrantfile with Shorter, Cleaner Syntax Using JSON and Loops

Thursday, November 13, 2014

In a previous post, I provided an example Vagrantfile to create multiple virtual machines. That Vagrantfile works perfectly fine, but it contains a lot of redundant code. Because a Vagrantfile is written in Ruby, it is possible to create a Vagrantfile with shorter, cleaner syntax using JSON and loops.

Continue reading...

Installing python-swiftclient on OS X Yosemite

Wednesday, October 29, 2014

Installing python-swiftclient on OS X Yosemite is exceedingly difficult compared to earlier versions of OS X. Yosemite ships with Python 2.7.6. Running sudo easy_install pip will install pip 1.5.6.

Those versions should work with python-swiftclient, but after installing the package with pip install python-swiftclient and running the swift command, the following error is thrown:

Continue reading...

Find the Ubuntu Apt Package a Command Belongs To

Saturday, October 18, 2014

While working on Ubuntu Server 14.04 I needed to install the innobackupex command. Simply running apt-get install innobackupex did nothing. I tried running apt-cache search innobackupex, but nothing was returned. This was another case of a command belonging to an apt package that didn’t use the same name.

Continue reading...

Make Spotlight Private Again in OS X Yosemite

Saturday, October 18, 2014

When Apple introduced OS X Yosemite at WWDC 2014 they demoed a brand new and improved Spotlight. Everything about it I liked, but I was concerned about the Spotlight Suggestions and Bing Web Search features. Obviously to use those features your keystrokes have to be sent to a server somewhere and processed. I did not want that. I quickly remembered what happened when Canonical released Dash in Ubuntu. At the very least, Apple needed to offer a way to turn this functionality off.

Continue reading...

A Possible Fix for Low Earpiece Volume on the iPhone 6 and 6 Plus

Saturday, September 27, 2014

I recently purchased an iPhone 6 and immediately noticed the phone call volume through the earpiece was much lower than my iPhone 5.

Speaker volume was more than loud enough, but the low earpiece volume - even though it was at max volume during the phone call - was making it difficult to understand the person on the other end.

Continue reading...

Create a KVM Based CentOS 6 OpenStack Cloud Image

Wednesday, September 24, 2014

For some reason CentOS does not keep their historical CentOS releases available online in OpenStack cloud image format. They only have the very latest CentOS OpenStack cloud image available. If I’m wrong and they do keep them somewhere, please let me know. However, the current and historical CentOS repositories are of course available online and you can create your own custom OpenStack cloud image from them.

Continue reading...

Reconfigure a Dell RAID (PERC) Controller through the Dell iDRAC Using racadm

Wednesday, September 3, 2014

While setting up an OpenStack Swift cluster, I had five Dell R720 servers with incorrectly configured RAID arrays. The two operating system hard drives were configured in a RAID1 array, as expected, but the 24 data hard drives were configured in two RAID5 arrays. The data hard drives in OpenStack Swift storage nodes should not be in a RAID array; Swift simply wants each hard drive on its own.

You can reboot most of Dell’s enterprise servers into the Dell RAID (PERC) Controller to get access to a GUI to re-configure the RAID arrays. But, with five servers and 24 disks on each, using the GUI would have been a very tedious and time consuming task. So, I began looking into what the racadm command was capable of.

You can SSH to the IP address of a Dell iDRAC and use the racadm command to run all sorts of commands. Luckily, racadm has a set of commands that allow you to reconfigure the RAID arrays.

Continue reading...

Configure Multiple Network Interfaces on an OpenStack Instance

Wednesday, September 3, 2014

Most of the pre-made OpenStack Cloud Images are configured to connect an OpenStack Instance to one network interface on creation of the instance.

As of OpenStack Icehouse, the functionality to attach another network interface to an existing OpenStack Instance through the Horizon Dashboard is not exposed. However, you can attach another network interface to an existing OpenStack Instance using the neutron and nova commands.

Continue reading...

Delete Duplicate OpenStack Hypervisors and Services

Sunday, August 3, 2014

If you ever change the hostname of any of your OpenStack nodes and restart the OpenStack services on those nodes, the services are going to re-register to the OpenStack cluster under the new hostname. Because of this, when you run nova hypervisor-list, nova service-list, neutron agent-list, or cinder service-list you are going to have duplicate entries.

Unfortunately, there are not commands to clean up duplicate entries, so you have to modify the various OpenStack databases by hand.

Continue reading...

Questions to Ask to Determine if Your Application is Cloud Ready

Sunday, August 3, 2014

Anyone working in IT has heard the question, “is your application cloud ready?”. What on earth does it mean? What factors go into making an application “cloud” ready?

Applications can be architected in many different ways and there are arguably many factors that go into making an application “cloud” ready.

This post isn’t going to cover what those factors are. What’s more interesting to me is how to quickly figure out if an application is “cloud” ready. I have found that there are a series of questions that can be asked to quickly determine this.

Continue reading...

Use OpenStack Swift as a Backend Store for Glance

Sunday, August 3, 2014

By default, OpenStack Glance saves images and OpenStack Instance snapshots on the local filesystem in /var/lib/glance/images/.

However, if you have a Swift Cluster, you can just as easily use it to save images and snapshots instead of the local filesystem where Glance is running.

Continue reading...

OpenStack Swift 401 Unauthorized When Using the swift Command

Wednesday, July 16, 2014

After setting up a Swift Cluster with TempAuth, I wanted to remove TempAuth and use Keystone to authenticate. However, I kept encountering 401 Unauthorized errors when running the swift command even though I was fairly certain everything was configured properly.

Continue reading...

Authenticate OpenStack Swift Against Keystone Instead of TempAuth

Wednesday, July 16, 2014

In a previous post I detailed how to install a stand-alone, multi-node OpenStack Swift Cluster with VirtualBox or VMware Fusion and Vagrant. That post configures Swift’s TempAuth module for authentication. However, if you have an existing OpenStack environment, or just an OpenStack Keystone server already setup, you can just as easily use Keystone instead.

Continue reading...

Install a Stand-alone, Multi-node OpenStack Swift Cluster with VirtualBox or VMware Fusion and Vagrant

Monday, July 14, 2014

The OpenStack Swift developer website describes Swift best:

Swift is a highly available, distributed, eventually consistent object/blob store. Organizations can use Swift to store lots of data efficiently, safely, and cheaply.

For being such a powerful object storage platform, I found it surprisingly easy to setup and configure (especially compared to OpenStack). Of course, setup becomes more difficult as the number of nodes, racks, and data centers increase.

But, not all of us have many nodes, racks, or data centers at our disposal, and simply want to setup a Swift cluster to play with on our workstation.

Continue reading...

Random Twitter Bootstrap Jumbotron Image on Each Page Load Using jQuery

Wednesday, June 11, 2014

The Twitter Bootstrap front-end framework provides a UI element called a Jumbotron. As stated at, it is “a lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site”.

In my particular case, I wanted to use the Jumbotron to display different, severely cropped photographs on each page load. This post will go through how to implement this using jQuery.

Continue reading...

A Better Way to Display Random Jekyll Posts on Page Load or Refresh Using jQuery and JSON

Sunday, June 8, 2014

In a previous post I detailed how to display random Jekyll posts during each page load or refresh using Javascript. This post will produce the same result but will achieve it with jQuery and JSON.

Continue reading...

Manage Apache VirtualHosts and mod_rewrite Rules with Ansible

Monday, June 2, 2014

I needed a way to manage Apache VirtualHosts and mod_rewrite rules. There are a handful of Ansible Roles available at Ansible Galaxy to manage Apache VirtualHosts, but none of them also manage mod_rewrite rules.

After figuring out how to include additional content in an Ansible Template file, I was able to quickly put together an Ansible Playbook and Ansible Template to manage my Apache VirtualHosts and their particular mod_rewrite rules.

Continue reading...

Where to Find OpenStack Cloud Images

Sunday, June 1, 2014

OpenStack Instances are created from OpenStack cloud images. Many modern Linux distribution organizations and companies create and distribute their own official OpenStack cloud images, but for those that do not, it is entirely possible to create your own.

cloud-init is a key part of creating any OpenStack cloud image and will be found in most of the ready-made images.

This post will be an ever growing list of operating systems that have ready-made OpenStack cloud images and instructions on how to create your own if they do not.

Continue reading...

Include Additional Content in Ansible Template File

Thursday, May 22, 2014

While putting together an Ansible Playbook to generate a configuration file from an Ansible Template, I needed a way to include additional content from a text file within the generated configuration file. I could not find an Ansible Module to do this, but Ansible uses the Jinja2 templating engine, and with one additional line in the Ansible Template file, I was able to include the contents of the text file in the generated configuration file.

Continue reading...

Beginning to Understand Docker

Tuesday, May 20, 2014

I just returned from the OpenStack Summit in Atlanta. Any of the speakers that talked about “Docker” or “Linux Containers” had a full audience. From this event alone, it was clear that people are very interested in Docker and are still trying to figure out what it is and what it can do.

Continue reading...

OpenSSL Commands Cheat Sheet

Sunday, May 18, 2014

The openssl command has a vast array of uses and functions.

This post will be an ever growing list of various, useful OpenSSL commands.

Continue reading...

Instant Search with Twitter Bootstrap, Jekyll, JSON, and jQuery

Monday, May 12, 2014

By default, the Twitter Bootstrap Search Field will use Google to search your site. It works (assuming Google has indexed your site), but it’s not very sexy. Of course, with a little know how, the search field can be wired to do whatever you want. I wanted a search field that functioned like Google Instant Search with the following features:

Continue reading...

Dismantle Linux md Software RAID Array

Saturday, May 10, 2014

I have used Linux md for software RAID for a long time. It has worked well and even saved my data once.

However, I recently needed to dismantle a healthy RAID array. I used the following steps to erase all traces of the RAID array from each hard drive.

Continue reading...

Install Fever RSS Reader on Fedora, RHEL, or CentOS with SSL and SELinux

Saturday, May 10, 2014

Ever since Google Reader was surprisingly shutdown in July of 2013, some of the other RSS readers (Feedly, Tiny Tiny RSS, etc.) started to get more attention.

Coincidentally, I discovered and began using Fever just before I received news that Google Reader was shutting down.

Continue reading...

Install Mint Web Analytics on Fedora, RHEL, or CentOS with SSL and SELinux

Monday, May 5, 2014

Google Analytics has always been the go to web analytics tool. It is fairly easy to setup and it provides the basic and advanced metrics needed to run a website.

However, 95% of the time, all I want to see are the most up-to-date metrics for number of visits, referrers, and pages viewed. This is where I use Mint.

Continue reading...

Git Commands Cheat Sheet

Sunday, May 4, 2014

This post will be less of a typical cheat sheet and more of an ever growing list of basic and advanced git commands I use but not frequently enough to remember them.

Continue reading...

Jekyll Resources

Thursday, May 1, 2014

Jekyll is a fantastic static-site generator. It gives you everything you need to get a simple, clean website or blog up and running fast. It is also extremely extensible through the use of Liquid formatting.

This post will be an ever growing list of the various things fellow Jekyll-lovers have created to make their Jekyll based website or blog that much more interesting.

Continue reading...

Ansible Manage the Same Users Across Servers with Different Passwords

Saturday, April 19, 2014

Recently, I was setting up a handful of servers that all needed the same user created but with a different password for that user on each server. Searching around the internet, I did not find a definitive way to manage users and most of what I found consisted of bits and pieces of what I was looking for. I ultimately settled on the following solution.

This solution can definitely be improved upon by using group_vars and variable overrides to remove redundant attributes.

Continue reading...

Dell iDRAC racadm Commands and Scripts

Wednesday, April 16, 2014

The Dell iDRAC web interface has always been cumbersome to deal with. However, you can login to a Dell iDRAC via SSH and use the racadm command to perform actions against the physical server. Because of SSH, it is possible to automate actions that would otherwise take a long time to do via the web interface.

This post will be an ever growing list of Dell iDRAC racadm commands, scripts, and ways to automate repetitive tasks.

Continue reading...

Create a KVM Based Debian 7 OpenStack Cloud Image

Monday, April 7, 2014

Unlike Red Hat, Fedora, CentOS, and Canonical, Debian does not create and distribute OpenStack cloud images. It is up to you to create your own.

I have seen steps using packer templates or virt-builder to create Debian 7 OpenStack cloud images, but I have not seen a step-by-step manual process to understand how it all works.

Continue reading...

Cobbler Not Parsing Kickstart Profile

Tuesday, April 1, 2014

After installing Cobbler and importing the Ubuntu Server 12.04.4 LTS ISO, I copied the Cobbler Profile created on import into a new one named ubuntu-12.04.4-server-x86_64-ks with the intention of pointing it to the following kickstart profile (yes, Ubuntu supports kickstart profiles but only so much):

Continue reading...

Ansible Fix Colon Syntax Error for sudoers File

Tuesday, April 1, 2014

I encountered the following error when writing an Ansible Task to add a user to the sudoers file:

Continue reading...

OpenStack Commands Cheat Sheet

Thursday, March 13, 2014

I no longer work with OpenStack and as such do not maintain this post anymore. The most up-to-date OpenStack commands can be found here and a cheat sheet can be found here.

I have found most of the OpenStack commands to be fairly intuitive. However, there are some commands that do not follow a standard syntax, and there are far too many commands and command line switches to remember. In addition, Googling around for specific commands can be time consuming.

This post will be an ever growing list of OpenStack commands I have used across the various OpenStack Projects.

Continue reading...

Install Ansible, Create Your Inventory File, and Run an Ansible Playbook and Some Ansible Commands

Saturday, March 8, 2014

Ansible is part of the configuration management and orchestration family that includes Puppet, Chef, and SaltStack.

Having only ever used Chef, I found Ansible to have a much lower learning curve. I spent more time using it rather than learning it.

Despite its ease of use, there is always a bit of prep work needed to get started.

I will be running everything from OS X Mavericks. With the possible exception of the installation, all the other steps should work on most modern Linux distributions.

Continue reading...

Ansible OS X Mavericks You Must Install the sshpass Program

Sunday, February 9, 2014

The steps in this post are no longer necessary if you are running Ansible 1.9.2 or newer. An earlier version of Ansible probably fixed this issue, but I don’t know exactly which version.

I received the following error while bootstraping a new Rackspace Public Cloud Server with Ansible 1.4.4 on OS X Mavericks when running ansible-playbook bootstrap.yml --user root --ask-pass:

Continue reading...

Hash root's Password in RHEL and CentOS Kickstart Profiles

Monday, February 3, 2014

root’s password can easily be set in RHEL and CentOS Kickstart Profiles with the following command:

rootpw "password here"

However, anyone using the Kickstart Profile will see the root password in plain text.

It is possible to hash root’s password in the Kickstart Profile with the following command:

rootpw --iscrypted password_hash

But, how do you generate the password hash? Depending on your authconfig configuration, there are several different ways to do this.

Continue reading...

Authenticate RHEL 5 and 6 SSSD Using Kerberos and LDAP Against Active Directory on Windows Server 2008 R2

Thursday, January 30, 2014

SSSD brought several authentication and authorization protocols under one roof. Configuring RHEL 5 and 6 systems to authenticate with SSSD using Kerberos and LDAP against Active Directory can be tricky. This post details the steps I took at a customer to set everything up.

Continue reading...

Display Random Jekyll Posts During Each Page Load or Refresh Using Javascript

Sunday, January 19, 2014

Because Jekyll is a static site generator it can be difficult to have various parts of your website be dynamic. For example, I wanted a side bar element to show a list of randomized posts. I found two methods here and here to go to a random Jekyll post by clicking a link, but nothing that displayed a randomized list of Jekyll posts. So, I adapted the Javascript code from the links into what I was looking for.

Continue reading...

Deploy Rackspace Private Cloud v4.2.x powered by OpenStack Havana with Neutron Networking Using VirtualBox or VMware Fusion and Vagrant

Thursday, December 19, 2013

Rackspace Private Cloud, and OpenStack on its own, can be a formidable set of software to install. Rackspace Private Cloud uses Chef to deploy OpenStack, and while Chef itself has a high learning curve, its use does make deploying OpenStack easier and more scalable.

Continue reading...

Spinning Up Your First Instance on Rackspace Private Cloud Using Quantum/Neutron Networking

Thursday, December 12, 2013

Now that you have Rackspace Private Cloud installed, it is time to spin up your first OpenStack Instance. But there are several things you should do beforehand so you can fully utilize your OpenStack Instance.

Be aware, in OpenStack Havana, Quantum Networking was renamed to Neutron Networking. This post covers both OpenStack Grizzly (RPC v4.1.x) and OpenStack Havana (RPC v4.2.x). I will specify when you should use the quantum commands or the neutron commands.

Continue reading...

Kind of Explicitly Set the Default Gateway IP Address on a Quantum Router

Thursday, November 21, 2013

The following applies to the OpenStack Grizzly release and could change with future releases.

While in the process of setting up an external Quantum Provider Network, so I could attach it to a Quantum Router as the default gateway, I needed a way to specify what IP address is brought up as the default gateway on the Quantum Router; however, there is no obvious command line switch to do this.

Why did I need a way to specify what IP address is brought up as the default gateway on a Quantum Router?

Continue reading...

Spinning Up Your First Instance on Rackspace Private Cloud Using nova-network

Tuesday, November 12, 2013

Now that you have Rackspace Private Cloud installed, it is time to spin up your first OpenStack Instance, but there are several things you should do beforehand so you can fully utilize your OpenStack Instance.

Continue reading...

Create a Ubuntu Server 12.04 LTS Vagrant Base Box from Scratch Using VirtualBox

Monday, November 11, 2013

Vagrant makes it super easy to spin-up local virtual machines using VirtualBox or VMware Fusion. There are many Vagrant Boxes available to use immediately after downloading and installing Vagrant. However, I prefer to know exactly how my virtual machine image is created. This post will walk you through creating a Ubuntu Server 12.04.4 LTS Vagrant Base Box from scratch using VirtualBox.

Continue reading...

Create a CentOS 6 Vagrant Base Box from Scratch Using VirtualBox

Monday, November 11, 2013

Vagrant makes it super easy to spin-up local virtual machines using VirtualBox or VMware Fusion. There are many Vagrant Boxes available to use immediately after downloading and installing Vagrant. However, I prefer to know exactly how my virtual machine image is created. This post will walk you through creating a CentOS 6.5 Vagrant Base Box from scratch using VirtualBox.

Continue reading...

A Basic Understanding of MapReduce on Hadoop

Wednesday, October 30, 2013

If you read through any article on big data you will come across the terms MapReduce and Hadoop, but what are they and what do they do? Without a basic understanding of each it is difficult to grok any of those articles.

Continue reading...

Manually Add and Remove VMware Fusion Virtual Adapters

Friday, October 18, 2013

VMware Fusion exposes command line options that make it easy to add or remove virtual adapters manually.

I will be adding and removing vmnet7 in the following steps. A fresh install of VMware Fusion does not include this virtual adapter.

Continue reading...

Advanced Vagrantfile Configuration

Friday, October 18, 2013

Vagrant understands Ruby syntax, so all sorts of code-fu can be done in a Vagrantfile.

This post will be an ever growing list of advanced Vagrantfile configurations.

Continue reading...

Create a CentOS 6 Vagrant Base Box from Scratch Using VMware Fusion

Tuesday, October 15, 2013

Vagrant makes it super easy to spin-up local virtual machines using VirtualBox or VMware Fusion. There are many Vagrant Boxes available to use immediately after downloading and installing Vagrant. However, I prefer to know exactly how my virtual machine image is created. This post will walk you through creating a CentOS 6.5 Vagrant Base Box from scratch using VMware Fusion 5 or 6.

Continue reading...

Operation Not Permitted Mounting NFS Share on OS X Mountain Lion

Tuesday, October 15, 2013

Mounting an NFS share on OS X has always been slightly more troublesome when compared to mounting an NFS share on a Linux distribution.

Continue reading...

Dell iDRAC 7 Partially Working in OS X Mountain Lion with Java 7

Tuesday, October 1, 2013

While trying to connect to a Dell iDRAC 7 from OS X Mountain Lion with the Java 7 Runtime Environment installed you have probably received the very informative Connection failed error. shows nothing and you have to dig through ~/Library/Application\ Support/Oracle/Java/Deployment/log/ to find anything useful.

Continue reading...

Deploy Rackspace Private Cloud v4.1.x powered by OpenStack Grizzly with nova-network Using VirtualBox or VMware Fusion and Vagrant

Sunday, September 29, 2013

Rackspace Private Cloud, and OpenStack on its own, can be a formidable set of software to install. Rackspace Private Cloud uses Chef to deploy OpenStack, and while Chef itself has a high learning curve, its use does make deploying OpenStack easier and more scalable.

Continue reading...

Setup the Transmission Web Interface Behind an Apache Reverse Proxy and SSL

Sunday, September 29, 2013

By default, the transmission-daemon service uses its own web server and runs on port 9091. Assuming the service is running and the proper firewall holes have been made, the Transmission web interface can be accessed by going to While remembering to append port 9091 is not difficult, it would be much cleaner to just go to

Continue reading...

Customizing Vagrant VMware Fusion Virtual Machines with VMX Parameters

Saturday, September 28, 2013

I was recently working with Vagrant and the Vagrant VMware Fusion Provider Plugin to add a secondary NIC on-the-fly. Vagrant provides functionality to easily add a secondary NIC but you are required to assign it to a network. I didn’t want to assign it to any network, I just wanted the secondary NIC present.

Continue reading...

Multi-machine Vagrantfile for VirtualBox or VMware Fusion

Thursday, September 19, 2013

The following Vagrantfile shows the syntax for setting up multiple virtual machines using VirtualBox or VMware Fusion.

Continue reading...

Install the Open Source Chef Server, Setup knife On Your Workstation, and Bootstrap Your First Client Server

Monday, September 16, 2013

OpsCode, the creators of Chef, offers a hosted Chef Server solution. However, I have always preferred to setup my own severs, and OpsCode also offers an open source Chef Server that you can install and host yourself.

Continue reading...

Create a Ubuntu Server 12.04 LTS Vagrant Base Box from Scratch Using VMware Fusion

Thursday, September 12, 2013

Vagrant makes it super easy to spin-up local virtual machines using VirtualBox or VMware Fusion. There are many Vagrant Boxes available to use immediately after downloading and installing Vagrant. However, I prefer to know exactly how my virtual machine image is created. This post will walk you through creating a Ubuntu Server 12.04.4 LTS Vagrant Base Box from scratch using VMware Fusion 5 or 6.

Continue reading...

Create VMware Fusion PXE Boot Environment and Use Kickstart Profiles to Create Ubuntu Virtual Machines

Thursday, September 5, 2013

The following steps are specific to VMware Fusion 5 and Ubuntu Server 12.04 LTS. Adapting the steps below to different Linux distributions is out of the scope of this post, but it is possible.

Continue reading...

Simple Ways to Send Multiple Line Commands Over SSH

Wednesday, August 21, 2013

SSH not only allows you to connect to remote servers, you can use it to send an ad hoc command or commands to a remote server. This post will cover three methods to send multiple line commands over SSH to a remote server.

The first method is a quick overview of running remote commands over SSH.

The second method uses the bash command to run remote commands over SSH.

The third method uses HERE documents to run remote commands over SSH.

Continue reading...

Transmission settings.json Reverting to Defaults

Sunday, August 18, 2013

The transmission-daemon package from EPEL makes it easy to setup a command line bittorrent client on RHEL 6 or CentOS 6. However, I have encountered situations where modified settings in /var/lib/transmission/.config/transmission/settings.json revert back to their defaults upon starting the transmission-daemon service.

Continue reading...

Create Bootable ISO from Red Hat Satellite Server Kickstartable Trees

Tuesday, July 9, 2013

If you have a Red Hat Satellite Server or Spacewalk Server, you can create bootable ISOs from the Kickstartable Trees.

Continue reading...

Linux Kickstart POST Script to Bond Two NICs

Friday, July 5, 2013

The following can be placed in a kickstart POST script to bond two NICs when it is unknown what two NICs will be active. This is typically more of an issue on physical servers rather than virtual machines.

Continue reading...

RHEL 6 Fix xrdp ERROR another Xserver is already active on display 10

Friday, June 28, 2013

If you have installed xrdp-0.5.0-0.13.el6.x86_64.rpm from EPEL6 you have probably noticed it does not work out of the box.

When trying to connect from an RDP client, the following errors are thrown:

Continue reading...

Create a Bootable Windows 7 USB Drive in Linux

Monday, June 10, 2013

There are a ridiculous number of guides on the web detailing how to create a bootable Windows 7 USB drive in Linux. However, many of those guides have missing steps, involve using Windows, or use programs not readily available on modern Linux distributions.

The following post will walk you through creating a bootable Windows 7 USB drive from some of the modern Linux distributions.

Continue reading...

Correct Smartphone Video Orientation and How To Rotate iOS and Android Videos with ffmpeg

Tuesday, June 4, 2013

Have you ever recorded a video with your smartphone only to view it on a computer or TV and have it displayed upside down? If so, here’s why.

The following has been verified on an iPhone 4, iPhone 5, and a Nexus 4. Results may differ with other and newer smartphones.

Continue reading...

OpenSSL CA Signing Error field needed to be the same in the CA certificate

Thursday, May 30, 2013

When signing a CSR with my own CA the following error occurs even though both entries in parentheses are the same:

Continue reading...

Fedora 18 Uninstall AMD Catalyst Proprietary Driver

Wednesday, May 29, 2013

Version 13.4-2 of the akmod-catalyst package installs the following dependencies:

Continue reading...

Fedora 18 Fix OpenGL GLX Not Using Direct Rendering Error in Steam

Friday, May 17, 2013

I recently purchased an AMD HD 6670 graphics card to play with Steam in Fedora 18. However, whenever I would launch Steam I was presented with the following error:

Continue reading...

Fedora 18 Install AMD Catalyst Proprietary Driver with an AMD HD 6670 Graphics Card

Friday, May 17, 2013

I recently purchased an AMD HD 6670 graphics card to play around with Steam on Fedora 18.

It has been sometime since I have used a dedicated graphics card within a Linux distribution and I wanted to see how the kernel would handle installing a dedicated graphics card without installing any additional packages or drivers.

Unfortunately things did not go well. I encountered several different display behaviors on system boot. One behavior would give me a usable GUI but there were artifacts all over the screen. The second behavior would give me an unusable GUI with a partially rendered background. The third behavior would give me nothing. The display behavior would change each time the system was rebooted.

Continue reading...

Linux Stream Videos and Pictures to an Apple TV with airstream and airimg

Tuesday, May 14, 2013

The first installation step is specific to Fedora, but as long as your particular Linux distribution has a working Ruby environment the airstream gem should install without problem.

Continue reading...

Red Hat Directory Server 9 Exception in thread main No fonts found

Tuesday, May 14, 2013

If you have just installed Red Hat Directory Server 9 on RHEL 6 with only the @Base package group, java-1.6.0-openjdk, and redhat-ds packages, and are trying to open the Red Hat Identity Management Console through a forwarded SSH X session running redhat-idm-console -a http://localhost:9830, you may encounter the following Java stack trace:

Continue reading...

Keep a Red Hat Storage 2.0 Server Updated Through Red Hat Satellite Server

Tuesday, May 14, 2013

Red Hat Storage 2.0 is typically installed via the ISO image. Out of the box, a Red Hat Storage 2.0 install will retrieve its updates from the Red Hat Network. However, if you want to keep the Red Hat Storage 2.0 server updated internally via a Red Hat Satellite Server there are a few requirements:

Continue reading...

Linux MySQL Server Installation, Database and User Creation, and Administrative Commands

Wednesday, May 8, 2013

The following steps will install MySQL quickly and securely on Fedora and Enterprise Linux based distributions. In addition, commonly used administrative commands are shown.

Continue reading...

GNOME 3 Shell Customizations

Monday, May 6, 2013

A good deal of the GNOME 3 Shell can be customized using Javascript. Some of these changes can be done through the default GNOME 3 GUI, while others cannot without using the terminal.

This post will be an ever growing list of GNOME 3 Shell customizations that cannot be easily done through the default GNOME 3 GUI.

Continue reading...

RHEL 6 Manually Change Time Zone

Thursday, April 25, 2013

Time zones are the last thing a systems administrator wants to deal with. NTP usually takes care of most time related tasks, but sometimes you just need to set things manually.

Continue reading...

MegaCli64 Command Usage Cheat Sheet

Friday, February 1, 2013

The MegaCli64 command has a ridiculous amount of command line switches and the syntax is a bit bizarre as well.

The following commands I found useful when trying to physically identify a failed disk and replace it.

Continue reading...

Linux Restrict Server Login via LDAP hostObject objectClass and host Attribute

Friday, February 1, 2013

It is possible to restrict Linux server login via LDAP by using the hostObject objectClass and host attribute.

Each LDAP user that you want to restrict login access to should have the hostObject objectClass so the host attribute becomes available to that LDAP user. Each LDAP user will have as many host attributes as there are servers that user needs access to.

Continue reading...

AIX Restrict Server Login via LDAP aixauxaccount objectClass and hostsallowedlogin Attribute

Monday, January 28, 2013

The following has been tested on Red Hat Directory Server 9 (389 Directory Server should also apply) and AIX 6.1 (later AIX releases should work as well).

Continue reading...

RHEL 6 Darwin Streaming Server 6.0.3 Install

Monday, January 28, 2013

Darwin Streaming Server has not been updated in many years and is dated compared to modern streaming technology.

If you still need Quicktime and RTSP streaming, the following steps will walk you through setting up a working Darwin Streaming Server on RHEL 6.0 - 6.3.

Continue reading...

AIX Restrict Server Login via LDAP Groups

Monday, January 28, 2013

The following has been tested on Red Hat Directory Server 9 (389 Directory Server should also apply) and AIX 6.1 (later AIX releases should work as well).

Continue reading...

Linux LDAP getent passwd uidNumber Not Returning a Result

Monday, January 28, 2013

This particular LDAP server contains about 24,000 entries. The user POSIX uidNumbers are all over the place but many of them are above 10,000. On a client server that can successfully talk to the LDAP server, I am unable to run getent passwd uidNumber to lookup a user via their uidNumber. getent passwd uid works and after running getent passwd uid I can run getent passwd uidNumber of that same user and get a result.

Continue reading...

Linux Restrict Server Login via LDAP Groups

Monday, January 28, 2013

Either method below should work using RHEL 5 or RHEL 6, but only use PAM LDAP or SSSD, not both.

Continue reading...

RHEL 5 and RHEL 6 Core vs Base Package Group

Wednesday, January 23, 2013

Typically, RHEL 5 and RHEL 6 are installed with at least the @Base package group. However, @Core is also available to install an even more minimal amount of packages.

Below are the package differences between the @Core and @Base package groups in RHEL 5 and RHEL 6.

Continue reading...

OS X Change hibernatemode with pmset for Instant Wake from Sleep

Wednesday, January 16, 2013

The default hibernatemode on Apple laptops is 3 which does the following:

Continue reading...

Fedora 18 Kickstart Profile Package Group Name Changes

Wednesday, January 16, 2013

Fedora 18 was released yesterday, January 15, 2013, and I immediately wanted to kickstart it. So, I downloaded the DVD ISO, copied my Fedora 17 kickstart profile to a new file, made the appropriate Fedora 18 changes to that kickstart profile, and kicked it off.

Continue reading...

Linux Install cMatrix from RPM, DEB, XZ, or Source

Thursday, January 10, 2013

cMatrix does not appear to be actively developed anymore; the last news update on the maintainer’s website is from March 31, 2002.

Luckily, the source code is still available from the maintainer’s website and can still be compiled on modern Linux distributions. In addition, someone has been kind enough to create RPM, DEB, and XZ packages for Fedora, Debian, Ubuntu, and Arch.

Continue reading...

Linux Compile skippy-xd from Source

Tuesday, January 8, 2013

skippy-xd is a more advanced and modern fork of skippy.

Continue reading...

Linux Compile skippy from Source

Saturday, January 5, 2013

Outside of GNOME 3, Unity, and compiz, I do not know of any choices for Mac OS X Expose like functionality within a Linux distribution. skippy answers this problem somewhat. skippy no longer appears to be in development, and has since been forked to skippy-xd to offer more advanced functionality, but it is still possible to compile and install skippy on modern Linux distributions.

Continue reading...

Customize Your BASH Prompt

Thursday, January 3, 2013

TwistedCode has a fantastically detailed post about customizing your BASH prompt. I used the information there to create the following BASH prompt that I use across my local machine and servers.

Continue reading...

Linux DVD Ripping with dvdbackup

Thursday, December 27, 2012

dvdbackup has been one of the simplest programs I have used to backup DVDs on Linux distributions.

The following steps will install the dvdbackup RPM based package and compile libdvdcss, to decrypt the DVDs, from source.

Continue reading...

Linux Install and Encode with HandBrake on the Command Line

Thursday, December 27, 2012

HandBrake is a great tool to rip DVDs and convert them to a particular format.

The following steps will go through how to install HandBrake from source on Fedora and Enterprise Linux based distributions.

Continue reading...

OS X Flush DNS Cache

Thursday, December 27, 2012

Mac OS X, now just OS X, seems to change the way the DNS cache is flushed every couple of releases.

Below are the various commands to flush the DNS cache from Mac OS X 10.4 Tiger to OS X 10.9 Mavericks.

Continue reading...

Fedora 17 anaconda dracut Boot Line Syntax

Thursday, December 27, 2012

Fedora 17 introduced new anaconda boot line syntax. Up to Fedora 16 the syntax was as follows:

Continue reading...

Fedora 17 Chrome Font Rendering Fix

Wednesday, August 29, 2012

After installing Fedora 17, I noticed font rendering in Chrome was terrible, but fonts in Firefox looked just fine.

This has something to do with Chrome not honoring the system font hinting settings.

Continue reading...

OS X Update Terminal Tab Text with PROMPT_COMMAND

Sunday, August 26, 2012

From Mac OS X 10.3 to OS X 10.8, the Terminal application has always had a problem updating its tab text when disconnecting from an SSH server.

The tab text will update properly when connecting to an SSH server, but upon disconnecting, it will still show the FQDN of the server you were connected to.

Continue reading...

ejabberd mod_shared_roster with Proper Roster Names Setup

Wednesday, August 22, 2012

When using LDAP authentication and mod_shared_roster, the user’s proper name will not be displayed unless mod_vcard_ldap is setup.

Continue reading...

Linux Rescan SCSI Bus

Wednesday, August 22, 2012

Below are three different methods for rescanning SCSI devices that I have tested on RHEL 5 and RHEL 6.

Continue reading...

Linux Make ddclient Work with Multiple Namecheap Domains

Wednesday, August 22, 2012

ddclient 3.8.1 or older will not be able to update multiple Namecheap domains.

For example, if you are trying to update domain names and and their particular hostnames, @, www, or mail, ddclient will only update the first hostname it encounters.

Continue reading...

ejabberd mod_shared_roster_ldap Setup

Wednesday, August 22, 2012

The following configuration will search through the specified base dn for groups containing JabberRosterGroup in the Active Directory info field. This is what ldap_rfilter does.

From there, ldap_gfilter goes through each group returned by ldap_rfilter and uses the ldap_groupattr and ldap_groupdesc attributes to retrieve the group description, which is used for the user roster group name. In addition, when each group returned by ldap_rfilter is parsed for its description, ldap_ufilter is run against that group to retrieve the list of members.

Continue reading...

Solaris Replicate ZFS Volume with zfs send and zfs receive

Wednesday, August 22, 2012

ZFS provides a mechanism to migrate or backup ZFS pools from one server to another using SSH.

For example, pretend you have a large ZFS pool to migrate from one server to another, but your maintenance window to perform the copy is very small. You could run the initial ZFS replication, which will take a considerable amount of time, then when your maintenance window opens, run the ZFS replication again to only copy everything that changed (the incrementals). This will take much less time and hopefully fit within your maintenace window.

The following commands show how to start the initial replication and then the replicate incrementals.

Continue reading...

Solaris Sun Cluster Rename Device ID (DID)

Wednesday, August 22, 2012

There are situations where a Sun Cluster Device ID, also known as a DID, needs to be renamed.

The following commands show you how to do this.

Continue reading...

Solaris Recreate Failed iSCSI Target Backed by Directory

Wednesday, August 22, 2012

Upon rebooting an Oracle Thumper 4500 at build SunOS 5.10 Generic_139556-08 i86pc i386 i86pc Solaris 10 5/09 s10x_u7wos_08 X86, the LUN information shown when running iscsitadm list target -v $TARGET was unknown and the Target name was truncated. The iSCSI initiator could connect to the iSCSI target but the disk would never mount. This particular Oracle server had not been patched in a while, and there was probably a patch available to fix this problem, but I wanted to detail the steps I took to recover the data.

Continue reading...