booting system... standby
This is my simple blog. My intention is to ramble about things that amuse me. One day it might develop some structure, until then…
- 11 Feb 2015 » My First Popular Open Source Project
- 25 Jan 2015 » KeePassX + YubiKey Fork Time?
- 26 Dec 2014 » Boot VirtualBox from USB Drive
- 22 Dec 2014 » Boot Linux ISOs From USB Sticks Using GRUB
- 12 Dec 2014 » GPG Breakage on v2.1
- 21 Nov 2014 » VirtualBox NAT is unreliable
- 30 Sep 2014 » Mandrill Strips My PGP Signatures?
- 14 Sep 2014 » Monitoring systemd and failing services
- 19 Aug 2014 » Linux + Radeon HD 4200 + Reduced Blanking
- 28 Jul 2014 » Quick Benchmarks of dm-cache / lvmcache
- 25 Jul 2014 » Simple and Fast Random Data Generator
- 10 Jul 2014 » Use Funtoo's Keychain Instead of GNOME Keyring
- 30 Jun 2014 » Flash Crashes When Network Interfaces Change
- 28 Apr 2014 » Poor pv and splice() Performance
- 24 Apr 2014 » Ubuntu 14.04 LTS on OpenVZ + ufw and iptables Firewall
- 21 Apr 2014 » Two Factor (2FA) SSH Authentication Using YubiKey
- 31 Mar 2014 » Pragmatic Backups
- 20 Feb 2014 » SSH Reverse Tunnel on Linux with systemd
- 07 Jan 2014 » Opt-out of Junk Snail Mail
- 30 Dec 2013 » Time Warner Cable aka RoadRunner TLS and SSL Mail Fail
- 14 Dec 2013 » Long Range Zip Musings
- 29 Sep 2013 » Using Native IPv6 via Comcast in San Francisco
- 26 Aug 2013 » Where have I been?
- 14 Jul 2013 » FSSH part 2: Tmux and Vim
- 07 Jul 2013 » Dying Gigabyte Motherboard
- 30 Jun 2013 » SSD Caching Using dm-cache Tutorial
- 20 Jun 2013 » SSH Reverse Tunnel on Mac OS X
- 17 Jun 2013 » Ubuntu 13.04 Bandwidth Shaping and Traffic Control using HTB
- 16 Jun 2013 » Leveraging Upstart for User Jobs
- 15 Jun 2013 » Remote ssh copy paste buffers using fssh
- 09 Jun 2013 » Use imapfilter to filter SPAM - part 2
- 02 Jun 2013 » Android CA Certificates
- 01 Jun 2013 » Parse eMMC Extended CSD (ECSD) Registers with Python
- 30 May 2013 » Manage LXCs with Docker
- 28 May 2013 » Ting
- 27 May 2013 » SSD let me down again
- 27 May 2013 » BitTorrent Sync
- 26 May 2013 » Use imapfilter to filter SPAM - part 1
- 13 May 2013 » GNOME Keyring Access for Python
- 12 May 2013 » Lua popen3() Implementation
- 12 May 2013 » Btrfs filesystem trips up
- 09 May 2013 » Linux SSD caching part 2
- 08 May 2013 » Epson WorkForce WF-3520 + Ubuntu 13.04
- 06 May 2013 » GNOME Keyring Daemon Breaks My GPG Encrypted Backups
- 05 May 2013 » Issue with my SSD + btrfs + discard
- 26 Apr 2013 » Issues with Ubuntu's UFW on OpenVZ VPS
- 20 Apr 2013 » Linux SSD caching
- 10 Apr 2013 » My Wi-Fi access point revisited
- 01 Jan 2013 » New job, moving cross country
- 06 Sep 2012 » Ubuntu 12.04 LTS Minimal GUI
- 05 Sep 2012 » The smoking gun
- 29 Aug 2012 » A story about a car...
- 07 Aug 2012 » Managing /etc with etckeeper
- 06 Aug 2012 » Hello World
My First Popular Open Source Project
February 11, 2015
A Pretty Good Idea
I started playing around with Digital Ocean last year and wanted to setup an OpenVPN server in a droplet. Better yet, set it up in a Docker container to manage the mess. Okay, somebody already did this right? Kind of. I stumbled upon Jérôme Petazzoni’s jpetazzo/dockvpn project and DOCKER + JOYENT + OPENVPN = BLISS blog posting. It was closed but missed the point of simplifying the PKI headache typically associated with OpenVPN. Plus the mechanism for distributing a single static key (as opposed to a PKI configuration) scared me. He wrote the blog post to demonstrate how to leverage a cloud host (Joyent) + Docker + OpenVPN – not on how to make it the best thing ever… that’s where I came in.
I forked his project with the primary goal to implement a proper PKI. Well, that’s not actually that hard and so kylemanna/docker-openvpn was born. I ripped out the strange http server to distribute the static key and added EasyRSA to manage the PKI. I wrote some quick wrapper scripts to manage some common tasks (generate PKI, generate certs, get cert+config). Tested it out and called it a day or a week or whatever.
People Started Using It
Suddenly people started using it. Well, okay, cool. Then I started getting handy pull requests. Then more people started using it. Cool. I realized with pull request #9 that most people seemed to acknowledge they liked my implementation more. That’s a welcome compliment.
Could I Make Some Money?
Digital Ocean has an awesome referral program: $25 for me and $10 discount for new sign-ups. All I needed to do was place my referral link in the
README.md and I would get some nice passive money to fund testing kylemanna/openvpn on Digital Ocean and my other servers. Now I can help users find a cloud provider that’s known to work and they help fund development. Right now I’m averaging maybe one sign-up referral a week. Not bad. Time will tell to see how many of those convert to payouts after people spend over the minimum amount for Digital Ocean to pay me.
Money For Tutorials
Digital Ocean also pays people money to write tutorials. This is an interesting SEO tactic that results in a Google searches for popular technologies returning results on Digital Ocean. It seemed obvious: I’ll write a tutorial using the existing
README.md as a template.
I wrote a tutorial, and after what seemed like forever (2 months?) over the year end holidays of 2014 my Digital Ocean Docker + OpenVPN tutorial was published. They paid me $200 which I cashed out via PayPal minus PayPal fees (grrr, begin Bitcoin rant…)
Interestingly enough, after the two revision of the article went through, my link back to Digital Ocean still contains my referral code. More referrals -> :).
Who Is Using This
Prior to writing the tutorial I wanted to track my Docker Hub Registry statistics. Now, I’m not a web guy (or cloud guy!), so I poked around and stumbled on a solution. I used import.io to scrape the Docker Hub Registry page and log the downloads, stars. Initially I queried import.io from my home workstation, but I later leveraged Google Docs Sheets + Google App Scripts to poll import.io. Then I could graph the data in Google Sheets. At the time of writing it looked something like this:
First thing to jump out for most people is the nearly perfect linear climb from 11k downloads to 93k downloads. I have no idea what happened there, I assume someone’s cloud deploy script broke and did a 80k
docker pull kylemanna/openvpn commands. Oops.
I hope that it becomes more popular. :) IPv6 support is coming when I get time, someday.
It’d be nice if somebody could throw together a Python/Ruby/Node.js web server that could act as front end over https for administration. That’s beyond my interest (and skills) as it relates to web technologies. I envision a way to do everything my wrapper shell scripts do but from the command line. Additionally the web UI could interface to OpenVPN’s management interface and get runtime status. Changetips for anyone who provides something of significant substance.