User Tools

Site Tools


software:nikola

Nikoa

nikola

Nikola is a command line tool for generating blog posts from static files (in a variety of formats). If you so desire, it can create galleries from groupings of photos and will also build a RSS feed (for updates) and an index of all your posts (as well as a cloud of tags to group related posts).

Information about the static site generator Nikola.

More information can also be found at: http://getnikola.com/

Virtual Machine "nikola"

I have a virtual machine called nikola. This system is used to update the software and so I don't have to worry about python incompatibilities.

The nikola VM was created (originally on PC027) with the following command:

lxc-create -t download -n nikola -- -d ubuntu -r trusty -a amd64

This created the base install. Of course, the default user was Ubuntu, so I had to login and change the default user and password right away. Look at my instructions on the lxc page for my next steps (configuring the base system, to include changing the passwords).

Nikola Installation on Xubuntu1604

See also: virtualenv

Create an apps directory.

$ mkdir ~/apps/ 

Then create a python virtual environment for Nikola.

$ virtualenv nikola
$ cd nikola
$ source bin/activate
$ pip install --upgrade pip setuptools wheel
$ pip install --upgrade "Nikola[extras]"

Some information came from this website: https://www.getnikola.com/getting-started.html

Nikola Installation on host Nikola

Then I had to install nikola (and pip).

sudo apt-get install python-pip
sudo apt-get install git
sudo pip install nikola 

The pip install brought a lot of dependencies with it. However, it did not bring some system libraries needed. Based on this page (http://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-installing-eventlet) I installed the python development tools and tired to pip install nikola again.

sudo apt-get install python-dev

My next error came from lxml.

/tmp/pip_build_root/lxml/src/lxml/includes/etree_defs.h:9:31: fatal error: libxml/xmlversion.h: 
No such file or directory

 #include "libxml/xmlversion.h"

compilation terminated.

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/lxml/setup.py';
exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))"
install --record /tmp/pip-e6RpZ6-record/install-record.txt --single-version-externally-managed --compile 
failed with error code 1 in /tmp/pip_build_root/lxml

Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 35: ordinal not in range(128)

I solved this with install python-libxml

sudo apt-get install python-lxml
sudo pip install nikola 

Now I have Nikola installed. However, I'm still missing some components:

timb@nikola:~$ nikola --help
[2014-08-18T00:56:57Z] WARNING: Nikola: In order to USE_BUNDLES, you must install the "webassets" 
Python package.
[2014-08-18T00:56:57Z] WARNING: Nikola: Setting USE_BUNDLES to False.
Nikola is a tool to create static websites and blogs. For full documentation and more information, 
please visit http://getnikola.com/

Available commands:
  nikola auto                 automatically detect site changes, rebuild and optionally refresh a browser   
  nikola bootswatch_theme     given a swatch name from bootswatch.com and a parent theme, creates a
 custom theme
  nikola build                run tasks
  nikola check                check links and files in the generated site
  nikola clean                clean action / remove targets
  nikola console              start an interactive Python console with access to your site
  nikola deploy               deploy the site
  nikola doit_auto            automatically execute tasks when a dependency changes
  nikola dumpdb               dump dependency DB
  nikola forget               clear successful run status from internal DB
  nikola github_deploy        deploy the site to GitHub pages
  nikola help                 show help
  nikola ignore               ignore task (skip) on subsequent runs
  nikola import_wordpress     import a WordPress dump
  nikola init                 create a Nikola site in the specified folder
  nikola install_theme        install theme into current site
  nikola list                 list tasks from dodo file
  nikola new_page             create a new page in the site
  nikola new_post             create a new blog post or site page
  nikola orphans              list all orphans
  nikola plugin               manage plugins
  nikola serve                start the test webserver
  nikola strace               use strace to list file_deps and targets
  nikola tabcompletion        generate script for tab-complention
  nikola version              print the Nikola version number

  nikola help                 show help / reference
  nikola help <command>       show command usage
  nikola help <task-name>     show task usage

timb@nikola:~$ apt-cache search webasset
cssmin - YUI CSS compression algorithm in Python
python-webassets - Asset management application for Python web development
python-webassets-doc - Asset management application for Python web development - doc
python3-webassets - Asset management application for Python web development (Python 3)

timb@nikola:~$ which python
/usr/bin/python

timb@nikola:~$ python --version
Python 2.7.6

timb@nikola:~$ sudo apt-get install python-webassets
[sudo] password for timb:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  python-webassets-doc yui-compressor node-uglify python-cssutils node-less
  ruby-sass cssmin
The following NEW packages will be installed:
  python-webassets
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 84.1 kB of archives.
After this operation, 436 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe python-webassets all 3:0.9-1 [84.1 kB]
Fetched 84.1 kB in 1s (72.6 kB/s)
Selecting previously unselected package python-webassets.
(Reading database ... 21824 files and directories currently installed.)
Preparing to unpack .../python-webassets_3%3a0.9-1_all.deb ...
Unpacking python-webassets (3:0.9-1) ...
Setting up python-webassets (3:0.9-1) ...

The -lz means a library file named libz.so. This file is provided by the zlib1g-dev package. Run sudo apt-get install zlib1g-dev to install the package, and try your original command again (without STATIC_DEPS).

Reference: http://askubuntu.com/questions/485642/cannot-install-lxml-in-virtualenv-python

Using Nikola

Initial Book blog Config on Xubuntu1604

This created the applications. Next I had to create the data directory for my Book Blog and initialize it.

$ cd ~/apps/nikola/
$ source bin/activate
(nikola)$ mkdir -p ~/Documents/blogs/
(nikola)$ cd ~/Documents/blogs/
(nikola)$ nikola init books

I also needed to create a serve.sh (for the book blog) file:

#! /bin/bash
cd output
nikola serve --port 8042 --address 0.0.0.0
cd ..

The port (above in source.sh) needs to be changed as follows:

Port Blog
8042 books
8041 bruce4
8040 tbruce

Using the IP Address of 0.0.0.0 means it is accessible from any host on the network.

Initial Generic Config

Nikola Host

Now I had to build a Nikola “site” to start working in.

Using nikola –help I got a list of commands.

timb@nikola:~$ nikola --help
[2014-08-16T23:22:05Z] WARNING: Nikola: In order to USE_BUNDLES, you must install the "webassets" Python package.
[2014-08-16T23:22:05Z] WARNING: Nikola: Setting USE_BUNDLES to False.
Nikola is a tool to create static websites and blogs. For full documentation and more information, please visit http://getnikola.com/


Available commands:
  nikola auto                 automatically detect site changes, rebuild and optionally refresh a browser
  nikola bootswatch_theme     given a swatch name from bootswatch.com and a parent theme, creates a custom theme
  nikola build                run tasks
  nikola check                check links and files in the generated site
  nikola clean                clean action / remove targets
  nikola console              start an interactive Python console with access to your site
  nikola deploy               deploy the site
  nikola doit_auto            automatically execute tasks when a dependency changes
  nikola dumpdb               dump dependency DB
  nikola forget               clear successful run status from internal DB
  nikola github_deploy        deploy the site to GitHub pages
  nikola help                 show help
  nikola ignore               ignore task (skip) on subsequent runs
  nikola import_wordpress     import a WordPress dump
  nikola init                 create a Nikola site in the specified folder
  nikola install_theme        install theme into current site
  nikola list                 list tasks from dodo file
  nikola new_page             create a new page in the site
  nikola new_post             create a new blog post or site page
  nikola orphans              list all orphans
  nikola plugin               manage plugins
  nikola serve                start the test webserver
  nikola strace               use strace to list file_deps and targets
  nikola tabcompletion        generate script for tab-complention
  nikola version              print the Nikola version number

  nikola help                 show help / reference
  nikola help <command>       show command usage
  nikola help <task-name>     show task usage
  nikola help <task-name>     show task usage

So now I can build my site:

timb@nikola:~$ nikola init --help
Purpose: create a Nikola site in the specified folder
Usage:   nikola init [--demo] [--quiet] folder

Options:
  -q, --quiet               Do not ask questions about config.
  -d, --demo                Create a site filled with example data.
timb@nikola:~$ nikola init bruce4
Creating Nikola Site
====================

This is Nikola v7.0.1.  We will now ask you a few easy questions about your new site.
If you do not want to answer and want to go with the defaults instead, simply restart with the `-q` parameter.
--- Questions about the site ---
Site title [My Nikola Site]: Bruce Family Web Site
Site author [Nikola Tesla]: Timothy J Bruce
Site author's e-mail [n.tesla@example.com]: tim@^H^[[K@bruce4.com
Site description [This is a demo site for Nikola.]: Tim's Personal Blog
Site URL [http://getnikola.com/]: http://www.bruce4.com
--- Questions about languages and locales ---
We will now ask you to provide the list of languages you want to use.
Please list all the desired languages, comma-separated, using ISO 639-1 codes.  The first language will be used as the default.
Type '?' (a question mark, sans quotes) to list available languages.
Language(s) to use [en]:

Please choose the correct time zone for your blog.  Nikola uses the tz database.
You can find your time zone here:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Time zone [UTC]: America/Los_Angeles
    Current time in America/Los_Angeles: 18:02:10
Use this time zone? [Y/n] y
--- Questions about comments ---
You can configure comments now.  Type '?' (a question mark, sans quotes) to list available comment systems.  If you do not want any comments, just leave the field blank.
Comment system:

That's it, Nikola is now configured.  Make sure to edit conf.py to your liking.
If you are looking for themes and addons, check out http://themes.getnikola.com/ and http://plugins.getnikola.com/.
Have fun!
INFO: init: Created empty site at bruce4.
software/nikola.txt · Last modified: by 127.0.0.1