mo-install Reference / v5.0.0

SUSE Linux Enterprise Server 15

miniOrange On-Premise IDP 5.0.0 installation runbook for SUSE Linux Enterprise Server 15.

Package mgr
zypper
Init
systemd
Release
2018
Choose your database backend
Section 1

System Prep

SUSE Linux Enterprise Server 15. Uses zypper rather than dnf or apt. Requires either a paid subscription (SUSEConnect) or activated trial registration for repo access.

1.1 Register the host with SUSE

sudo SUSEConnect -r <YOUR-REG-CODE> -e <YOUR-EMAIL>
sudo SUSEConnect --list-extensions

Required modules for this install:

ModuleWhy
Basesystem ModuleCore utilities
Server Applications ModulePostgreSQL community packages
Development Tools ModuleCompiler toolchain (for some JNI)
sudo SUSEConnect -p sle-module-basesystem/15.5/x86_64
sudo SUSEConnect -p sle-module-server-applications/15.5/x86_64
sudo SUSEConnect -p sle-module-development-tools/15.5/x86_64

(Substitute 15.5 for your actual SP level. Check with cat /etc/os-release.)

1.2 Update the system

sudo zypper refresh
sudo zypper update -y
sudo reboot

1.3 Install required utilities

sudo zypper install -y \
  unzip wget curl jq net-tools-deprecated vim bash-completion \
  tar lsof telnet firewalld

Note. net-tools-deprecated provides netstat for SLES 15. The ss command from iproute2 is also available and is preferred in new commands.

1.4 Configure the firewall

SLES 15 uses firewalld from SP2 onwards. (Earlier SPs used SuSEfirewall2 which is no longer recommended.)

sudo systemctl enable --now firewalld

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8070/tcp
sudo firewall-cmd --permanent --add-port=8071/tcp
sudo firewall-cmd --permanent --add-port=8072/tcp
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --permanent --add-port=5672/tcp
sudo firewall-cmd --permanent --add-port=15672/tcp

sudo firewall-cmd --reload

1.5 AppArmor

SLES uses AppArmor by default. No relaxation is required for the IDP services.

sudo systemctl status apparmor
Section 2

Database

Section 3

Erlang + RabbitMQ

RabbitMQ requires Erlang. On SLES 15, install both from the OpenSUSE Build Service (OBS) or the official RabbitMQ RPM releases on GitHub.

3.1 Add OpenSUSE Erlang repository

sudo zypper addrepo \
  https://download.opensuse.org/repositories/devel:/languages:/erlang/SLE_15_SP5/devel:languages:erlang.repo
sudo zypper --gpg-auto-import-keys refresh

3.2 Install Erlang

sudo zypper install -y erlang

3.3 Install RabbitMQ from upstream RPM

sudo zypper install -y \
  https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-3.13.7-1.suse.noarch.rpm \
  --no-gpg-checks

If no .suse.noarch.rpm is published for the version you want, the .el8.noarch.rpm build runs on SLES 15 in practice:

sudo zypper install -y --allow-unsigned-rpm \
  https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-3.13.7-1.el8.noarch.rpm

3.4 Enable and start the service

sudo systemctl enable --now rabbitmq-server

3.5 Enable the management plugin

sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server

3.6 Verify

sudo rabbitmqctl status
sudo ss -tulnp | grep 5672

Values for the /initialize wizard

FieldValue
RabbitMQ Host127.0.0.1
AMQP Port5672
Mgmt UI Port15672
Default Loginguest / guest
Section 4

mo-installer

The miniOrange installer bundles Java 17 and Redis. You don’t install either manually. The installer auto-detects the OS and deploys the IDP services into /opt/tomcat/.

4.1 Download the installer

cd /opt
sudo wget https://miniorange.s3.us-east-1.amazonaws.com/public/installers/mo-installer-5.0.0.zip
sudo unzip mo-installer-5.0.0.zip -d mo-installer-5.0.0
cd /opt/mo-installer-5.0.0
ls -la

You should see:

.env.sh          Environment configuration (review before sourcing)
mo-installer.sh  Main installer script
moctl/           moctl CLI and bash completion

4.2 Review and source the environment file

less .env.sh
source .env.sh

Note. In v5.0.0, .env.sh does not contain database connection details. The DB connection is configured later through the browser UI at /initialize. Source the file as-is.

4.3 Set execute permissions

sudo chmod +x mo-installer.sh moctl/*.sh

4.4 Run the installer

sudo bash mo-installer.sh

Watch the output for failures. The installer covers:

  • Java 17 — installed automatically
  • Redis — installed and configured automatically
  • moctl — installed to /usr/bin/moctl with tab completion
  • IDP services — deployed to /opt/tomcat/

At the end of the run, the installer will print:

Next step: moctl service start

4.5 Start the four core services

moctl service start

The core services start in this order:

ServicePortPurpose
configserver8071Configuration
eurekaserver8070Service registry
gatekeeper8072API gateway
miniorange8080Main IDP service

4.6 Check service status

moctl service status

Only the four core services should be active at this point. Secondary services start after initialisation.

SymbolMeaning
● runningActive and registered in Eureka
△ registeringActive but not yet registered; wait and recheck
△ stoppedInactive
✗ failedFailed; check moctl log <service>

4.7 Open /initialize in a browser

https://<SERVER_IP>/initialize

You will see a self-signed certificate warning. Proceed past it.

Enter the values from the Database section above, plus the Redis and RabbitMQ values from Section 3 (Redis: 127.0.0.1:6379, no password by default).

After the wizard completes, the dashboard loads. Navigate to Settings → Base URL and set it to your final domain:

https://<your-domain>

4.8 Restart all services

This step starts the secondary services that depend on the completed schema.

moctl service restart

Wait 1–2 minutes for everything to register, then verify in the next section.

Section 5

Verify & Service Enablement

Confirm everything is running and registered. All commands here come from the source v5.0.0 guide.

5.1 Full service status

moctl service status

Every service should show ● running or ● reachable. If anything shows △ registering, wait 30 seconds and re-run.

5.2 Full diagnostics

moctl diagnose

Expected output includes:

Database connectivity reachable
Redis reachable
RabbitMQ reachable

5.3 Individual service status

systemctl status mo-idp-miniorange.service
systemctl status redis
systemctl status rabbitmq-server

5.4 Check all bound ports

sudo ss -tulnp | egrep '8080|8070|8071|8072|6379|5672'

For your DB:

DBPort
PostgreSQL5432
MySQL3306
MSSQL1433
Oracle1521

5.5 Preflight

moctl pre checks Java, the DB, Redis, and RabbitMQ reachability in one go.

moctl pre

Quick moctl reference

CommandPurpose
moctl service startStart all services in order
moctl service stopStop all services in reverse order
moctl service restartFull ordered restart
moctl service restart miniorangeRestart one named service
moctl log <service> -fLive tail logs
moctl log <service> --since 1hLogs from the past hour
moctl system memoryPer-service RSS memory
moctl jvm <service>Heap, threads, open file descriptors
moctl diagnose portsCheck that core ports are bound

Common issues

Issue: △ registering after a minute.

The service started but hasn’t completed its handshake with Eureka. Check the gatekeeper log:

moctl log gatekeeper --since 5min

Issue: PostgreSQL peer authentication failed.

You modified pg_hba.conf but didn’t restart. Run sudo systemctl restart postgresql-16.

Issue: SELinux denials in audit.log.

You skipped section 1.5. Set setenforce 0 and re-check getenforce.

Issue: Tomcat stale PID after a crash.

sudo rm -f /opt/tomcat/latest/temp/*.pid
moctl service restart miniorange