Skip to main content

Butterknife makes bare-metal Linux deployment dead-simple using the Linux Containers (LXC) and Btrfs filesystem.

Project description


Butterknife command-line utility can be used to serve snapshots via HTTP; send and receive snapshots over SSH and multicast; list local and remote snapshots.


Install dependencies:

sudo apt-get install lxc python3-dev cython3 python3-pip pigz btrfs-progs
sudo apt-get install python3-lxc # Ubuntu 14.04 or older
sudo pip3 install jinja2 click falcon

Install Butterknife:

sudo pip3 install butterknife

Listing templates

List local templates at /var/lib/butterknife/pool:

butterknife list

List local templates in a particular directory:

butterknife list file:///path/to/directory

List templates at /var/lib/butterknife/pool on a remote machine via SSH:

butterknife list ssh://hostname

List templates at remote machine via HTTP:

butterknife list http[s]://hostname[:port]

Pushing/pulling templates

Currently pull over SSH is working. Following replicates /var/lib/butterknife/pool from machine hostname to local pool at /var/lib/butterknife/pool:

butterknife pull ssh://hostname

You can also pull via HTTP:

butterknife pull

Note that symmetric push/pull requires patched btrfs-progs which has additional -p and -C flags for btrfs receive.


Sending local template via multicast:

butterknife multicast send @template\:com.koodur.butterknife.Ubuntu\:x86_64\:snap7

You can even multicast a remote subvolume:

butterknife multicast send @template\:com.koodur.butterknife.Ubuntu\:x86_64\:snap7 --pool ssh://hostname

Receiving to local pool at /var/lib/butterknife/pool:

butterknife multicast receive

systemd-nspawn workflow

Create a btrfs subvolume for your butterknife image under /var/lib/machines. Replace ArchLinux with your image name you want to use.

sudo btrfs subvolume create /var/lib/machines/ArchLinux

Install base system in there

sudo pacstrap -i -c -d /var/lib/machines/ArchLinux base

Nspawn into it and customize your container

sudo systemd-nspawn -M ArchLinux
# do your thing

You will also need some scripts that will be ran on snapshot creation and when doing deployments with provision image.

look into the puppet-butterknife repository for scripts and files you should add

Create butterknife config file in /var/lib/machines/ArchLinux/etc/butterknife/butterknife.conf


Also make sure that you have something like this on your host etc/butterknife/butterknife.conf config file


Take a snapshot of your image

butterknife nspawn release ArchLinux

And now you should be ready to serve that image to your clients

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

butterknife-0.2.0.tar.gz (19.3 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page