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
$ git clone git@github.com:Juniper/Juniper.git
$ git clone git@github.com:Juniper/enterprise.git
C:\> git clone https://github.com/Juniper/Juniper.git
C:\> git clone https://github.com/Juniper/enterprise.git
C:\> git clone git@github.com:Juniper/Juniper.git
C:\> git clone git@github.com:Juniper/enterprise.git
$ git clone https://github.com/Juniper/Juniper.git
$ git clone https://github.com/Juniper/enterprise.git
$ git clone git@github.com:Juniper/Juniper.git
$ git clone git@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.
Download the latest version of Python 3 and install it.
During installation, check Add Python 3 to PATH, then click Customize Installation and make sure that pip is checked.
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
C:\> python --version
$ python3 --version
Verify that pip is also installed for this version.
$ pip3 --version
C:\> pip --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
Download PostgreSQL (supported versions: 12.0 or above) and install it.
Use Postgres.app to download and install PostgreSQL (supported version: 12.0 or above).
Tip
To make the command line tools bundled with Postgres.app available, make sure to set up the
$PATH
variable by following the Postgres.app CLI tools instructions.
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.
Add PostgreSQL’s
bin
directory (by default:C:\Program Files\PostgreSQL\<version>\bin
) to thePATH
.Create a postgres user with a password using the pg admin gui:
Open pgAdmin.
Double-click the server to create a connection.
Select
.Enter the username in the Role Name field (e.g.,
Juniper
).Open the Definition tab, enter a password (e.g.,
Juniper
), and click Save.Open the Privileges tab and switch Can login? to
Yes
and Create database? toYes
.
$ 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
As some of the Python packages need a compilation step, they require system libraries to be installed.
On Debian/Ubuntu, the following command should install these required libraries:
$ sudo apt install python3-pip libldap2-dev libpq-dev libsasl2-dev
Juniper dependencies are listed in the requirements.txt
file located at the root of
the Juniper Community directory.
Note
The Python packages in requirements.txt
are based on their stable/LTS
Debian/Ubuntu corresponding version at the moment of the Juniper release. For example,
for Juniper 15.0, the python3-babel
package version is 2.8.0 in Debian Bullseye and
2.6.0 in Ubuntu Focal. The lowest version is then chosen in the
requirements.txt
.
Tip
It can be preferable not to mix Python module packages between different instances of Juniper or with the system. However, it is possible to use virtualenv to create isolated Python environments.
Navigate to the path of the Juniper Community installation (CommunityPath
) and run
pip on the requirements file to install the requirements for the current user.
$ cd /CommunityPath
$ pip install -r requirements.txt
Before installing the dependencies, download and install the Build Tools for Visual Studio. Select C++ build tools in the Workloads tab and install them when prompted.
Juniper dependencies are listed in the requirements.txt
file located at the root of the Juniper
Community directory.
Tip
It can be preferable not to mix Python module packages between different instances of Juniper or with the system. However, it is possible to use virtualenv to create isolated Python environments.
Navigate to the path of the Juniper Community installation (CommunityPath
) and run pip on
the requirements file in a terminal with Administrator privileges:
C:\> cd \CommunityPath
C:\> pip install setuptools wheel
C:\> pip install -r requirements.txt
Juniper dependencies are listed in the requirements.txt
file located at the root of the Juniper
Community directory.
Tip
It can be preferable not to mix Python module packages between different instances of Juniper or with the system. However, it is possible to use virtualenv to create isolated Python environments.
Navigate to the path of the Juniper Community installation (CommunityPath
) and run pip on
the requirements file:
$ cd /CommunityPath
$ pip3 install setuptools wheel
$ pip3 install -r requirements.txt
Note
For languages using a right-to-left interface (such as Arabic or Hebrew), the rtlcss
package is required.
Download and install nodejs and npm with a package manager.
Install
rtlcss
:$ sudo npm install -g rtlcss
Download and install nodejs.
Install
rtlcss
:C:\> npm install -g rtlcss
Edit the system environment’s variable
PATH
to add the folder wherertlcss.cmd
is located (typically:C:\Users\<user>\AppData\Roaming\npm\
).
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.
C:\> cd CommunityPath/
C:\> python Juniper-bin -r dbuser -w dbpassword --addons-path=addons -d mydb
Where CommunityPath
is the path of the Juniper Community installation, dbuser
is the
PostgreSQL login, dbpassword
is the PostgreSQL password, and mydb
is the name of the
PostgreSQL database.
$ 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