Noun

1. (computing) The putative tendency of content in storage to become corrupt over time.

2. (computing) The tendency of software in storage to develop bugs over time due to minor incompatibilities with newer operating environments.


It’s been a while.

After nearly 4 years I figured it was time to remove the email address from the site – all it did was attract a small quantity of spam.

The change was simple enough, but then it was time to rebuild the site.

Unfortunately my setup had suffered from bit rot (second definition) due to lack of use.

The first issue was the removal of the system Ruby in a previous version of macOS. I used RVM to install Ruby 2.6 (which had to be built from source, but thankfully this was successful).

Attempted to build the site again:

$ jekyll build
Could not find proper version of jekyll (3.7.0) in any of the sources
Run `bundle install` to install missing gems.

Sigh.

$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/.........
Fetching public_suffix 3.0.1
Installing public_suffix 3.0.1
Fetching addressable 2.5.2
Installing addressable 2.5.2
Using bundler 1.17.3
Using colorator 1.1.0
Fetching concurrent-ruby 1.0.5
Installing concurrent-ruby 1.0.5
Fetching eventmachine 1.2.5
Installing eventmachine 1.2.5 with native extensions
Fetching http_parser.rb 0.6.0
Installing http_parser.rb 0.6.0 with native extensions
Fetching em-websocket 0.5.1
Installing em-websocket 0.5.1
Fetching ffi 1.9.18
Installing ffi 1.9.18 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

Grrr.

At this point I decided the solution was probably to upgrade Jekyll. With hindsight that was probably not the correct answer, but never mind – it was an easy upgrade.

$ bundle update
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Bundler could not find compatible versions for gem "jekyll":
  In Gemfile:
    jekyll (~> 4.3.1)

    jekyll-feed (~> 0.6) was resolved to 0.17.0, which depends on
      jekyll (>= 3.7, < 5.0)

    jekyll-font-awesome-sass was resolved to 0.1.1, which depends on
      jekyll (>= 2.5, < 4.0)`

I had a dependency that didn’t work with Jekyll 4. Whether it actually didn’t work or was just conservative in what it claimed to work with, I don’t know.

jekyll-font-awesome-sass hasn’t been updated in some time and appears to no longer be supported. Thankfully all it did was provide Fontawesome, so the easiest solution was simply to vendor it into the project instead. This necessitated upgrading to Fontawesome 5, as Fontawesome 4 was no longer available for download. There were a few small fixes to make, but nothing too arduous.

At this point I could install the toolchain and build the site again.

The next problem: I was using a tool called s3_website to upload the site to S3 and invalidate the Cloudfront distribution. Unfortunately it only works on Java 8, and is no longer actively maintained.

In the end, it was easy to replace with a two line shell script. An aws s3 sync command to upload the files, and a command to invalidate the distribution. I’m sure s3_website must have done other things, but it’s not clear what they were and right now, I don’t care.

The most important part is that I can update the site again (can does not necessarily imply will).

I’m sure there’s a moral to this story.