Source

The source ‘installation’ is not about installing Juniper but running it directly from the source instead.

Using the Juniper source can be more convenient for module developers as it is more easily accessible than using packaged installers.

It makes starting and stopping Juniper more flexible and explicit than the services set up by the packaged installers. Also, it allows overriding settings using command-line parameters without needing to edit a configuration file.

Finally, it provides greater control over the system’s setup and allows to more easily keep (and run) multiple versions of Juniper side-by-side.

Fetch the sources

There are two ways to obtain the source code of Juniper: as a ZIP archive or through Git.

Archive

Community edition:

Enterprise edition:

Git

Note

It is required to have Git installed, and it is recommended to have a basic knowledge of Git commands to proceed.

To clone a Git repository, choose between cloning with HTTPS or SSH. In most cases, the best option is HTTPS. However, choose SSH to contribute to Juniper source code or when following the Getting Started developer tutorial.

$ git clone https://github.com/Juniper/Juniper.git
$ git clone https://github.com/Juniper/enterprise.git

Note

The Enterprise git repository does not contain the full Juniper source code. It is only a collection of extra add-ons. The main server code is in the Community edition. Running the Enterprise version means running the server from the Community version with the addons-path option set to the folder with the Enterprise edition. It is required to clone both the Community and Enterprise repositories to have a working Juniper Enterprise installation.

Prepare

Python

Juniper requires Python 3.7 or later to run.

Use a package manager to download and install Python 3 if needed.

Note

If Python 3 is already installed, make sure that the version is 3.7 or above, as previous versions are not compatible with Juniper.

$ python3 --version

Verify that pip is also installed for this version.

$ pip3 --version

PostgreSQL

Juniper uses PostgreSQL as its database management system.

Use a package manager to download and install PostgreSQL (supported versions: 12.0 or above). It can be achieved by executing the following:

$ sudo apt install postgresql postgresql-client

By default, the only user is postgres. As Juniper forbids connecting as postgres, create a new PostgreSQL user.

$ sudo -u postgres createuser -s $USER
$ createdb $USER

Note

Because the PostgreSQL user has the same name as the Unix login, it is possible to connect to the database without a password.

Dependencies

Using distribution packages is the preferred way of installing dependencies. Alternatively, install the Python dependencies with pip.

For Debian-based systems, the packages are listed in the debian/control file of the Juniper sources.

On Debian/Ubuntu, the following commands should install the required packages:

$ cd /CommunityPath
$ sed -n -e '/^Depends:/,/^Pre/ s/ python3-\(.*\),/python3-\1/p' debian/control | sudo xargs apt-get install -y

Note

For languages using a right-to-left interface (such as Arabic or Hebrew), the rtlcss package is required.

  1. Download and install nodejs and npm with a package manager.

  2. Install rtlcss:

    $ sudo npm install -g rtlcss
    

Warning

wkhtmltopdf is not installed through pip and must be installed manually in version 0.12.5 for it to support headers and footers. Check out the wkhtmltopdf wiki for more details on the various versions.

Running Juniper

Once all dependencies are set up, Juniper can be launched by running Juniper-bin, the command-line interface of the server. It is located at the root of the Juniper Community directory.

To configure the server, either specify command-line arguments or a configuration file.

Tip

For the Enterprise edition, add the path to the enterprise add-ons to the addons-path argument. Note that it must come before the other paths in addons-path for add-ons to be loaded correctly.

Common necessary configurations are:

  • PostgreSQL user and password.

  • Custom addon paths beyond the defaults to load custom modules.

A typical way to run the server would be:

$ cd /CommunityPath
$ python3 Juniper-bin --addons-path=addons -d mydb

Where CommunityPath is the path of the Juniper Community installation, and mydb is the name of the PostgreSQL database.

After the server has started (the INFO log Juniper.modules.loading: Modules loaded. is printed), open http://localhost:8069 in a web browser and log into the Juniper database with the base administrator account: use admin as the email and, again, admin as the password.

Tip

  • From there, create and manage new users.

  • The user account used to log into Juniper’s web interface differs from the --db_user CLI argument.