Meta: Setting up Nikola blogging

Tonight I thought that I'd sit down at my home server, Tesla, and do a bit of blogging. This server's recently been rebuilt after a bad run-in with a hard-drive problem and I had not got around to putting my blog onto it. Instead I was blogging with work's laptop.

After spending an hour cloning and installing my blog repositories and the necessary software through trial-and-error, I thought it best to write down what is necessary to bootstrap my blogging environment, and save myself some trouble in the future.

Ideally I will make a script to get most of this going soon … but in the meantime, you are treated to a meta-blog.

Step 0, clone the repositories

I need to generate some SSH keys and register them to BitBucket and GitHub. So, one for BitBucket:

mjl@tesla:~> ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mjl/.ssh/id_rsa): /home/mjl/keys/bitbucket
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/mjl/keys/bitbucket-temp.
Your public key has been saved in /home/mjl/keys/bitbucket-temp.pub.
The key fingerprint is:
eb:db:95:03:c9:d9:de:22:74:cf:5f:bf:b8:c2:1d:c3 [MD5] mjl@tesla.locknet
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         . +     |
|        S * +    |
|         o + E   |
|        . o B * .|
|       . . = +..o|                                                                                                                                                                     
|        o.. .o..+|                                                                                                                                                                     
+--[MD5]----------+                                                                                                                                                                     
mjl@tesla:~>

And also another for GitHub:

mjl@tesla:~> ssh-keygen                                                                                                                                                                 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mjl/.ssh/id_rsa): /home/mjl/keys/github
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/mjl/keys/github-temp.
Your public key has been saved in /home/mjl/keys/github-temp.pub.
The key fingerprint is:
c7:1f:a1:95:53:31:65:e9:3f:9b:82:bb:1a:f9:6d:ba [MD5] mjl@tesla.locknet
The key's randomart image is:
+--[ RSA 2048]----+
|              +o+|
|             o + |
|            = .  |
|         . o o . |
|        S + .   .|
|         ... . ..|
|         o  o   +|
|          o..o o |
|         ..E*..  |
+--[MD5]----------+
mjl@tesla:~>

Then add them to my ssh-agent:

mjl@tesla:~> ssh-add keys/bitbucket
Enter passphrase for keys/bitbucket: 
Identity added: keys/bitbucket (keys/bitbucket)
mjl@tesla:~> ssh-add keys/github
Enter passphrase for keys/github: 
Identity added: keys/github (keys/github)
mjl@tesla:~>

(and also register them at each web site using the profile settings)

Now I can clone the repositories:

  • Clone my BitBucket Mercurial repository for the blog markup

    mjl@tesla:~> mkdir blogs; cd blogs
    mjl@tesla:~/blogs> hg clone ssh://hg@bitbucket.org/sinewalker/blog milosophical.me
  • and clone my GitHub Git repository for deploying at GitHub Pages

    mjl@tesla:~/blogs> cd milosophical.me
    mjl@tesla:~/blogs/milosophical.me> git clone git@github.com:sinewalker/sinewalker.github.io.git

Step 1: Build environment

Nikola is built with Python, so it is best to use a VirtualEnv and install all the libraries. I'm using the VirtualEnv Wrapper scripts. Nikola's dependencies also require a few things to be installed at the operating system layer. So before starting with my virtual environment, I install the base development tools outside of Python, but using the operating system's package management:

sudo zypper install python-virtualenv-wrapper python-devel nodejs libxml-devel libxml2-devel libxslt-devel

Step 2: Install Nikola

Once the build environment is all installed, we can begin. We'll make a new virtual environment for our blog, making sure to use Python 2.7 (Nikola supports Python 3, but my blog doesn't, yet):

mjl@tesla:~> source /usr/bin/virtualenvwrapper-2.7.sh
mjl@tesla:~> mkvirtualenv -p /usr/bin/python2.7 blog
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in test/bin/python2.7
Also creating executable in blog/bin/python
Installing setuptools, pip...done.
(blog)mjl@tesla:~>

Now switch to our blog working copy and install Nikola using pip and the requirements.txt I have saved:

(blog)mjl@tesla:~> cd blogs/milosophical.me
(blog)mjl@tesla:~/blogs/milosophical.me> pip install -r notes/requirements.txt

This will take a while. You can repeat the pip command until it succeeds, installing anything I have left out (base development packages, for instance — like C compilers and libraries — although I think that these should be installed by python-devel's dependencies if you haven't already installed them).

Step 3: Test Nikola

You should be able to run nikola commands now and see that things are working.

Make a test post:

(blog)mjl@tesla:~/blogs/milosophical.me> nikola new_post -f markdown
Creating New Post
-----------------

Title: Test Post
Scanning posts..........done!
[2015-06-08T12:29:03Z] INFO: new_post: Your post's text is at: posts/test-post.md
(blog)mjl@tesla:~/blogs/milosophical.me>

Serve the site:

(blog)mjl@tesla:~/blogs/milosophical.me> nikola serve
[2015-06-08T12:29:27Z] INFO: serve: Serving HTTP on 0.0.0.0 port 8000...

Nice. Now I can blog (i.e. this post). Remember when done with a VirtualEnv environment, you leave it by typing deactivate. Just think of Cars 2