<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on</title><link>https://cobus.io/posts/</link><description>Recent content in Posts on</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 11 Jun 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://cobus.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Automating my personal AWS setup with Terraform</title><link>https://cobus.io/posts/2024-06-11/automating-personal-aws-setup/</link><pubDate>Tue, 11 Jun 2024 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2024-06-11/automating-personal-aws-setup/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Welcome! This is the start of a series of posts where I am going to document (and probably update) my personal AWS setup. I spun up my first Amazon EC2 instance back in 2010, and, since then, grown my setup to use 8 different AWS accounts, mostly automated with Terraform. This series will cover all choices &amp;amp; tradeoffs I made, and also document the Terraform code I use to set it all up. So grab a beverage of your choice while I turn coffee into code.&lt;/p&gt;</description></item><item><title>Migrating my Jekyll blog to Hugo with Gen-AI</title><link>https://cobus.io/posts/2024-05-28/migrating-jekyll-to-hugo/</link><pubDate>Tue, 28 May 2024 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2024-05-28/migrating-jekyll-to-hugo/</guid><description>&lt;p&gt;I&amp;rsquo;ve been neglecting my blog, and decided it is time to start writing again. So like any good software developer, I don&amp;rsquo;t actually write a post, I start by tinkering with my blog setup. I initially ran it as a Jekyll generated static site on GitHub using GitHub Pages, and then as part of a live-stream, moved it to use AWS Amplify to host it in on of my many AWS accounts. Coming back to it a few years later, I still remember the headaches of dealing with different Ruby versions, getting &lt;code&gt;rvm&lt;/code&gt; set up, and then only getting it going. The paging is currently not working, so I&amp;rsquo;ll be trying to move over to Hugo for this.&lt;/p&gt;</description></item><item><title>Remapping the Home and End keys on OSX</title><link>https://cobus.io/posts/2017-02-09/osx-home-end-keys/</link><pubDate>Thu, 09 Feb 2017 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2017-02-09/osx-home-end-keys/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;As I was pasting something into Chrome this morning, I, once again, expected the &lt;code&gt;Home&lt;/code&gt; key to take me to the start of the URL. It. Did. Not. So I decided that I won&amp;rsquo;t be able to change this ingrained behaviour and need to fix it. First Google hit led me to a post by &lt;a href="https://damieng.com/blog/2015/04/24/make-home-end-keys-behave-like-windows-on-mac-os-x" target="_blank"&gt;Damian Guard&lt;/a&gt; that I will be pasting below to keep as notes for myself. Everything from here on is from his post.&lt;/p&gt;</description></item><item><title>Yak Shaving - Makefiles</title><link>https://cobus.io/posts/2017-02-05/yak-shaving-makefiles/</link><pubDate>Sun, 05 Feb 2017 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2017-02-05/yak-shaving-makefiles/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;I woke up this morning wanting to start on a long post about &lt;a href="https://terraform.io" target="_blank"&gt;Terraform&lt;/a&gt; and how I ended up with the structure shown &lt;a href="https://github.com/cobusbernard/tf-aws-multi-account" target="_blank"&gt;in my repo&lt;/a&gt;. I recently reinstalled my Macbook &lt;a href="https://cobus.io/posts/2017-01-15/timemachine-backups/"&gt;using Netatalk for a timemachine&lt;/a&gt; , and as I fired up my vagrant image, it started to pull down the Ubuntu box first and then started configuring it. This is very useful, but it is slow. And it broke. I forgot to add &lt;code&gt;-y&lt;/code&gt; to the &lt;code&gt;apt-get&lt;/code&gt; when I initially created the install script:&lt;/p&gt;</description></item><item><title>Setting up a Timemachine server using Mesos/Marathon</title><link>https://cobus.io/posts/2017-01-15/timemachine-backups/</link><pubDate>Sun, 15 Jan 2017 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2017-01-15/timemachine-backups/</guid><description>&lt;p&gt;I am currently unable to upgrade to the latest version of &lt;a href="https://slackhq.com" target="_blank"&gt;Slack&lt;/a&gt; due to &lt;a href="https://github.com/electron/electron/issues/7840" target="_blank"&gt;this bug&lt;/a&gt;. That combined with my user profile confusion (originally I set up using a US account, then changed to an South African one) that causes requests to update to versions of iPhoto which aren&amp;rsquo;t available in my region made me decide that it is time for a reformat.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;To create a full backup to my raid&amp;rsquo;ed server, I need to set up &lt;a href="http://netatalk.sourceforge.net/" target="_blank"&gt;netatalk&lt;/a&gt;. I started reading &lt;a href="https://samuelhewitt.com/blog/2015-09-12-debian-linux-server-mac-os-time-machine-backups-how-to" target="_blank"&gt;this post&lt;/a&gt; but decided that I didn&amp;rsquo;t want to pollute my server with all of those installs. Seeing that I already have &lt;a href="http://mesos.apache.org/" target="_blank"&gt;Mesos&lt;/a&gt; and &lt;a href="https://mesosphere.github.io/marathon/" target="_blank"&gt;Marathon&lt;/a&gt; running, I went the docker route. I found &lt;a href="https://github.com/cptactionhank/docker-netatalk" target="_blank"&gt;this repo&lt;/a&gt; and proceeded to create the following Marathon config:&lt;/p&gt;</description></item><item><title>Securing AWS environments using role switching</title><link>https://cobus.io/posts/2016-09-03/aws-multi-account/</link><pubDate>Sat, 03 Sep 2016 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2016-09-03/aws-multi-account/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working with multiple AWS accounts for the last few months between various organisations. Logging into each one when I need to make a change quickly became tedious and slow. Each environment (dev, test, staging, production) has their own AWS account. The need to log in stems from taming the infrastructure with &lt;a href="https://terraform.io" target="_blank"&gt;Terraform&lt;/a&gt; for systems that have been set up by hand and dealing with the discrepancies between them, so I tend to jump between dev and staging very often. Being in this is a very normal state of affairs as most people starting out with AWS haven&amp;rsquo;t worked with any infrastructure creation automation. I will create another post detailing how to start this taming process.&lt;/p&gt;</description></item><item><title>Getting Glusterd to start at boot on Centos</title><link>https://cobus.io/posts/2016-06-12/centos-gluster-startup/</link><pubDate>Sun, 12 Jun 2016 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2016-06-12/centos-gluster-startup/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working on a pair of Centos servers using &lt;a href="https://www.gluster.org/" target="_blank"&gt;GluserFS&lt;/a&gt; for a volume that is shared by various other servers. Each time the server reboots, I had to log in and manually start the service. Turns out this is due to the networking no yet being started when the glusterd service starts. I found &lt;a href="http://unix.stackexchange.com/questions/165270/centos-7-boots-too-fast-and-network-is-not-ready-when-executing-cron-scripts" target="_blank"&gt;this post&lt;/a&gt; with the solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Execute &lt;code&gt;systemctl enable NetworkManager-wait-online&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add the following to &lt;code&gt;/lib/systemd/system/crond.service&lt;/code&gt; under &lt;code&gt;[Unit]&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Requires&lt;span style="color:#f92672"&gt;=&lt;/span&gt;network.target
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;After&lt;span style="color:#f92672"&gt;=&lt;/span&gt;syslog.target auditd.service systemd-user-sessions.service time-sync.target network.target mysqld.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will allow glusterd to be started after the network has come up.&lt;/p&gt;</description></item><item><title>Upgrading a Chef cookbook with Berkshelf</title><link>https://cobus.io/posts/2016-02-18/upgrading-berks-dependency-issue/</link><pubDate>Thu, 18 Feb 2016 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2016-02-18/upgrading-berks-dependency-issue/</guid><description>&lt;p&gt;I just upgraded my chef-clients via the &lt;a href="https://github.com/hw-cookbooks/omnibus_updater" target="_blank"&gt;omnibus_updater&lt;/a&gt; cookbook when things started breaking:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2016-02-18T21:41:13+02:00&lt;span style="color:#f92672"&gt;]&lt;/span&gt; WARN: Current apt_package&lt;span style="color:#f92672"&gt;[&lt;/span&gt;apt-transport-https&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: /var/chef/cache/cookbooks/datadog/recipes/repository.rb:24:in &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;from_file&lt;span style="color:#e6db74"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 ================================================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 Recipe Compile Error in /var/chef/cache/cookbooks/chef-wrapper-omnibus-updater/recipes/default.rb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 ================================================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 NameError
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 ---------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 uninitialized constant Chef::REST
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 Cookbook Trace:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 ---------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 /var/chef/cache/cookbooks/omnibus_updater/libraries/omnitrucker.rb:84:in `url&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 /var/chef/cache/cookbooks/omnibus_updater/recipes/downloader.rb:27:in &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;from_file&lt;span style="color:#e6db74"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 /var/chef/cache/cookbooks/omnibus_updater/recipes/default.rb:25:in `from_file&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 /var/chef/cache/cookbooks/chef-wrapper-omnibus-updater/recipes/default.rb:27:in &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;from_file&lt;span style="color:#e6db74"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 Relevant File Content:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 ----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 /var/chef/cache/cookbooks/omnibus_updater/libraries/omnitrucker.rb:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 77: if(url_or_node.is_a?(Chef::Node))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 78: url = build_url(url_or_node)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 79: node = url_or_node
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 80: else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 81: url = url_or_node
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 82: raise &amp;#34;Node instance is required for Omnitruck.url!&amp;#34; unless node
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 83: end
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 84&amp;gt;&amp;gt; request = Chef::REST::RESTRequest.new(:head, URI.parse(url), nil)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 85: result = request.call
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 86: if(result.kind_of?(Net::HTTPRedirection))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;192.168.5.5 87: result[&amp;#39;&lt;/span&gt;location&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 88: end
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 89: end
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 90:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 91: end
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 92: end
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;192.168.5.5 93:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Googling for &lt;code&gt;uninitialized constant Chef::REST&lt;/code&gt; only yielded some results from March 2013, so I decided to upgrade the &lt;code&gt;omnibus_updater&lt;/code&gt; cookbook from &lt;code&gt;1.0.4.&lt;/code&gt; to &lt;code&gt;1.0.6&lt;/code&gt; by editing &lt;code&gt;metadata.rb&lt;/code&gt;. I bumped the dependency version as well as my wrapper cookbook version, but when I ran &lt;code&gt;berks install&lt;/code&gt;, I got the following:&lt;/p&gt;</description></item><item><title>Parameterizing Web.config</title><link>https://cobus.io/posts/2016-02-06/parameterizing-webconfig/</link><pubDate>Sat, 06 Feb 2016 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2016-02-06/parameterizing-webconfig/</guid><description>&lt;p&gt;Most people would have experienced the issue of setting values in &lt;code&gt;web.config&lt;/code&gt; for a project on different environments, i.e. the connection string for the database. My first attempt at resolving this was to simply create multiple configurations and build the appropriate one per environment. This has multiple issues: you are including sensitive information in your build artifact, creating different builds for the same version (to allow different values) and tightly coupling your build process to your environment values. This will require a rebuild if your connection string changes, which could be problematic if you are unable to build a specific version easily. But it won&amp;rsquo;t be the exact same version as you would need to commit the new config value, re-tag and finally rebuild the solution. Sounds like too much effort for a simple change.&lt;/p&gt;</description></item><item><title>NTP on AWS</title><link>https://cobus.io/posts/2015-12-16/ntp-on-aws/</link><pubDate>Wed, 16 Dec 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-12-16/ntp-on-aws/</guid><description>&lt;p&gt;Ran into an issue where a Linux instance running on &lt;a href="http://aws.amazon.com" target="_blank"&gt;AWS&lt;/a&gt; in a private subnet was not updating the system time via &lt;a href="https://en.wikipedia.org/wiki/Network_Time_Protocol" target="_blank"&gt;NTP&lt;/a&gt;. First check was for the config file, but it had a list of servers, both inside and 1 outside AWS:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server 0.amazon.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server 0.us.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server 1.amazon.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server 2.amazon.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From this post (I would like to link to it, but it has been 8.5 years since I wrote this, and only found the missing link today on 2024/05/29) I tried both &lt;code&gt;ntpdate&lt;/code&gt; and &lt;code&gt;ntpdate-debian&lt;/code&gt; with the following results:&lt;/p&gt;</description></item><item><title>Using the Git tag as a version number via PSake</title><link>https://cobus.io/posts/2015-04-04/gitflow-semver-psake/</link><pubDate>Sat, 04 Apr 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-04-04/gitflow-semver-psake/</guid><description>&lt;p&gt;I have been spending most of my time splitting up a &lt;a href="http://en.wikipedia.org/wiki/Monolithic_system" target="_blank"&gt;monolithic system&lt;/a&gt; into separately deployable &lt;a href="https://www.nuget.org/" target="_blank"&gt;NuGet&lt;/a&gt; packages. The system is monolithic in the sense that there are multiple domains that are deployed as independent WCF services, but all reference the same set of base projects. This means that all the source sits in the same repository. The first step has been to move these common libraries into NuGet packages served from a local network folder and referencing them in each of these solutions as a package rather than project.&lt;/p&gt;</description></item><item><title>External MSBuild for WebApi in VS 2013 fails</title><link>https://cobus.io/posts/2015-03-30/msbuild-external-error/</link><pubDate>Mon, 30 Mar 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-03-30/msbuild-external-error/</guid><description>&lt;p&gt;Earlier today, I ran into the following error when trying to build a new WebApi solution using the command-line and MSBuild:&lt;/p&gt;
&lt;p&gt;&lt;img src="./images/MSB4019.png" alt="MSB4019"&gt;&lt;/p&gt;
&lt;p&gt;This is odd as v11 is Visual Studio 2012 and don&amp;rsquo;t even have 2012 installed. The issue manifests when you try to build the solution with: &lt;code&gt;msbuild /t:Clean;Rebuild /v:q /p:Configuration=$projectConfig $source_dir\$projectName.sln /p:Platform=&amp;quot;Any CPU&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The cause and solution is discussed on &lt;a href="http://stackoverflow.com/questions/12026754/msbuild-deploy-failing-after-upgrade-to-net-4-5" target="_blank"&gt;Stack Overflow&lt;/a&gt; - TL;DR version is this is due to adding the feature for older versions of Visual Studio, but then not setting the correct version number. To fix the issues, remove the following lines from your csproj file:&lt;/p&gt;</description></item><item><title>Git checkout error for public repo</title><link>https://cobus.io/posts/2015-02-27/git-checkout-ssh-vs-https/</link><pubDate>Fri, 27 Feb 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-02-27/git-checkout-ssh-vs-https/</guid><description>&lt;p&gt;One of those &lt;em&gt;djissis duh&lt;/em&gt; moments - trying to check out a public git repo, but failing due to authentication &amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone git@github.com:cobusbernard/Scripts.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Cloning into &lt;span style="color:#e6db74"&gt;&amp;#39;Scripts&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Warning: Permanently added the RSA host key &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; IP address &lt;span style="color:#e6db74"&gt;&amp;#39;192.30.252.131&amp;#39;&lt;/span&gt; to the list of known hosts.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Permission denied &lt;span style="color:#f92672"&gt;(&lt;/span&gt;publickey&lt;span style="color:#f92672"&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fatal: Could not read from remote repository.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Please make sure you have the correct access rights
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;and the repository exists.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So I checked my ssh setup / keys, but nothing in there looks dodgy:&lt;/p&gt;</description></item><item><title>Replacing mdadm drive</title><link>https://cobus.io/posts/2015-02-19/mdadm-replace-drive/</link><pubDate>Thu, 19 Feb 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-02-19/mdadm-replace-drive/</guid><description>&lt;p&gt;&lt;em&gt;Update 2016-01-09&lt;/em&gt;: In the previous version, I never added the command for creating the array and since then I needed it for a new server. When the array starts rebuilding, it &lt;em&gt;will&lt;/em&gt; look like there is a failed drive: this is normal. When it builds from scratch, it is actually doing the rebuild process and will indicate a failed drive until the array is rebuilt.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# cat /proc/mdstat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;md0 : active raid5 sdd1&lt;span style="color:#f92672"&gt;[&lt;/span&gt;3&lt;span style="color:#f92672"&gt;]&lt;/span&gt; sdc1&lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; sdb1&lt;span style="color:#f92672"&gt;[&lt;/span&gt;0&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;4294702080&lt;/span&gt; blocks super 1.2 level 5, 512k chunk, algorithm &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;3/2&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;UU_&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;[====&lt;/span&gt;&amp;gt;................&lt;span style="color:#f92672"&gt;]&lt;/span&gt; recovery &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 20.1% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;433131624/2147351040&lt;span style="color:#f92672"&gt;)&lt;/span&gt; finish&lt;span style="color:#f92672"&gt;=&lt;/span&gt;420.1min speed&lt;span style="color:#f92672"&gt;=&lt;/span&gt;68006K/sec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see from the above, this isn&amp;rsquo;t very fast. I found &lt;a href="http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html" target="_blank"&gt;this article&lt;/a&gt; with some tips on increasing the speed. The one that worked for me was increasing the &lt;code&gt;stripe-cache_size&lt;/code&gt; (tip 3):&lt;/p&gt;</description></item><item><title>Moving DNS to Amazon Route 53, Dynamic Updates</title><link>https://cobus.io/posts/2015-02-17/route-53-dns-update-script/</link><pubDate>Tue, 17 Feb 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-02-17/route-53-dns-update-script/</guid><description>&lt;p&gt;In my previous post, I set up &lt;a href="https://cobus.io/posts/2015-02-14/openvpn-home/"&gt;OpenVPN on my home network&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=StTqXEQ2l-Y" target="_blank"&gt;everything was awesome&lt;/a&gt;. Until this morning: I could not connect to my VPN. I had forgotten to set up some kind of &lt;a href="http://en.wikipedia.org/wiki/Dynamic_DNS0" target="_blank"&gt;dynamic DNS&lt;/a&gt; updater for it. That should be easy enough, I had previously done this using &lt;a href="http://dyn.com/all-dns" target="_blank"&gt;DynDNS&lt;/a&gt;. Only problem was that the &lt;a href="http://dyn.com/blog/why-we-decided-to-stop-offering-free-accounts/" target="_blank"&gt;service is no longer free&lt;/a&gt;. This shouldn&amp;rsquo;t be too much of a problem as I have a couple of my own domains - yes, I will one day still get round to finishing my pet project &amp;lsquo;Tinkle Tones&amp;rsquo; ;)&lt;/p&gt;</description></item><item><title>Home VPN with OpenVPN</title><link>https://cobus.io/posts/2015-02-14/openvpn-home/</link><pubDate>Sat, 14 Feb 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-02-14/openvpn-home/</guid><description>&lt;p&gt;Having just set up an &lt;a href="https://cobus.io/posts/2015-02-13/openvpn-on-digital-ocean/"&gt;external VPN&lt;/a&gt; to pretend to be in the US, I wanted one to get into my home network as well when on the road. I ran into the issue while in the USA recently where I was unable to purchase &lt;a href="http://store.steampowered.com/" target="_blank"&gt;Steam&lt;/a&gt; games as their servers picked up that I was in the States, but my payment method was South African. Never thought I would need to &lt;a href="https://twitter.com/cobusbernard/status/554462128485457921" target="_blank"&gt;spoof my own IP Address to pretend to be in South Africa&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Personal VPN - OpenVPN in Docker on DigitalOcean</title><link>https://cobus.io/posts/2015-02-13/openvpn-on-digital-ocean/</link><pubDate>Fri, 13 Feb 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-02-13/openvpn-on-digital-ocean/</guid><description>&lt;p&gt;I was playing around on a &lt;a href="http://netflix.com" target="_blank"&gt;random&lt;/a&gt; site today, when I received the message &lt;em&gt;This content is not available in your country yet&lt;/em&gt;. As a South African, we run into this a lot as our online presence it not that large and most international companies do not feel it is financially viable to run their services here. So I decided it is time to get a VPN going to avoid this. I decided to use a &lt;a href="https://www.digitalocean.com/" target="_blank"&gt;Digital Ocean&lt;/a&gt; Droplet for the task - costing $5 a month is cheap enough. The smallest one has 512MB Ram, 20GB SSD, 1 core and 1TB of transfer - this will be plenty to get the VPN up and possibly some other services. Signup was very quick and I was happy to see that they support 2 factor auth via &lt;a href="https://itunes.apple.com/za/app/google-authenticator/id388497605?mt=8" target="_blank"&gt;Google Authenticator&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Converting Putty keys to OpenSSH</title><link>https://cobus.io/posts/2015-02-08/convert-putty-keys-to-openssh/</link><pubDate>Sun, 08 Feb 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-02-08/convert-putty-keys-to-openssh/</guid><description>&lt;p&gt;I was playing with &lt;a href="http://docker.com" target="_blank"&gt;Docker&lt;/a&gt; yesterday and needed to convert a key that I had been using in Windows with Putty for a while. First attempt with puttygen didn&amp;rsquo;t work at all, then I found this &lt;a href="http://superuser.com/questions/232362/how-to-convert-ppk-key-to-openssh-key-under-linux" target="_blank"&gt;Stack Overflow post&lt;/a&gt;, copying the details here so I know where to find it next time :)&lt;/p&gt;
&lt;p&gt;To install the required tools, use&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Ubuntu: sudo apt-get install putty-tools
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;OSX: brew install putty
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After the required tools have been installed, use the following 2 commands to extract the private and public portion of the key:&lt;/p&gt;</description></item><item><title>Basic Jekyll GitHub Blog</title><link>https://cobus.io/posts/2015-01-26/basic-github-jekyll-blog/</link><pubDate>Mon, 26 Jan 2015 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2015-01-26/basic-github-jekyll-blog/</guid><description>&lt;p&gt;So I finally got round to sorting out the tech blog. I chose to use &lt;a href="http://jekyllrb.com" target="_blank"&gt;Jekyll&lt;/a&gt; rather than &lt;a href="https://wordpress.com" target="_blank"&gt;WordPress&lt;/a&gt; as I didn&amp;rsquo;t want to deal with constant updates, security vulnerabilities and backing up of the site. Jekyll generates a static site based on the posts created, but still has the advantages of a CMS like tags and categories. Posts are written using &lt;a href="http://kramdown.gettalong.org/" target="_blank"&gt;Markdown&lt;/a&gt; in a plain text file, making it very easy to do the formatting. You are able to generate the site locally before publishing / pushing it elsewhere. This is where one of the other benefits come in: &lt;a href="https://pages.github.com/" target="_blank"&gt;GitHub Pages&lt;/a&gt;. You are able to create a repository with the format &lt;code&gt;&amp;lt;GitHub Username&amp;gt;.github.io&lt;/code&gt; - in my case, that is &lt;a href="https://cobusbernard.github.io" target="_blank"&gt;cobusbernard.github.io&lt;/a&gt;. GitHub itself uses Jekyll, and by creating this repository, it automatically creates the Jekyll site for you. No backup is required as your site is already under version control in GitHub!&lt;/p&gt;</description></item><item><title>Linux SSH rate limiting</title><link>https://cobus.io/posts/2013-01-28/ssh-rate-limit/</link><pubDate>Mon, 28 Jan 2013 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2013-01-28/ssh-rate-limit/</guid><description>&lt;p&gt;Everyone who has an SSH port open to the world knows the amount of brute force attempts you will get. It doesn’t matter if you only accept keys, the script kiddies will still try. Easiest fix for this is rate limiting: you can only attempt to login 3 times per 10 minutes. This does not include successful logins, only failed ones. To do this, use the following IPTables commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables -A INPUT -p tcp --dport &lt;span style="color:#ae81ff"&gt;22&lt;/span&gt; -m state --state NEW -m recent --set --name SSH --rsource
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables -A INPUT -m recent --update --seconds &lt;span style="color:#ae81ff"&gt;600&lt;/span&gt; --hitcount &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; --rttl --name SSH --rsource -j DROP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables-save &amp;gt; /etc/iptables_rules
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add the following to /etc/rc.local before the ‘exit':&lt;/p&gt;</description></item><item><title>Using SSH Config</title><link>https://cobus.io/posts/2012-04-12/ssh-config-multiple-keys/</link><pubDate>Thu, 12 Apr 2012 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2012-04-12/ssh-config-multiple-keys/</guid><description>&lt;p&gt;If you use &lt;a href="http://www.openssh.com/" target="_blank"&gt;SSH&lt;/a&gt; on Linux a lot, you will know that having to specify the key each time you want to access a server is a pain. You really don&amp;rsquo;t want to have a single key for all servers as you would need to revoke it globally in the event that it was compromised. The ssh config file allows you to specify multiple values to use for specific hosts:&lt;/p&gt;
&lt;p&gt;To edit the ssh config, open it in &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; (or your favourite editor):&lt;/p&gt;</description></item><item><title>Chrome as default browser in Xubuntu</title><link>https://cobus.io/posts/2012-04-10/chrome-default-xubuntu/</link><pubDate>Tue, 10 Apr 2012 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2012-04-10/chrome-default-xubuntu/</guid><description>&lt;p&gt;If you need to set &lt;a href="https://www.google.com/chrome/browser/desktop/" target="_blank"&gt;Chrome&lt;/a&gt; as the default browser in &lt;a href="http://xubuntu.org/" target="_blank"&gt;Xubuntu&lt;/a&gt;, run the following from your terminal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gconftool-2 --type string -s /desktop/gnome/url-handlers/http/command &lt;span style="color:#e6db74"&gt;&amp;#34;google-chrome %s&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Install Java JDK using terminal</title><link>https://cobus.io/posts/2012-03-27/terminal-install-java-ubuntu-10.10/</link><pubDate>Tue, 27 Mar 2012 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2012-03-27/terminal-install-java-ubuntu-10.10/</guid><description>&lt;p&gt;To install the Java JDK using only the terminal, follow the following steps:&lt;/p&gt;
&lt;p&gt;Download the JDK from:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then run the following commands (change the filename as required):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -xvf jdk-7-linux-i586.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mv ./jdk1.7.0 /usr/lib/jvm/jdk1.7.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0/jre/bin/java &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --config java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0/bin/javac &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --config javac
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To test that everything is working:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Should output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java version &lt;span style="color:#e6db74"&gt;&amp;#34;1.7.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Java&lt;span style="color:#f92672"&gt;(&lt;/span&gt;TM&lt;span style="color:#f92672"&gt;)&lt;/span&gt; SE Runtime Environment &lt;span style="color:#f92672"&gt;(&lt;/span&gt;build 1.7.0-b147&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Java HotSpot&lt;span style="color:#f92672"&gt;(&lt;/span&gt;TM&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 64-Bit Server VM &lt;span style="color:#f92672"&gt;(&lt;/span&gt;build 21.0-b17, mixed mode&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;javac -version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Should output:&lt;/p&gt;</description></item><item><title>Migrating repo from SVN to Git RPC error</title><link>https://cobus.io/posts/2012-02-04/git-rpc-error/</link><pubDate>Sat, 04 Feb 2012 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2012-02-04/git-rpc-error/</guid><description>&lt;p&gt;While I was working on &lt;a href="http://www.dementium2.com" target="_blank"&gt;Dementium II HD&lt;/a&gt;, I wanted to migrate the repository from &lt;a href="https://subversion.apache.org/" target="_blank"&gt;SVN&lt;/a&gt; to &lt;a href="http://git-scm.com/" target="_blank"&gt;Git&lt;/a&gt;. It was being hosted on a machine in the one studio and served the external developers over a 10mbit ADSL connection. The upstream rate is ~400kbit, so imagine trying to checkout a 26GB repository. I ran into the following error when I tried to import the SVN repo into a Git one:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git push -v origin svn-merge-trunk:svn-trunk
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Pushing to https://git-repo/git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Counting objects: 2840, &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Delta compression using up to &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; threads.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Compressing objects: 100% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;2788/2788&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;error: RPC failed; result&lt;span style="color:#f92672"&gt;=&lt;/span&gt;22, HTTP code &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;411&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fatal: The remote end hung up unexpectedly
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Writing objects: 100% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;2840/2840&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, 3.07 MiB | &lt;span style="color:#ae81ff"&gt;474&lt;/span&gt; KiB/s, &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Total &lt;span style="color:#ae81ff"&gt;2840&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;delta 2202&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, reused &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;delta 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fatal: The remote end hung up unexpectedly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After a bit of Googling, I found a solution for this:&lt;/p&gt;</description></item><item><title>Ubuntu on Hyper-V</title><link>https://cobus.io/posts/2011-07-25/ubuntu-on-hyper-v/</link><pubDate>Mon, 25 Jul 2011 00:00:00 +0000</pubDate><guid>https://cobus.io/posts/2011-07-25/ubuntu-on-hyper-v/</guid><description>&lt;p&gt;Getting Ubuntu to run on Hyper-V was a bit of an issue for Windows Server 2008, here are some things to look for.
In the boot menu, add &lt;code&gt;vga16fb.modeset=0&lt;/code&gt; to the boot options by hitting F6 to disable &lt;code&gt;framebuffer&lt;/code&gt; mode that is &lt;strong&gt;really&lt;/strong&gt; slow under Hyper-V.&lt;/p&gt;
&lt;p&gt;Do normal install, don’t worry about the red “can’t find network issue”.&lt;/p&gt;
&lt;p&gt;Enable the Hyper-V modules:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;hv_vmbus&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/initramfs-tools/modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;hv_storvsc&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/initramfs-tools/modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;hv_blkvsc&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/initramfs-tools/modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;hv_netvsc&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/initramfs-tools/modules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;update-initramfs –u
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Disable Framebuffer (otherwise the text screen scrolls by like a 9600 modem)&lt;/p&gt;</description></item></channel></rss>