Posted by: terryhowe | February 18, 2015

Grep Files Without Match

I accidentally discovered that grep -L give a list of files that do *not* match the pattern.  That is a pretty neat feature that I hadn’t noticed before.  It has been a while since I looked at the grep man page.  The discovery caused some unwanted side effects though.

Posted by: terryhowe | February 17, 2015

Ubuntu Strip GPS Information out of Images

I always forget how to do this, so time to write it up. First, install the exiftool:
sudo apt-get install libimage-exiftool-perl

Next, remove the exif data:
exiftool -all= picture.jpg

To verify:
exiftool picture.jpg

Posted by: terryhowe | January 16, 2015

OpenStack Client and Neutron Client Patches

I keep running around to different machines and need to patch OpenStack Client and Neutron Client. OSC has a bug where it does not pass the region to the compute client. I submitted a fix that has been merged to main, but not released. Neutron client has a bug where it doesn’t properly handle some keystone v3 authentication domain information. I also submitted a patch for this and it too has been merged, but not released. The patches are:

patch ~/.venv/lib/python2.7/site-packages/openstackclient/compute/ <<!
diff --git a/openstackclient/compute/ b/openstackclient/compute/
index 3725350..166747d 100644
--- a/openstackclient/compute/
+++ b/openstackclient/compute/
@@ -50,6 +50,7 @@ def make_client(instance):
+ region_name=instance._region_name,

return client

patch ~/.venv/lib/python2.7/site-packages/neutronclient/ <<!
diff --git a/neutronclient/ b/neutronclient/
index 0329d52..9d703b5 100644
--- a/neutronclient/
+++ b/neutronclient/
@@ -719,8 +719,8 @@ class NeutronShell(app.App):
project_info = (self.options.os_tenant_name or
self.options.os_tenant_id or
(self.options.os_project_name and
- (self.options.project_domain_name or
- self.options.project_domain_id)) or
+ (self.options.os_project_domain_name or
+ self.options.os_project_domain_id)) or

if (not self.options.os_username

Posted by: terryhowe | December 23, 2014

fatal error: Python.h: No such file or directory

When running multiple versions of tests this is a common problem caused by not having the correct development package installed. You do a find and you have a version of Python.h, but not the right now. There are potentially several packages you need to install on Ubuntu for python or pypy:

sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt-get install python3.3-dev
sudo apt-get install python3.4-dev
sudo apt-get install pypy-dev

With the latest version of pip, devstack is broken with:

Collecting prettytable>0.7
Could not find a version that satisfies the requirement prettytable>0.7 (from versions: )
No distributions matching the version for prettytable>0.7

You’ll need this patch:

diff --git a/tools/ b/tools/
index 1732ecc..7da3b31 100755
--- a/tools/
+++ b/tools/
@@ -79,7 +79,7 @@ function get_package_path {

# Fix prettytable 0.7.2 permissions
# Don't specify --upgrade so we use the existing package if present
-pip_install 'prettytable>0.7'
+pip_install 'prettytable>=0.7'
PACKAGE_DIR=$(get_package_path prettytable)
# Only fix version 0.7.2
dir=$(echo $PACKAGE_DIR/prettytable-0.7.2*)

Outstanding review:

Posted by: terryhowe | August 5, 2014

Using OpenStack Python Client to Create a Server on Helion

I’d like to post this up because I am likely to forget the python-openstackclient syntax for creating a server. I’ve been through this before and forgot yet again. Here it goes:

os server create --flavor m1.tiny --image 79a19846-d614-419b-b4f8-cb503bffe8f4 --nic "net-id=fe40196d-9fd7-415c-80a1-204f4d2630b1" serverName --debug

Where 79a19846-d614-419b-b4f8-cb503bffe8f4 is the image and e908c11e-5b96-4c90-86c6-44cd8d371709 is the network. The –nic option is used when it would be nice to have a –network option that uses the append option.

Posted by: terryhowe | June 26, 2014

Git: How to Reset Local Master to Remote

I often forget to create a branch and accidentally commit to my local master branch.  I should write a little shell script or something to reset master to remote:

git fetch origin
git reset --hard origin/master
Posted by: terryhowe | March 21, 2014

Python on OSx with Funky XCode

There are several python packages that fail to install on OSx because of C compile problems.  When I trying to install virtualenv, I ran into this problem:

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

I found helped me get around that issue by add the flags to the compile.  

The next issue I had was arround a the ffi library and ffi.h not found.  I added to the flags my path to the ffi include directory.  Your directory may vary.  I ran this to discover the location of the include file: 

find / -name ffi.h

The final results for the flags in my ~/.bashrc :

export CFLAGS="-Qunused-arguments -I/Applications/"
export CPPFLAGS="-Qunused-arguments -I/Applications/

I just created a gem for that provides generic support.  The plugin allows you to use any provider that is supported by Fog with kitchen.

It can be installed with:

gem install kitchen-fog
Posted by: terryhowe | October 7, 2013

How to Generate a Public Ssh key from a Private Key

I’m always forgetting out to create a public ssh key from a private key.  I have a folder filled with various private keys, but I often don’t have a copy of the public key.  The command is:


ssh-keygen -y -f bover.pem >

Older Posts »



Get every new post delivered to your Inbox.