Installation Guide

System Requirements and Dependencies

nucypher has been tested on GNU/Linux (recommended), Mac OS, and Windows.

  • Before installing nucypher, you may need to install necessary developer tools and headers, if you don’t have them already. For Ubuntu, Debian, Linux Mint or similar distros:

    - libffi-dev
    - python3-dev
    - python3-pip
    - python3-virtualenv
    - build-essential
    - libssl-dev
    

    One-liner to install the above packages on linux:

    $ sudo apt-get install python3-dev build-essential libffi-dev python3-pip
    
  • As of November 2019, nucypher works with Python 3.6, 3.7, and 3.8. If you don’t already have it, install Python.

  • At least 1 GB of RAM for secure password-based key derivation with scrypt.

Important

If also running a local Ethereum node on the same machine, additional requirements are needed.

Standard Installation

nucypher can be installed by pip or pipenv, or run with docker.Ensure you have one of those installation tools installed for you system:

Pip Installation

In order to isolate global system dependencies from nucypher-specific dependencies, we highly recommend using python-virtualenv to install nucypher inside a dedicated virtual environment.

For full documentation on virtualenv see: https://virtualenv.pypa.io/en/latest/

Here is the recommended procedure for setting up nucypher in this fashion:

  1. Create a Virtual Environment

    $ virtualenv /your/path/nucypher-venv
    ...
    

    Activate the newly created virtual environment:

    $ source /your/path/nucypher-venv/bin/activate
    ...
    $(nucypher-venv)
    

    Note

    Successful virtualenv activation is indicated by (nucypher-venv)$ prepended to your console’s prompt

  2. Install Application Code with Pip

    $(nucypher-venv) pip3 install -U nucypher
    
  3. Verify Installation

    Before continuing, verify that your nucypher installation and entry points are functional; Activate your virtual environment (if you haven’t already) and run the nucypher --help command in the console:

    nucypher --help
    

    You will see a list of possible usage options (--version, -v, --dev, etc.) and commands (status, ursula, etc.). For example, you can use nucypher ursula destroy to delete all files associated with the node.

    import nucypher
    

Pipenv Installation

  1. Install Application code with Pipenv

    Ensure you have pipenv installed (See full documentation for pipenv here: Pipenv Documentation). Then to install nucypher with pipenv, run:

    $ pipenv install nucypher
    
  2. Verify Installation

    In the console:

    $ nucypher --help
    

    In Python:

    import nucypher
    

Docker Installation

Note

Due to dependency requirements, the nucypher docker image can only be run on x86 architecture.

  1. Install Docker

  2. (Optional) Follow these post install instructions: https://docs.docker.com/install/linux/linux-postinstall/

  3. Get the latest nucypher image:

    docker pull nucypher/nucypher:latest
    

    Any nucypher CLI command can be executed in docker using the following syntax:

    docker run -it -v ~/.local/share/nucypher:/root/.local/share/nucypher -v ~/.ethereum/:/root/.ethereum -p 9151:9151 nucypher/nucypher:latest nucypher`<ACTION>``<OPTIONS>`
    

Examples

Display network stats:

docker run -it -v ~/.local/share/nucypher:/root/.local/share/nucypher -v ~/.ethereum/:/root/.ethereum -p 9151:9151 nucypher/nucypher:latest nucypher status network --provider `<PROVIDER URI>` --network `<NETWORK NAME>`

Running a pre-configured Worker as a daemon (See Configuration Guide):

docker run -d -v ~/.local/share/nucypher:/root/.local/share/nucypher -v ~/.ethereum/:/root/.ethereum -p 9151:9151 -e NUCYPHER_KEYRING_PASSWORD -e NUCYPHER_WORKER_ETH_PASSWORD nucypher/nucypher:latest nucypher ursula run

Development Installation

Additional dependencies and setup steps are required to perform a “developer installation”. You do not need to perform these steps unless you intend to contribute a code or documentation change to the nucypher codebase.

Before continuing, ensure you have git installed (Git Documentation).

Acquire NuCypher Codebase

Fork the nucypher repository on GitHub, as explained in the Contribution Guide, then clone your fork’s repository to your local machine:

$ git clone https://github.com/<YOUR_GITHUB_USERNAME>/nucypher.git

After acquiring a local copy of the application code, you will need to install the project dependencies, we recommend using either pip or pipenv

Pipenv Development Installation

The most common development installation method is using pipenv:

$ pipenv install --dev --three --skip-lock --pre

Activate the pipenv shell

$ pipenv shell

If this is successful, your terminal command prompt will be prepended with (nucypher)

Install the Solidity compiler (solc):

$(nucypher) pipenv run install-solc

Pip Development Installation

Alternately, you can install the development dependencies with pip:

$ pip3 install -e .[dev]
$ ./scripts/installation/install_solc.sh

Development Docker Installation

The intention of the Docker configurations in this directory is to enable anyone to develop and test NuCypher on all major operating systems with minimal prerequisites and installation hassle (tested on Ubuntu 16, MacOS 10.14, Windows 10).

Standard Docker Installation

  1. Install Docker

  2. Install Docker Compose

  3. cd to dev/docker

  4. Run docker-compose up --build this must be done once to complete install

Running NuCypher

Then you can do things like:

  • Run the tests: docker-compose run nucypher-dev pytest

  • Start up an Ursula: docker-compose run nucypher-dev nucypher ursula run --dev --federated-only

  • Open a shell: docker-compose run nucypher-dev bash

  • Try some of the scripts in dev/docker/scripts/

From there you can develop, modify code, test as normal.

Other cases:

  • Run a network of 8 independent Ursulas: docker-compose -f 8-federated-ursulas.yml up

  • Get the local ports these ursulas will be exposed on: docker ps

  • To stop them… docker-compose -f 8-federated-ursulas.yml stop

Systemd Service Installation

  1. Use this template to create a file named ursula.service and place it in /etc/systemd/system/.

    [Unit]
    Description="Run 'Ursula', a NuCypher Staking Node."
    
    [Service]
    User=<YOUR USER>
    Type=simple
    Environment="NUCYPHER_WORKER_ETH_PASSWORD=<YOUR WORKER ADDRESS PASSWORD>"
    Environment="NUCYPHER_KEYRING_PASSWORD=<YOUR PASSWORD>"
    ExecStart=<VIRTUALENV PATH>/bin/nucypher ursula run
    
    [Install]
    WantedBy=multi-user.target
    
  2. Replace the following values with your own:

    • <YOUR USER> - The host system’s username to run the process with

    • <YOUR WORKER ADDRESS PASSWORD> - Worker’s ETH account password

    • <YOUR PASSWORD> - Ursula’s keyring password

    • <VIRTUALENV PATH> - The absolute path to the python virtual environment containing the nucypher executable

  3. Enable Ursula System Service

    $ sudo systemctl enable ursula
    
  4. Run Ursula System Service

    To start Ursula services using systemd

    $ sudo systemctl start ursula
    
  5. Check Ursula service status

    $ sudo systemctl status ursula
    
  6. To restart your node service

    $ sudo systemctl restart ursula