Node Packaging, Distribution and Installation

Introduction

This page will capture the goals and approach that we will take in distributing the RNode software.  

Goals

  • "Feel" is important: our packages and their installation should "feel normal" for users of a particular platform
  • On supported Linux Distributions,
    • They should be installed using the distro-specific package manager and use that package manager's dependency management story.
    • We should have systemd services for running the node as a daemon.

  • On macOS,
    • We should offer novice users a DMG containing a *.app bundle that can be trivially moved into the "Applications" directory like most applications they are familiar. 

    • We should offer more advanced users a self-contained tarball. 
    • Dependency management is a tricky proposition:
      • it is important for our packages to be self-contained (i.e. have no third-party dependencies that require separate installation). 
      • We should not require a macOS user to install and use any third-party package managers like Homebrew. 
      • Similarly, we should avoid them needing to install a particular version of the JDK/JRE, especially if we are not compatible with recent JDKs.
  • On Windows
    • We should offer novice users a self-contained *.exe that can be trivially run from any directory.
    • We should offer more advanced users a self-contained tarball. 
    • Like macOS, dependency management is a tricky proposition. 
      • It is important for our packages to be self-contained (i.e. have no third-party dependencies that require separate installation). 
      • We should not require a Windows user to install and use any third-party package managers like Choclatey. 
      • Similarly, we should avoid them needing to install a particular version of the JDK/JRE, especially if we are not compatible with recent JDKs.

Package Dependencies

Binary (for execution):

  1. JRE

Java and Scala Libraries (non-native):

Currently managed transparently by sbt (specifically it's ivy-based dependency management subsystem)

These dependencies are automatically copied into our packages by sbt-native-packager during the packaging step.

Native Libraries:

  1. lmdb (currently shipped in a JAR (third-party) and handled like a normal java/scala dependency as above)
    1. https://github.com/lmdbjava/native
  2. libsecp256k1 (currently shipped in a JAR (by us) and handled like a normal java/scala dependency as above)
    1. https://github.com/rchain/secp256k1-native
    2. https://github.com/rchain/secp256k1-java (FFI around -native, this is the JAR we depend on)
  3. libsodium (WIP to ship as JAR: CORE-848)
    1. https://github.com/rchain/sodium-native
    2. (Forthcoming fork of kalium to use sodium-native)

Currently no provision to install and use Native Library dependencies from the package manager instead.  We might consider changing that.

Supported Platforms for RNode

PlatformPackageSupported VersionsDependenciesDependency ManagementGoalsWork ItemsJRE Licensing

Linux

macOS

Windows

Tarball
  • macOS 10.12 and up
  • any Linux
JRE, libsodiumunmanaged.  must be installed by user (we do have a shitty script on macOS).

include libsodium packaged as a jar (like lmdb, secp256k1).  this allows us to avoid having users need to use homebrew or an alternative package manager.

unfortunately, the tarball will always require the end user to have the right JDK or JRE installed.

CORE-848 Getting issue details... STATUS Addressed by package manager 

Linux

macOS

Windows

Dockerhttps://docs.docker.com/docker-for-windows/DockerMust be installed by user.

Addressed by package manager 
Linux.rpm
  • Fedora 27, 28 - supported
  • RedHat Enterprise (RHEL) - unknown?
  • CentOS - unknown?
JRE, libsodiumhandled automatically by yum/dnf none CORE-513 Getting issue details... STATUS Addressed by package manager 
Linux.deb
JRE, libsodiumhandled automatically by aptnone CORE-513 Getting issue details... STATUS

Addressed by package manager

macOSRNode.app (shipped in RNode.dmg) macOS 10.12 and up
fully self-contained (JRE and libsodium are included in the *.app bundle)

We have not created these packages yet.  The idea is to use:

https://www.scala-sbt.org/sbt-native-packager/formats/jdkpackager.html


OPS-188 Getting issue details... STATUS Open item 
WindowsRNode.exe (shipped in zip?)Windows 7
fully self-contained (JRE and libsodium are included in the *.exe bundle)

We have not created these packages yet.  The idea is to use:

https://www.scala-sbt.org/sbt-native-packager/formats/jdkpackager.html


OPS-188 Getting issue details... STATUS

Open item