ImmutableWorkstation

Intro

See README

Getting Started

Firstly install the python (3) package on your machine:

sudo pip install immutableworkstation

First run:

$ immutableworkstation.py

Usage:
    immutableworkstation.py config
    immutableworkstation.py start (latest | next)
    immutableworkstation.py stop (latest | next)
    immutableworkstation.py login (latest | next)
    immutableworkstation.py buildDocker (latest | next)
    immutableworkstation.py makeDockerfile (latest | next)
    immutableworkstation.py status
    immutableworkstation.py quickstart
    immutableworkstation.py (-h | --help )

Options:
    -h --help    Show this screen

Configuration

Initially immutableworkstation.py can run without a config folder, but pretty much the only thing you can do is quickstart which will help setup a local config folder.

The example local config folder is stored in the python package and deployed to your machine as a data file. When we run quickstart we deploy that to `~.immutableworkstation` folder in your homedir

This has

  • a config.ini file
  • a .latest folder holding the templates to build “latest” Dockerfile
  • a .next folder holding the templates to build the “next” Dockerfile

Config file is located as ~/.immutableworkstation/config.ini It has following format and items

[default]
tagname   = workstation
instance_name =immutableworkstation
localhost  = 127.0.0.1
username   = pbrian
ssh_port   = 2222
devstation_config_root = ~/.immutableworkstation
terminal_command = /usr/bin/konsole -e
volumes = {"~/data":     "/var/data",
           "~/projects": "/var/projects",
           "~/secrets":  "/var/secrets:ro",
           "~/Dropbox":  "/var/Dropbox"
           }

volumes is a json-formatted string that will be converted during config reading. tagname is the tagname used to identify the docker instance image_name is the name used to identify the built docker image, from

which we will run an instance. You must build a docker instance.

localhost is obvious, probably needs to be removed username is the name of the (only?) user who will use the docker instance. As it is the only name and user that password is set to that as well.

ssh_port port for docker instance to listen on for ssh connections
from the host machine (how we talk to our dev machine)

devstation_config_root the location of the config file, plus other templates terminal_command - command to run before sshing to the running docker instance I am assuming you have konsole. if not adjust the config.

This will have files for the config ready to install - they will be place on ‘/usr/local/config’ (TODO: rename that location to branded).:

$ immutableworkstation.py quickstart

You will be asked at least one question

Preparing a dockerfile

TBD

Getting started

  1. Set up config - see above
  2. Make a docker file
  3. Build a Docker image

we are targetting windows, linux and apple machines so will need sensible simple scripts else the start up and try me out barrier will be too high. however having python scripts makes the development part waaay easier, and the templating is all in python anyhow, so I think we have to have some road bumps. I think anone wanting to try this out is going to be capable of installing py3 anyway. Our target demographic is developers who want more control.

I am building a one-stop shop developer machine on Docker which means it is a large Dockerfile - which is becoming unwieldy So I shall have a template folder, which will hold

dockerfile.skeleton This is the bones of the Dockerfile, with very simple replace-locations built in such as:

FROM ubuntu:18.04
ENV USERHOME /home/pbrian

{{ apt }}
^^^^^^^^^^^^^^^^^
this bit will get replaced with contents of `apt.template`

Constraints are that the {{ file }} must be on its own line, with only spaces between it and line start / end It is NOT using Jinja2, it just looks like it. Because one day it might.

Its that simple. We can play around with variables if we really need to.