# Local License Server

## Preliminaries

* A Pro license with the required amount of simultaneous activations.
* A bare-metal machine in your local network, to run the Local License Server application on. The LLS application is lightweight and can run on about any hardware: a NUC, Raspberry Pi, or Mac Mini suffices.
* If you want to run LLS as a VM, reach out. We can host it as a managed service.

When you need a LLS deployed, contact our team. We'll help you set up your licenses and guide you through the (straightforward) deployment process.&#x20;

## Converting Your License

To make a license work with the Local License Server, we will manually switch your license to be used with the LLS. Eligible licenses are required to be the Pro tier, and to always be within support and updates. [Reach out](mailto:sales@hedge.video) to have your license switched.

## Setting Up The Server

A Local License Server can run on a different operating system than your workstations. For example, a common scenario is having the server running on Linux, and workstations running on a combination of Windows and macOS.

Important: any instance of the LLS manages a single license. If you need to deploy multiple licenses or apps, you'll need to deploy multiple instances for the Local License Server.

### Requirements

The Local License Server will run on almost all hardware and requires practically no resources.&#x20;

{% hint style="warning" %}
Make sure the LLS can be reached by the clients over the network. Its default port is 20000, which can easily be reconfigured - see further below.
{% endhint %}

{% tabs %}
{% tab title="Linux" %}

* Ubuntu 18.04 or higher. Other distributions may work just as well, but we tested Ubuntu.
* `sudo` or root privileges
* `unzip` and `wget`
* An internet connection for activation and daily license checks
  {% endtab %}

{% tab title="macOS" %}

* An Apple Silicon or Intel Mac
* macOS Ventura or newer
* `sudo` or Administrator privileges
* An internet connection for activation and daily license checks
  {% endtab %}

{% tab title="Windows" %}

* Windows 10 or newer, or Windows Server 2022
* Administrator privileges
* An internet connection for activation and daily license checks.
  {% endtab %}
  {% endtabs %}

### Preparation

1. Download the Product Details file for the app you will use with the Local License Server:

* [Mimiq](https://downloads.hedge.video/licenseserver/mimiq.dat)
* [PostLab](https://downloads.hedge.video/licenseserver/postlab.dat)

{% hint style="info" %}
For other apps, [reach out](mailto:sales@hedge.video).
{% endhint %}

2. Install the Local License Server application:

{% tabs %}
{% tab title="Linux" %}

* Download the application: <https://downloads.hedge.video/licenseserver/LocalLicenseServerLinux.zip>
* Extract the .zip's contents to a directory of your choice, e.g., `~/LocalLicenseServer`&#x20;
* Ensure you have the following files in this directory:
  * A folder `bin-linux` containing executables for each CPU type
  * `LocalLicenseServer.xml`
* Select the right executable for your CPU architecture:
  * In the folder `bin-linux` that you just extracted, there are directories with the names of common CPU types
  * In a shell, run `uname -n` to reveal the CPU architecture.&#x20;
  * Copy the executable from the folder of the same name to the main directory
  * Make the executable runnable using `chmod +x LocalLicenseServer`
* Move the Product Details `.dat` file from Step 1 into the same folder
  {% endtab %}

{% tab title="macOS" %}
{% hint style="info" icon="lightbulb" %}
This procedure can vary slightly across macOS versions. If you're stuck, don't hesitate to email us a screenshot so that we can help out and refine these documents.
{% endhint %}

* Download the application here: <https://downloads.hedge.video/licenseserver/LocalLicenseServerMacOS.zip>
* Extract the `.zip` and move the `LocalLicenseServerMacOS` folder to your `/Applications` folder
* Ensure you have the following files in the folder:
  * The `LocalLicenseServer` executable
  * `LocalLicenseServer.xml`
  * The Product Details file (ends with `.dat`) from Step 1
* Make the executable runnable:

{% code overflow="wrap" %}

```zsh
chmod +x /Applications/LocalLicenseServerMacOS/LocalLicenseServer
```

{% endcode %}

* On macOS 14 and newer, run this additional command to allow the executable to run:

{% code overflow="wrap" %}

```zsh
xattr -d com.apple.quarantine /Applications/LocalLicenseServerMacOS/LocalLicenseServer
```

{% endcode %}

* In Finder, the file's icon should look similar to this:&#x20;

<figure><img src="https://1060439511-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LStRji2w1AYja1bLBFv%2Fuploads%2FxH9sOa68hDXrIFlnnQ8C%2FScreenshot%202024-11-12%20at%2016.01.13.png?alt=media&#x26;token=63d6acf1-3591-4937-b3c1-3462342ee169" alt=""><figcaption><p>A macOS executable</p></figcaption></figure>

* To test if it can run: open `LocalLicenseServer` by double-clicking the icon in Finder and when macOS shows a dialog that asks if it's allowed to run, click `Allow Anyway`
  {% endtab %}

{% tab title="Windows" %}

* Download the application here: <https://downloads.hedge.video/licenseserver/LocalLicenseServerWindows.zip>
* Extract the contents to a directory of your choice, e.g., `C:\LocalLicenseServer`
* Ensure you have the following files in the directory:
  * `LocalLicenseServer.exe`
  * `LocalLicenseServer.xml`
  * The Product Details file (ends with `.dat`) from Step 1
    {% endtab %}
    {% endtabs %}

### Configuration

Open `LocalLicenseServer.xml` in a plain text editor:

* Change the port number if desired: `<bind port="20000"/>`
* The client's lease length (in seconds) is mandatory. Don't change it unless you have a good reason to.
* Optional: Change the log location to a different folder with `<log file="…`
* Optional: Change the interval at which the LLS checks for new license information. Daily is recommended; 90 days with a 14-day grace period is the maximum: `<isgenuine days_between="1" grace="1" />`

### Activating your license

There are two ways to activate the server: online and offline.

Online is the most common and highly recommended option for servers with internet access. After activating online, the Server periodically checks for license updates, including seat/activation counts and eligibility for updates.&#x20;

Offline mode is available for air-gapped setups. In this mode, the Server does not connect to our service to activate and won't periodically check for license updates. This has implications for the license's support window, as both the Server and the clients won't be able to upgrade to versions released after the last date set in the license at the moment of activation. A good way to prevent this is to get a license with a multi-year support contract instead.

#### Online mode

{% tabs %}
{% tab title="Linux" %}

1. Navigate to the Local License Server directory
2. Use this command to activate your license:

{% code overflow="wrap" %}

```bash
sudo ./LocalLicenseServer -a="[license key]" -config="LocalLicenseServer.xml" -pdets="[app].dat"
```

{% endcode %}
{% endtab %}

{% tab title="macOS" %}
Use this command to activate your license:

{% code overflow="wrap" %}

```zsh
sudo /Applications/LocalLicenseServerMacOS/LocalLicenseServer -a="[license key]" -config="LocalLicenseServer.xml" -pdets="[app].dat"
```

{% endcode %}
{% endtab %}

{% tab title="Windows" %}

1. Open an *elevated* command prompt
2. Navigate to the Local License Server directory
3. Activate your license:

{% code overflow="wrap" %}

```powershell
.\LocalLicenseServer.exe -a="XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX" -config="LocalLicenseServer.xml" -pdets="[app].dat"
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Offline mode

In this mode, the server generates a "challenge" file, which we use to generate a "response" file that is used to authorize the activation.

{% tabs %}
{% tab title="Linux" %}

1. Generate a challenge file on the server:

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>sudo ./LocalLicenseServer -a="[license key]" -config="LocalLicenseServer.xml" -pdets="[app].dat" -areq="ActivationRequest.xml"
</strong></code></pre>

2. Send the generated `ActivationRequest.xml` over to us, and we'll send you an `ActivationResponse.xml` file that you can then use to activate the Server with
3. Store the file in the same folder as LocalLicenseServer
4. Then, run this command to complete the activation:

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>sudo ./LocalLicenseServer -a="[license key]" -config="LocalLicenseServer.xml" -pdets="[app].dat" -aresp="ActivationResponse.xml"
</strong></code></pre>

{% endtab %}

{% tab title="macOS" %}

1. Generate a challenge file on the server:

{% code overflow="wrap" %}

```zsh
sudo /Applications/LocalLicenseServerMacOS/LocalLicenseServer -a="[license key]" -config="LocalLicenseServer.xml" -pdets="[app].dat" -areq="ActivationRequest.xml"
```

{% endcode %}

2. Send the generated `ActivationRequest.xml` over to us, and we'll send you an `ActivationResponse.xml` file that you can then use to activate the Server with&#x20;
3. Store the file in the same folder as LocalLicenseServer
4. Then, run this command to complete the activation:

{% code overflow="wrap" %}

```zsh
sudo /Applications/LocalLicenseServerMacOS/LocalLicenseServer -a="[license key]" -config="LocalLicenseServer.xml" -pdets="[app].dat" -aresp="ActivationResponse.xml"
```

{% endcode %}
{% endtab %}

{% tab title="Windows" %}

1. Open an *elevated* command prompt
2. Navigate to the Local License Server directory
3. Generate a challenge file on the server:

{% code overflow="wrap" %}

```powershell
.\LocalLicenseServer.exe -a="XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX" -config="LocalLicenseServer.xml" -pdets="[app].dat" -areq="ActivationRequest.xml"
```

{% endcode %}

4. Send the generated `ActivationRequest.xml` over to us, and we'll send you an `ActivationResponse.xml` file that you can then use to activate the Server with
5. Store the file in the same folder as LocalLicenseServer
6. Then, run this command to complete the activation:

{% code overflow="wrap" %}

```powershell
.\LocalLicenseServer.exe -a="XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX" -config="LocalLicenseServer.xml" -pdets="[app].dat" -aresp="ActivationResponse.xml"
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Deactivating the license

{% hint style="info" %}
Running into issues when deactivating? You can also deactivate your server remotely in [the-license-manager](https://docs.hedge.video/general/licenses/the-license-manager "mention")
{% endhint %}

{% tabs %}
{% tab title="Linux" %}
Use this command to deactivate your license:

{% code overflow="wrap" %}

```bash
sudo ./LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -deact
```

{% endcode %}
{% endtab %}

{% tab title="macOS" %}
If you've installed the server as a launchd daemon, uninstall it first:

{% code overflow="wrap" %}

```zsh
sudo ./LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -u
```

{% endcode %}

To deactivate the license:

{% code overflow="wrap" %}

```zsh
sudo ./LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -deact
```

{% endcode %}
{% endtab %}

{% tab title="Windows" %}
{% hint style="warning" icon="lightbulb" %}
Open an *elevated* command prompt when running any of the following commands
{% endhint %}

If installed as a Windows Service, uninstall it first:

```powershell
.\LocalLicenseServer.exe -config="LocalLicenseServer.xml" -pdets="[app].dat" -u
```

To deactivate the license:

```powershell
.\LocalLicenseServer.exe -config="LocalLicenseServer.xml" -pdets="[app].dat" -deact
```

{% endtab %}
{% endtabs %}

## Running The Server

{% tabs %}
{% tab title="Linux" %}
Run the server using the following command:

{% code overflow="wrap" %}

```bash
sudo ./LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -x
```

{% endcode %}

You may want to run the server as a service/daemon that automatically starts when the system boots. As linux has many approaches to this, we can't offer any documentation on this. Refer to the documentation of your Linux distribution to create an autostart script for your Crontab, Systemd, System V Init, Upstart, et cetera. Let the script run the server using `-d` instead of `-x` so it runs as a daemon:

```bash
/path/to/LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -d
```

{% endtab %}

{% tab title="macOS" %}
To run interactively in Terminal.app:

{% code overflow="wrap" %}

```zsh
sudo /Applications/LocalLicenseServerMacOS/LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -x
```

{% endcode %}

To automatically run the server when the system boots, install as a launchd daemon:

{% code overflow="wrap" %}

```zsh
sudo /Applications/LocalLicenseServerMacOS/LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -i
```

{% endcode %}

To uninstall the launchd daemon:

{% code overflow="wrap" %}

```zsh
sudo /Applications/LocalLicenseServerMacOS/LocalLicenseServer -config="LocalLicenseServer.xml" -pdets="[app].dat" -u
```

{% endcode %}
{% endtab %}

{% tab title="Windows" %}
To run the server in a command prompt:

1. Open an *elevated* command prompt
2. Navigate to the Local License Server directory
3. Run the command

```powershell
.\LocalLicenseServer.exe -config="LocalLicenseServer.xml" -pdets="[app].dat" -x
```

To run the Server as a Windows Service, so it automatically starts when the system boots:

1. Open an *elevated* command prompt
2. Navigate to the Local License Server directory
3. Install the server:

{% code overflow="wrap" %}

```powershell
.\LocalLicenseServer.exe -config="LocalLicenseServer.xml" -pdets="[app].dat" -i
```

{% endcode %}

The server will automatically start together with Windows. When running as a service, firewall rules are added automatically to allow incoming connections on the configured port.

To remove the Windows Service:

```powershell
.\LocalLicenseServer.exe -config="LocalLicenseServer.xml" -pdets="[app].dat" -u
```

{% endtab %}
{% endtabs %}

## Troubleshooting

Running into errors when installing or activation your license? These are the most common cases:

### Client

If the app you want to use reports it cannot locate the Local License Server, confirm if there's no network roadblock:

{% tabs %}
{% tab title="Linux" %}
Install the `netcat` package and run the following command with the IP address and port number of your License Server:

```bash
nc -zv IP PORT
```

For example:

```bash
nc -zv 192.168.1.10 1234
```

{% endtab %}

{% tab title="macOS" %}
Run the following command with the IP address and port number of your License Server:

```zsh
nc -zv IP PORT
```

For example:

```zsh
nc -zv 192.168.1.10 1234
```

{% endtab %}

{% tab title="Windows" %}
Run the following command with the IP address and port number of your License Server:

```powershell
Test-NetConnection [hostname or ip] -Port [portnumber]
```

For example:

```powershell
Test-NetConnection 192.168.1.10 -Port 1234
```

{% endtab %}
{% endtabs %}

### Server

#### Failed to create the registry key in Software\TurboFloatServer

Not the right permissions to alter the registry; run the command in an elevated command prompt.<br>

#### Failed to resolve this executable's path to a real path. Error: 1

The server hasn't been initialized, run the command using the -i flag first.<br>

#### Failed to load the product details file.

The -pdets flag isn't set, or it's not referring to a valid file (see for download links).<br>

#### Failed to parse the configuration XML file. Make sure it's properly formed XML using UTF-8 characters.

The executable has likely been invoked without the -config flag, or the -config flag is not referring to an existing file, or in an edge case, the referred .xml file isn't stored in UTF-8 character encoding.<br>

#### Failed to load the product details file TurboActivate.dat. Either the file is missing or corrupt.

You haven't downloaded the .dat file for the product you need to activate a license for. See for download links.<br>

#### You can only run one instance of this floating license server at a time.

The server is already (or still) running, and can't be run a 2nd time, even to deactivate. It might be installed as an auto-starting application; in that case, read here how to do uninstall it.

{% hint style="info" %}
Ran into a different error, or can't resolve it? Reach out, and please include the `LocalLicenseServer.log` file in the server directory.
{% endhint %}

### Tracking Leases

If you want to track the amount of leases, or to which computer leases have been awarded, you can automatically parse the log files present on the server:

{% code overflow="wrap" %}

```
2026-04-07, 13:19:45 <notification>: New lease assigned (editset1, 501, IP=::ffff:100.109.110.37, PID=60901). Expires: 2026-04-07 12:20:15 (in UTC). Used / Total leases: 3 / 10
```

{% endcode %}

## Setting Up Clients

The client app can be installed like a regular app, or via MDM. After installation, switch the licensing method from Remote Activation to Local Activation.&#x20;

{% tabs %}
{% tab title="Mimiq" %}
Switch to Local Activation (replace the IP and port number):

```zsh
open "mimiq://licenseactivation?mode=local&ipAddress=192.168.1.10&port=1234"
```

Switch back to Remote Activation:

```zsh
open "mimiq://licenseactivation?mode=remote"
```

{% hint style="info" %}
macOS 10.15 Catalina doesn't support API calls to be opened from within Terminal. Use this single-line command instead:\
\
`defaults write video.hedge.Mimiq.Mac LocalLicenseServerSettings -string '{"port":1234,"ipAddress":"192.168.1.10"}'`
{% endhint %}
{% endtab %}

{% tab title="Postlab" %}
Switch to Local Activation (replace the IP and port number):

```zsh
open "postlab://licenseactivation?mode=local&ipAddress=192.168.1.10&port=1234"
```

Switch back to Remote Activation:

```zsh
open "postlab://licenseactivation?mode=remote"
```

{% hint style="info" %}
macOS 10.15 Catalina doesn't support API calls to be opened from within Terminal. Use this single-line command instead:\
\
`defaults write video.hedge.Postlab.Mac LocalLicenseServerSettings -string '{"port":1234,"ipAddress":"192.168.1.10"}'`
{% endhint %}
{% endtab %}
{% endtabs %}

An MDM solution is recommended for bulk setting changes on client apps and distribution of app updates.
