dux (Omnissa CLI) - pacreader commands

This document contains commands to deploy and manage PAC Reader using dux CLI.

Table of Contents

Installation

Dux can be installed on Linux, Mac OS and Windows. For instructions on installing Dux, please refer to the README.html - https://packages.omnissa.com/ws1-tunnel/dux/3.1.0.886/README.html

Usage

Check version of Dux cli

Get the version of Dux cli deployed

$ dux version 
Omnissa CLI - dux
3.1.0.886

Get list of commands supported:

CLI to deploy and manage containers based on the manifest file

Usage:
  dux [command]

Available Commands:
  about       Get legal and privacy information about Dux
  cg          CLI to deploy and manage Content Gateway containers
  eic         CLI to deploy and manage EIC containers
  pacreader   CLI to deploy and manage PAC Reader container
  seg         CLI to deploy and manage SEG containers
  tunnel      CLI to deploy and manage Tunnel containers
  version     Get the version of dux

Flags:
  -h, --help   Print help information

Use "dux [command] --help" for more information about a command.
$ dux about

Copyright © 2024-2026 Omnissa. All rights reserved. This product is protected by copyright and intellectual property laws in the United States and other countries as well as by international treaties. Its use is subject to the legal terms in place between you and Omnissa.

  • Omnissa's general and offering-specific legal terms for its products and services are available at: https://www.omnissa.com/legal-center/

  • Omnissa's privacy notice for products and services is located at: https://www.omnissa.com/omnissa-products-services-privacy-notice/

  • Omnissa's open-source software notices can be found at: https://www.omnissa.com/open-source-notices/

  • Omnissa products and services are covered by one or more patents listed at: https://www.omnissa.com/omnissa-patent-information/

Omnissa, the Omnissa Logo, Workspace ONE, and Horizon are registered trademarks or trademarks of Omnissa in the United States and other jurisdictions. All other marks and names mentioned herein may be trademarks of their respective companies. "Omnissa" refers to Omnissa, LLC, Omnissa International Unlimited Company, and/or their subsidiaries.

Prerequisites

c. If Dux can be allowed to use sudo for the execution of commands (no_sudo: true in the manifest files): Ensure that the user can do sudo without password in the remote VM/host where PAC Reader container needs to be deployed
i.e In the sudoers file in the remote host, add an entry to grant passwordless access to your desired user.
To allow users to execute commands with sudo privileges without entering a password on the remote VM, follow these steps:
i. SSH to the remote VM as a user with administrative privileges.
ii. Edit the sudoers file using the command: sudo visudo.
iii. Add the following line to the end of the file to grant sudo privileges without password prompt: Replace username with the actual username of the user.
username ALL=(ALL) NOPASSWD: ALL
iv. Save and exit the sudoers file.
d. Connectivity to UEM Console API.

f. Docker Permissions:
Ensure that the Linux user running the Dux CLI has the necessary permissions to execute Docker commands. If you intend to use Docker without sudo (i.e., no_sudo: true in the manifest), the user must be added to the Docker group. Without this, you may encounter the following error:

```
Error: Please ensure the Linux user is added to the docker group or has sufficient permissions to access the Docker daemon socket on <host>
```

**Steps to Add User to Docker Group:**

1. Add the user to the Docker group:
  ```bash
  sudo usermod -aG docker <username>
  ```
2. Log out and log back in for the changes to take effect.
3. Verify the user's access to Docker:
  ```bash
  docker ps
  ```
  If the command runs without errors, the user has sufficient permissions.

**Note:** If the `no_sudo` option in the manifest file is set to `false`, Dux will use `sudo` for Docker commands, and adding the user to the Docker group is not required.

Deploying Different Containers Using Dux CLI

The dux CLI tool supports deploying and managing multiple types of containers, including PAC Reader, PAC (Proxy Auto Configuration) Reader, SEG (Secure Email Gateway), Content Gateway and EIC (Endpoint Integrity Check) policy engine.
This section explains how to use dux to deploy and manage different containers based on the container type.

Initializing a Container

The dux init command prompts the user to select the container type they want to initialize. Based on the selection, the CLI generates a manifest file template specific to the selected container type. This manifest file contains the necessary configuration parameters for deploying the container.

Example:

$ dux init
Select a container type to initialize:
1. Tunnel
2. EIC
3. PAC Reader
4. SEG
5. Content Gateway
Enter the number of the container type: 3
Directory: /opt/omnissa/dux/scripts already exists
Directory: /opt/omnissa/dux/certs already exists
Deployment manifest initialized successfully in /opt/omnissa/dux/

The generated manifest file is stored in the default directory based on the platform as outlined in the Installation section.

Using Dux Commands with Single or Multiple Containers

** Behavior Based on Manifest Files **
If only one manifest file is present in the default directory, dux commands automatically use that manifest file.
If multiple manifest files are present, the user must select a container type or explicitly specify it in the command.
This flexibility allows users to manage multiple container types efficiently using the dux CLI tool.

Single Container Deployment

If only one type of container is deployed (i.e., only one manifest file is present in the default directory), all dux commands work as usual without requiring the user to specify the container type.
Example (if only ts_manifest.yml was present in the default directory):

$ dux status 

Status of PAC Reader container deployed

1. Host: 192.10.132.166	Status: Not Deployed

Multiple Container Deployment

If multiple containers are deployed or multiple manifest files are present in the default directory, dux commands prompt the user to select a container type before executing the command.
Example:

Multiple manifests found. Please select a container type:
1. Tunnel (/opt/omnissa/dux/ts_manifest.yml)
2. PAC Reader (/opt/omnissa/dux/pr_manifest.yml)
3. EIC (/opt/omnissa/dux/eic_manifest.yml)
4. SEG (/opt/omnissa/dux/seg_manifest.yml)

Enter the number of the container: 2

Status of PAC Reader container deployed

1. Host: 192.10.132.166	
Health check: 200 OK	Version: 1.5

CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   BLOCK I/O     PIDS
31bcf862040f   pacreader   0.04%     53.14MiB / 7.503GiB   0.69%     0B / 0B   0B / 3.13MB   6

PAC Service Status: UP  |  PAC Last Upload: 2025-07-08T09:01:43Z  |  PAC Next Upload: 2025-07-08T09:08:23Z

Explicitly Specifying Container Type

To avoid prompts, you can explicitly specify the container type in the command using the format:
Example:

$ dux pacreader status

Status of PAC Reader  container deployed

1. Host: 192.10.132.166	
Health check: 200 OK	Version: 1.5

CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   BLOCK I/O     PIDS
31bcf862040f   pacreader   0.04%     53.14MiB / 7.503GiB   0.69%     0B / 0B   0B / 3.13MB   6

PAC Service Status: UP  |  PAC Last Upload: 2025-07-08T09:01:43Z  |  PAC Next Upload: 2025-07-08T09:08:23Z

For PAC reader container commands, dux commands can be specified as dux pacreader <dux_command> <args>

Steps to deploy PAC Reader container

1.a. Execute init command

This command creates a sample manifest file for configuring PAC Reader for deployment.

Note that the init command should be run the first time a container type is deployed, as it generates the manifest template file necessary for deployment. If you wish to update a ts_manifest.yml of older version (3.0.0.641) please refer to the next sub-section 1.b
This command creates a sample manifest (pr_manifest.yml) under the directory dux based on the platform (by default). If you wish to use a different path where the files need to be created the command "dux init <some_path>" can be given. Please ensure to specify the path of manifest with -m option in the other commands.
For example, in Linux VM where dux is installed:

$ dux init --help
Select a container type to initialize:
1. Tunnel
2. EIC
3. PAC Reader
4. SEG
5. Content Gateway
Enter the number of the container type: 3
Create a manifest file for configuring PAC Reader details for deployment and management

Usage:
  dux pacreader init [path] [flags]

Examples:
        dux pacreader init                             # initialize manifest under default path (/usr/local/var/opt/omnissa/dux/)
        dux pacreader init /some/path                  # initialize manifest under the specified path
        dux pacreader init -u -m /path/to/manifest.yml # update the specified manifest file
        dux pacreader init -u -n                       # hide the comments in the manifest file (-m for custom manifest file)
        dux pacreader init -u                          # update the default manifest file

Flags:
  -m, --manifest-file string   Custom manifest file path to update (default "/usr/local/var/opt/omnissa/dux/pr_manifest.yml")
  -n, --no-comments            Hide comments in the manifest file. If not given, comments will be shown in the manifest file
  -u, --update                 Update the manifest file as per the latest version of dux

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs
  
$ dux init
Select a container type to initialize:
1. Tunnel
2. EIC
3. PAC Reader
4. SEG
5. Content Gateway
Enter the number of the container type: 3
Directory: /opt/omnissa/dux/scripts already exists
Directory: /opt/omnissa/dux/certs already exists
Deployment manifest initialized successfully in /opt/omnissa/dux/

$cd /opt/omnissa/dux
abc@abc dux $ ls -ltr
total 16
drwxr-xr-x  3 abc  xyz    96 Feb 16 18:12 images
drwxr-xr-x  3 abc  xyz    96 Feb 16 18:12 certs
drwxr-xr-x  3 abc  xyz    96 Feb 16 18:12 scripts
-rw-r--r--  1 abc  xyz  2335 Feb 19 11:11 example.pfx
-rw-r--r--  1 abc  xyz  2335 Feb 19 11:11 example.pac
-rw-r--r--  1 abc  xyz  2335 Feb 19 11:11 pr_manifest.yml
drwxr-xr-x  9 abc  xyz    288 Feb 19 11:11 logs

1.b Upgrade the manifest for PAC Reader container

If previous Dux version (3.0.0.641) is already installed and the PAC Reader container manifest file has the configuration details, the manifest can be upgraded with the following command:

$ dux init -u
1. Tunnel
2. EIC
3. PAC Reader
4. SEG
Enter the number of the container type: 3
Warning: Manifest version 3.0.0.641 is outdated.
Do you want to upgrade the manifest to the latest dux version ? (y/n) : y
Upgrading manifest from version 3.0.0.641 to version 3.1.0.886
Manifest file backed up to: /opt/omnissa/dux/pr_manifest.yml.bak_2025-12-11_18-09-08
Manifest file updated successfully at /opt/omnissa/dux/pr_manifest.yml

Note that if an outdated version of manifest is used the commands will not work as before and a warning will be presented to upgrade the manifest.

$ dux status -m ./pr_3.0.yml 
Warning: Manifest version 3.0.0.641 is outdated. Current Dux version is 3.1.0.886
Please update the manifest with the command: `dux init -u` or `dux pacreader init -u` . Refer to `dux init -h` or `dux pacreader init -h` for details
error="Manifest version is not same as current version. Upgrade needed"

The backup of the original manifest is saved with the timestamp so that any changes can be verified/reverted if needed.
Once the manifest is upgraded, it is recommended to check the updated manifest manually, or test if the updated manifest works fine with either a dux deploy -d command or dux status command. Please update the new manifest as needed for using a newer PAC Reader container image, or use the new features supported etc.

2. Edit pr_manifest.yml

Edit pr_manifest.yml generated in an editor of your choice.
Please refer to the section "Points to be noted while editing pr_manifest.yml" under Troubleshooting section.

Here are a few parameters:

image_name : Input details of PAC Reader image to deploy

  # Enter the filename of the image or the repo path to deploy below.
  # File: This must match against the PAC Reader image filename from the default directory (refer to the note below) or the absolute path.
  # example: 29-2023.06.14-22e04910.tar.gz or /home/admin/29-2023.06.14-22e04910.tar.gz
  # Note: The default directory where the images are recommended to be present is:
  #   - for linux: /opt/omnissa/dux/images
  #   - for Mac OS on Intel/AMD64: /usr/local/var/opt/omnissa/dux/images/
  #   - for Mac OS on Apple Silicon/ARM64: /opt/homebrew/var/opt/omnissa/dux/images/
  # Repository: Repository path of the image with the tag can be given as well:
  # For example: your-local-repo.com/<path>/pac-reader:<tag>

#Copy the bundle to the working directory
# eg. in Linux: cp ~/Downloads/23.12.14-2023.12.12-95068395.tar.gz /opt/omnissa/dux/images/
$ ls -ltr /opt/omnissa/dux/images 
total 735112
-rw-r--r--@ 1 abc  xyz  376374902 Feb 16 18:12 23.12.14-2023.12.12-95068395.tar.gz
#image_name in manifest
    image_name: 23.12.14-2023.12.12-95068395.tar.gz

log_level

Enter desired log level for PAC Reader container

# Default value - Info
##  0 - Off
##  1 - Error
##  2 - Warning
##  3 - Info
##  4 - Debug
log_level: 4

refresh_interval

Enter desired pac file refresh interval for PAC Reader container

#  Refresh interval in secs for server traffic rule
## Optional: Input the interval. Default value - 300 secs
refresh_interval: 200

pac_file

Input the local path of PAC file location or URL where PAC file will be downloaded from.

  #   - Linux:                          /opt/omnissa/dux/proxy.pac
  #   - Mac OS on Intel/AMD64:          /usr/local/var/opt/omnissa/dux/proxy.pac
  #   - Mac OS on Apple Silicon/ARM64:  /opt/homebrew/var/opt/omnissa/dux/proxy.pac
  pac_file: /opt/homebrew/var/opt/omnissa/dux/example.pac

port

If URL configured for pac file path, then enter desired port number for the PAC URL.

  # 0 ( Default) Use pac_location HTTP (80) or HTTPS (443) to determine
  # 1-65535 - Enter user defined port number for the PAC URL
  # Leave as is for Default value
  port: 5545

pfx_file

Input the path of PFX/P12 file for UEM console authentication.

  #   - Linux:                          /opt/omnissa/dux/pac.p12
  #   - Mac OS on Intel/AMD64:          /usr/local/var/opt/omnissa/dux/pac.p12
  #   - Mac OS on Apple Silicon/ARM64:  /opt/homebrew/var/opt/omnissa/dux/pac.p12
  pfx_file: /opt/homebrew/var/opt/omnissa/dux/example.pfx

capture_proxy_auth

Configure authentication type used for proxy during pacreader deployment.

  # Note: Set 1 to configure proxy authentication during deployment.
  #       Set 0 to disable configuration of proxy authentication.
  # This will start an interactive shell using dux to set the required auth types
  capture_proxy_auth: 0

pac_service_monitor_address and pac_service_monitor_port

Configure 3rd party pac service monitor address and port

# PAC Monitoring Service Alert Target (Optional)
# PAC reader sends PAC service alerts in CEE-enhanced syslog format (RFC5424) with JSON payload.
# Example format:
#   <15> @cee: {"event": "pac_service_status", "status": "running/stopped", ... }
#
# Supported protocol is UDP.
# Example:
#   pac_service_monitor_address: 192.168.10.100
#   pac_service_monitor_port: 9191
pac_service_monitor_address:
pac_service_monitor_port:

api_token

  # Input the API Token for authenticating with the API server.
  # Example:
  #   - api_token: 35nm0Ie5kIhWCuOyxvdLTymlTOP9bhgqIUwkKz
  api_token:

ssh_login_credentials

If all hosts have common authentication credentials, you may want to use the parameter - ssh_login_credentials.
However if you want to use different set of credentials for a host, the parameter host_info can be used. Refer to the sub-section which talks about hosts below.
For authentication, provide the ssh user name and ssh key path below

Please ensure to create a ssh key and copy the key to the remote VMs. Refer to https://linuxhint.com/generate-ssh-keys-on-linux/
For example:

ssh_login_credentials:
  ssh_user: root
  # Input the path of ssh key - e.g /home/admin/id_rsa
  ssh_key_path: /home/admin/id_rsa
  ## Optional: Input the ssh port. Default value - 22
  #ssh_port:

ssh_host_key_check: Input if the identity of the remote host needs to be verified

SSH (Secure Shell) host key checking is a crucial security measure that helps verify the authenticity of a remote server before establishing a connection. When a client connects to a server for the first time, SSH presents the server's host key to the client. The client then checks this key against its list of known host keys to ensure it matches.

If the host key presented by the server matches an entry in the client's known_hosts file, the connection proceeds without interruption. However, if there's no match, SSH prompts the user to confirm the authenticity of the server by displaying the key fingerprint. This fingerprint serves as a unique identifier for the server's key.

The purpose of SSH host key checking is to prevent man-in-the-middle attacks, where an attacker intercepts communication between the client and server, posing as the legitimate server. By verifying the host key, SSH ensures that the client is connecting to the intended server and not a malicious entity.

By default the option to check host keys of remote VMs is enabled and the user will be prompted. If you do not wish to receive the prompts, ssh_host_key_check can be set to 0 to disable the check.

  # SSH Host key check - verify the identity of the remote host 
  # By default this is enabled and the user will be prompted to confirm the fingerprint of the public key of the remote host.
  # If disabled, dux will connect similar to the ssh option StrictHostKeyChecking=no and UserKnownHostsFile=/dev/null
  # 1 - enable host key checking
  # 0 - disable host key checking
  ssh_host_key_check: 1 

container_logging: Configure logging behavior for PAC Reader container

This section controls the logging behavior of the PAC Reader container. It allows you to specify the maximum size of each log file and the number of log files to retain.

For example:

    container_logging:
        max_size: "20M"
        max_num_files: "10"

global_base_dir: Specify the global working directory for dux

This parameter defines the global working directory under which all directories for dux related to PAC Reader container deployment will be created for all hosts. If not specified, the default value is the home directory of the ssh user. Use the parameter host_base_dir if the hosts have different working directories based on permission requirements for each host.

For example:

  # Global value for base directory for dux under which all directories of dux for PAC Reader container deployment will be created for all hosts.
  # Default is $HOME directory

  global_base_dir: $HOME

hosts: Input docker host information for PAC Reader container deployment. Only one host is needed per PAC URL/file source location.

Fill in the IP address of a host where PAC Reader container needs to be deployed.
For example:

  hosts:
   # Enter IP address of the host below
    - address: 1.2.3.4
host_info: For authentication info specific to this host, uncomment the parameters under the parameter host_info.

If both ssh_key_path and ssh_password are provided, ssh_key_path is preferred. Note that for security reasons, giving password information in manifest is not recommended. But it is still provided as an option.
The values can be passed as environment variables.
If all hosts have common ssh credential info, you may use the global parameter: ssh_login_credentials mentioned in the section above.
If both host_info and ssh_login_credentials are given, the credentials under host_info are preferred.
For example:

      host_info:
        ssh_user: admin
        ## Input the path of ssh key - e.g /home/admin/id_rsa
        ssh_key_path: /home/admin/id_rsa
        ## For security reasons, the ssh_password is not recommended. 
        #ssh_password: 
        ## Input the ssh port. Default value - 22
        #ssh_port:

host_base_dir: To override the global_base_dir for the host, uncomment the fields under parameter host_base_dir

The host_base_dir parameter specifies the working directory on the host under which all directories for the PAC Reader container deployment will be created.
This parameter allows you to override the global_base_dir for a specific host. If all hosts share a common working directory, you can use the global_base_dir parameter instead.
Example:
Setting host_base_dir: /home/admin/dux/ ensures that all directories for the PAC Reader container deployment on this specific host will be created under /home/admin/dux/.

      # Base directory for dux under which all directories of dux for PAC Reader container deployment will be created.
      # Default is $HOME directory. If all hosts have common base directory, you may use the global parameter - 'global_base_dir'
      host_base_dir: /home/admin/dux

If host entries need to be specified (e.g if outbound proxy is not in DNS in remote network ) in the remote host, specify the host names and ip addresses in this section.

  # Add entries to the container hosts file to manually link FQDN to IP address
  # Format:
  ## - host_name:
  ##   ip_address:
  host_entries:
    - host_name: example.com
      ip_address: 1.2.3.4

uem: Details of UEM profile

The details of UEM profile such as UEM url, Group Id/ tunnel configuration id of the OG needs to be input in this section.
If tunnel_config_id is left blank, the organization Group ID is used to fetch the configuration.
Note that the tunnel_config_id parameter is supported only if UEM console supports multi-tunnel configuration feature which is from UEM Console version-23.06 onwards. If you are using an older UEM console version, please user group_id field.

For example:

uem:
 # The Workspace ONE UEM API server URL. The destination URL must contain the protocol and hostname or IP address
  # Example: load-balancer.example.com
  url: example.ssdevrd.com
  
  # Input the API Token for authenticating with the API server.
  # Example:
  #   - api_token: 35nm0Ie5kIhWCuOyxvdLTymlTOP9bhgqIUwkKz
  api_token:

  # Omnissa Tunnel Configuration ID configured in the Workspace ONE UEM Console.
  # This field is supported only if the UEM console supports multi-tunnel configuration feature (from UEM Console version 23.06 onwards).
  # If left blank, default configuration from the specified organization group will be fetched.
  tunnel_config_id: 

  # The organization group ID in Workspace ONE UEM Console where Tunnel is configured.
  group_id:
  
  #   - Linux:                          /opt/omnissa/dux/pac.p12
  #   - Mac OS on Intel/AMD64:          /usr/local/var/opt/omnissa/dux/pac.p12
  #   - Mac OS on Apple Silicon/ARM64:  /opt/homebrew/var/opt/omnissa/dux/pac.p12
  pfx_file: /opt/homebrew/var/opt/omnissa/dux/example.pfx 

permissions: Command Permissions Configuration

The permissions section in the pr_manifest.yml file controls whether specific operations require sudo privileges during the execution of dux commands. This section allows you to configure the behavior of dux for different types of operations, ensuring flexibility and security based on your environment.

permissions:
  # Docker commands (run, stop, logs, inspect, etc.)
  # no_sudo: false (default) = use sudo, no_sudo: true = don't use sudo

  docker:
    no_sudo: false

  # File operations (mkdir, cp, rm, chown, etc.)

  file_operations:
    no_sudo: false

  # System commands (systemctl, sysctl, ulimit, etc.)

  system:
    no_sudo: false

  # Network configuration (ip route, iptables, ifconfig, etc.)

  network:
    no_sudo: false
Field Description no_sudo: true no_sudo: false
Docker Commands Controls whether sudo is required for Docker-related operations, such as running, stopping, inspecting, and fetching logs from containers. Docker commands will be executed without sudo. Requires the user to have appropriate permissions to run Docker commands without sudo. Docker commands will be executed with sudo. This is the default setting for security purposes.
File Operations Controls whether sudo is required for file-related operations, such as creating directories, copying files, removing files, and changing ownership. File operations will be executed without sudo. Requires the user to have appropriate permissions to perform file operations without sudo. File operations will be executed with sudo. This is the default setting for security purposes.
System Commands Controls whether sudo is required for system-level commands, such as managing services (systemctl), modifying system limits (ulimit), or configuring system parameters (sysctl). System commands will be executed without sudo. Requires the user to have appropriate permissions to execute system commands without sudo. System commands will be executed with sudo. This is the default setting for security purposes.
Network Configuration Controls whether sudo is required for network-related operations, such as configuring IP routes, managing firewall rules (iptables), or modifying network interfaces. Network configuration commands will be executed without sudo. Requires the user to have appropriate permissions to perform network operations without sudo. Network configuration commands will be executed with sudo. This is the default setting for security purposes.

Default Behavior: By default, all fields in the permissions section are set to false, meaning that sudo is required for all operations. This ensures maximum security, as elevated privileges are used to execute commands.

When to Set no_sudo: true: You can set no_sudo: true for specific fields if:

CA Certificates Configuration

The ca_cert_files field in the ts_manifest.yml file allows you to specify additional CA certificates to be added to the container's certificate store. These certificates are essential for enabling secure communication between the Content Gateway container and external systems.

# Additional CA certificates to be added to the container cert store
# Give file names of the cert to be added. Multiple filenames can be given separated by comma - e.g., cert1.crt, cert2.crt
# The default directory where the certs are recommended to be present is:
#  - for linux: /opt/omnissa/dux/certs
#  - for Mac OS on Intel/AMD64: /usr/local/var/opt/omnissa/dux/certs/
#  - for Mac OS on Apple Silicon/ARM64: /opt/homebrew/var/opt/omnissa/dux/certs/
#   - for Windows: <path of dux installation directory>/certs/
# Absolute path of the cert can be given as well - /home/admin/proxy.crt
ca_cert_files: 

3. Execute deploy command

Once the manifest is updated, deploy command can be run to deploy the PAC Reader container in the host specified.

deploy help

$ dux pacreader deploy -h
Deploy PAC Reader container

Usage:
  dux pacreader deploy [flags]

Flags:
  -d, --dry-run                Check if manifest is good to deploy
  -p, --ip stringArray         Hostname or IP as specified in the manifest to deploy on a single host
  -m, --manifest-file string   The manifest file used to deploy (default "/opt/omnissa/dux/pr_manifest.yml")
  -u, --pfx-password string    The password to authenticate with the Workspace ONE UEM API server.
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled
  -y, --yes                    Auto accept all prompts

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

Check if manifest is good to run

To catch if the manifest is syntactically correct, run "deploy --dry-run or -d ".
Following checks are done when dux pacreader deploy --dry-run command is run:

  1. Syntax check of the manifest file (eg. pr_manifest.yml)
  2. Validation of the fields in manifest file so that the required fields are filled in
  3. Deployment pre-requisites
    a. SSH connectivity to remote host
    b. Check if docker is installed and running on remote host
    c. Check if the Linux user is configured to use sudo (if no_sudo is marked as 'false' in the permissions section of the manifest file)
    d. Check if passwordless sudo is setup for the Linux user (if no_sudo is marked as 'false' in the permissions section of the manifest file)
$ dux pacreader deploy -d
Manifest file syntax validation is successful
Verifying deployment prerequisites on 192.168.99.185
Verifying docker is installed and running on 192.168.99.185
Checking for host working directory: /home/user1

Checking for availablility of sufficient free disk space in the host working directory: /home/user1

Host 192.168.99.185 is good to deploy
Manifest file and host are good to deploy!

#In case of error in the manifest, for example, if tunnel_config_id was not filled up, you may get an error like below:
$ dux pacreader deploy -d
Manifest verification failed error="Incorrect data in manifest: the group_id field is required if tunnel_config_id is not populated"

Host Key Verification

For security requirements, when dux commands are executed, host key verification is done during the SSH handshake at the first time. If the host is unknown, a prompt is displayed to check the fingerprint of the host's key. If the user confirms the host key is correct, the host is added to known hosts.
If the fingerprint of the host changes, the user is prompted again to ensure there is no intruder attack.

The authenticity of host '192.168.99.185:22' can't be established.
Fingerprint of the host's key:SHA256:AOy8f1sChEM7xLJyYP190vjjVxDLYI9ORDaKZCNKzzE
Do you want to continue connecting? (yes/no): 

Deploy

This command deploys the pacreader container in the host as listed in manifest, and as per the UEM configuration defined. The image is copied to remote host which will take few minutes depending on the network connectivity.
Note:

  1. Ensure the image to be deployed is in the images directory or the absolute path specified in the image_name in manifest.
  2. If image to be deployed is already loaded in remote host, the step to copy pacreader image will be skipped.
  3. The command given without options (-n or -p) will deploy container on a single host as listed in manifest.
#Sample run
$ dux pacreader deploy      
Enter PFX file Password: 

Preparing for PAC Reader container deployment on 192.10.132.186
Copying PAC Reader container image to remote. Please wait..
Progress 100% |██████████████████████████████████████████████████████████████████████████████████████| (376/376 MB, 7.5 MB/s)         
Deploying new PAC Reader container on 192.10.132.186                                                                            
PAC Reader container ID: 5a3cfd0f45741379e0a61e8c4847eebeb75043e94d2b74d5c1cf97015cfa0fdf

Deploy command has completed on 192.10.132.186

——

#### To use a different manifest
To use a manifest from a different path -m flag can be used. If not specified, pr_manifest.yml from the directory where dux is run from is used by default.


#For eg.
$ dux pacreader deploy -m ~/Downloads/pr_manifest_xyz.yml


#### To deploy PAC Reader container in specific remote host 
To deploy PAC Reader container in a remote host specified by ip in manifest.


#For eg.
$ dux pacreader deploy -p 1.2.3.4
# To give PFX file password as command line option:
$ dux pacreader deploy -u <pfx_password>

Perform operations on deployed PAC Reader container

Once the deployment of container is successful, other commands can be used to check status of deployment, fetch logs, stop, restart, and even destroy the deployments.

1.Check status of deployment

$ dux pacreader status -h
Get the status of the PAC Reader container deployed

Usage:
  dux pacreader status [flags]

Flags:
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -j, --json                   Get status of PAC Reader container in json format
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

#To get status of all deployments - sample run. In this case, one of the deployments is not in Running state, hence shows Down as status
$ dux pacreader status 

Status of PAC Reader container deployed

Host: 192.62.82.52	Version: n.feature_PPAT_2159_PAC_utility_Co.el9.90
 	
CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   BLOCK I/O    PIDS
88bc5a408286   pacreader   0.05%     29.18MiB / 7.503GiB   0.38%     0B / 0B   0B / 647kB   6

PAC Service Status: UP  |  PAC Last Upload: 2025-06-26T14:15:53Z  |  PAC Next Upload: 2025-06-26T14:20:53Z

#Get status of a host by IP
#Multiple ips can be specified too. eg. dux status -p 1.2.3.4 -p 1.2.3.5 
$ dux pacreader status -p 192.10.132.110 

2.Fetch logs from the deployed container

Fetch logs from the deployed container. If the container deployment is down, the docker logs of the container are fetched.
Note that the logs are stored in the logs directory based on the platform.
For linux: /opt/omnissa/dux/logs/
For Mac OS on Intel (AMD64): /opt/omnissa/dux/logs
For Mac OS on Apple Silicon (ARM64): /opt/homebrew/var/opt/omnissa/dux/logs
For Windows: <INSTALL_DIR>\logs

The option -f can be used to continously view the docker logs output of a PAC Reader container deployed till Ctrl-C is given.

# logs help
$ dux pacreader logs -h
Get logs from the PAC Reader container deployed

Usage:
  dux pacreader logs [flags]

Flags:
  -f, --follow                 Follow/View logs of a PAC Reader container specified by ip (-p) option
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

#Get logs of a container deployed as per manifest
#Sample run - Note if the deployment is not up, the container logs are fetched.
$ dux pacreader logs 
Retrieve PAC Reader container logs from 192.10.132.186
Copy log bundle from Remote to Local machine..
Logs from 192.10.132.186 downloaded at: /opt/omnissa/dux/logs/pacreader.192.10.132.186_20240219184004.tar.gz

#Logs from a deployment can be obtained by specifying IP as per the manifest
#eg. 
# dux pacreader logs -p 1.2.3.4

#To continuously view/follow the run logs of container , give -f option for the specific node/host ip
# dux pacreader logs -f 
#Press Ctrl-C to stop viewing

3.Stop deployed container

In case a PAC Reader container needs to be stopped for some reason, dux pacreader stop command can be given.

# stop help
$ dux pacreader stop -h                      
Stop PAC Reader container on a given host from the manifest file. To restart the container again, you may use dux pacreader restart command.

Usage:
  dux pacreader stop [flags]

Flags:
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled
  -y, --yes                    Auto accept all prompts

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

# Stop all deployments 
$ dux pacreader stop  


Are you sure you want to stop the PAC Reader container deployed in host given in the manifest?
ip : 192.10.132.186 
Please confirm (y/n):
PAC Reader container was successfully stopped on 192.10.132.186


#Deployment of PAC Reader container can be stopped by specifying IP as per the manifest
#eg.
# dux pacreader stop -p 1.2.3.4

#To auto accept all prompts for y/n , -y option can be given
#eg.
# dux pacreader stop -y

4.Restart deployed container

Stopped container can be restarted by "dux pacreader restart" command

#restart help
$ dux pacreader restart -h
Restart the PAC Reader container on a given host

Usage:
  dux pacreader restart [flags]

Flags:
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled
  -y, --yes                    Auto accept all prompts

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

#Restart all deployments
#Sample run
$ dux pacreader restart   

Are you sure you want to restart PAC Reader deployment on 192.10.132.186 (y/n)?: n

Are you sure you want to restart PAC Reader deployment on 192.168.99.185 (y/n)?: y
PAC Reader container was successfully restarted on 192.168.99.185

#Deployment of PAC Reader container can be restarted by specifying IP as per the manifest
#eg.
# dux pacreader restart -p 1.2.3.4

#To auto accept all prompts for y/n , -y option can be given
#eg.
# dux pacreader restart -y

5. Open interactive shell with PAC Reader container

If you wish to start a shell with PAC Reader container you can use the command 'exec-shell'

$ dux pacreader exec-shell -h
Open interactive shell with PAC Reader container

Usage:
  dux pacreader exec-shell [flags]

Flags:
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

$ dux pacreader exec-shell 

Starting the interactive shell with PAC Reader container in host: 192.62.82.52
[root@alma vpnd]# pwd
/opt/omnissa/tunnel/pacreader

6.Destroy deployed container

To stop and remove the deployed container from the remote host, dux pacreader destroy command can be used.

#destroy command help
$ dux pacreader destroy -h
Destroy the PAC Reader container on a given host

Usage:
  dux pacreader destroy [flags]

Flags:
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled
  -y, --yes                    Auto accept all prompts

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

#Destroy all deployments
#Sample run
$ dux pacreader destroy       

Are you sure you want to destroy the PAC Reader container deployed on a host given in the manifest?
ip : 192.62.82.52 
Please confirm (y/n):
PAC Reader container was successfully destroyed on 192.62.82.52 

#Deployment of PAC Reader  can be destroyed by specifying IPs as per the manifest
#eg.
# dux pacreader destroy -p 1.2.3.4

#To auto accept all prompts for y/n , -y option can be given
#eg.
# dux pacreader destroy -y

7.Update deployed container

Update deployed container from the remote PAC Reader host, dux pacreader update command can be used.

#update command help
$ dux pacreader update -h
Update the PAC Reader container on given host with new runtime values.

⚠️ NOTE: This command overrides the current container settings without modifying pr_manifest.yml.
To avoid rollback on the next deploy, update the manifest file manually after using this command.

Usage:
  dux pacreader update [flags]

Flags:
  -p, --ip stringArray         Hostname or IP as specified in the manifest for filtering
  -l, --log-level string       Update log level for PAC Reader container (e.g., --log-level 4 [debug=4, info=3, warn=2, error=2, off=0])
  -m, --manifest-file string   Custom manifest file path (default "/opt/omnissa/dux/pr_manifest.yml")
  -a, --proxy-auth             Update proxy auth for PAC Reader container
  -q, --quiet                  Quiet mode: interactive ssh password prompts are disabled
  -r, --refresh int            Update pac refresh interval in seconds for PAC Reader container
  -y, --yes                    Auto accept all prompts

Global Flags:
  -h, --help      Print help information
  -v, --verbose   Show verbose logs

#Destroy all deployments
#Sample run
# Update the log level on PAC Reader container
$ dux pacreader update -l 4
Updating log level for PAC Reader container on 192.62.82.52 to level 5
PAC Reader container was successfully restarted on 192.62.82.52

# Update the refresh interval on PAC Reader container
$ dux pacreader update -r 300
Updating pac refresh interval for PAC Reader container on 192.62.82.52 to 300 seconds
PAC Reader container was successfully restarted on 192.62.82.52

# Update the proxy auth on PAC Reader container
$ dux pacreader update -a 

8. Get verbose logs

If you wish to get verbose logs for any command, use the -v or --verbose option.
For example:

$ dux pacreader deploy -v

Troubleshooting

  1. For any installation issues please refer to the package manager instructions (yum/dnf/brew) for the specific error.
    For example, if you are using dnf and encounter issues with installing dux, check if the cache is updated. Try "dnf makecache" to update metadata cache.

  2. Ensure "dux pacreader init" command is run the first time.

  3. Do a dry-run before deploying to ensure there are no issues with the manifest, and to ensure that the deployment pre-requisites are met.

 dux pacreader deploy -d
  1. For any issues, please check the file dux.log under logs directory as per the platform - for e.g /opt/omnissa/dux/logs/dux.log in Linux.

  2. If docker is installed with snap in the Linux system, you may encounter permission issues during deployment of PAC Reader container.
    Ubuntu commonly uses snap to install packages.
    If snap docker is used it is recommended to uninstall snap docker, and install docker as mentioned in https://docs.docker.com/engine/install/ubuntu/ .

sudo snap remove docker --purge
sudo reboot 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Note: Please check if there are other containers running in your VM with snap docker. While technically possible, running both Snap Docker and Docker CE on the same Ubuntu system is generally not recommended due to the potential for conflicts and complexity - wrt port usage, networking, system resources usage etc.

  1. Please ensure the conditions in the Prerequisites section are met.
  2. In Windows, if dux is installed under system directories like C:\Program Files, Windows Powershell/Command Prompt should be run as administrator for dux commands to work. Please check for errors related to access issues.
  3. Passwords with Special Characters

When deploying with Basic Auth for UEM API authentication, always wrap your password in single quotes when using command-line options. This prevents issues with special characters being misinterpreted by the shell during deployment.

  1. Resolving ANSI Characters Display Issue in Windows PowerShell

    If you encounter ANSI escape characters (e.g., \u001b[31m) while using dux commands in Windows PowerShell, it indicates that ANSI escape code support is not enabled. This can cause colored or formatted output to appear incorrectly.

    To resolve this issue, you can enable ANSI escape code support in your terminal by modifying a registry setting. Follow the steps below:

    1. Open Command Prompt (cmd.exe) or PowerShell with administrator privileges.
    2. Run the following command to enable ANSI escape code support:
    reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
    
    1. Restart your terminal for the changes to take effect.
  2. If Podman is used in the Linux VM, containers might not automatically restart after a system reboot. To address this, configure the container as a systemd service. This ensures that systemd manages the container's lifecycle and restarts it automatically after a reboot.

For detailed steps on configuring the container as a systemd service, contact support.

  1. To avoid errors while editing the pr_manifest.yml, please refer to the following guide:

Points to be noted while editing pr_manifest.yml file

  1. Open the YAML File

    • Right-click on the pr_manifest.yml file and choose "Open With" from the context menu. Select a text editor such as TextEdit (Mac), or any code editor like Visual Studio Code, Sublime Text, or Atom.
    • Alternatively, you can open the text editor first and then navigate to the file using the "File" menu.
  2. Understand YAML Syntax

    • YAML uses a human-readable syntax based on indentation and key-value pairs.
    • Each entry in the YAML file consists of a key followed by a colon : and then the corresponding value.
    • Indentation (whitespace at the beginning of a line) is crucial in YAML to denote hierarchical structure.
    • Please ensure there is a space post colon as this is a common user error :
      image_name: PacReaderContainer_23.12.1.7.tar.gz
  3. Make Changes

    • Locate the section of the YAML file you wish to modify. Be careful not to change the structure or indentation, as YAML is sensitive to these.
    • Edit the values according to your requirements.
    • Take note of any comments (#) in the YAML file as they provide context or explanations about specific entries.
  4. Save Changes

    • After making the necessary edits, save the file by clicking on "File" in the menu and then selecting "Save" or by pressing Ctrl + S (Linux) or Cmd + S (Mac).
    • Ensure that you save the file with the .yml extension to maintain its YAML format.
  5. Validate Changes (Optional)

    • If you're unsure whether your changes are syntactically correct, you can validate the YAML file using online YAML validators (https://www.yamllint.com/) or command-line tools.
    • YAML linting tools can identify syntax errors or formatting issues, helping you ensure the file is valid.
  6. Backup (Optional but Recommended)

    • Before making extensive changes, consider creating a backup of the original YAML file. This ensures you can revert to the previous configuration if needed.
  7. Sample pr_manifest.yml file for reference

# Version number for the PAC Reader container deployment manifest. This is auto generated and should not be altered.
version: "3.1.0.886"

pac_reader:
  # Enter the filename of the image or the repo path to deploy below.
  # File: This must match against the PAC Reader image filename from the default directory (refer to the note below) or the absolute path.
  # Example: 29-2023.06.14-22e04910.tar.gz or /home/admin/29-2023.06.14-22e04910.tar.gz
  # Note: The default directory where the images are recommended to be present is:
  #   - for linux: /opt/omnissa/dux/images
  #   - for Mac OS on Intel/AMD64: /usr/local/var/opt/omnissa/dux/images/
  #   - for Mac OS on Apple Silicon/ARM64: /opt/homebrew/var/opt/omnissa/dux/images/
  # Repository: Repository path of the image with the tag can be given as well:
  # For example: your-local-repo.com/<path>/pac-reader:<tag> 
  image_name: pac_image.tar.gz
  # Enter the desired log level while deploying the PAC Reader container
  # Default value - Info
  ##  0 - Off
  ##  1 - Error
  ##  2 - Warning
  ##  3 - Info
  ##  4 - Debug 
  log_level: 3

  # Refresh interval in seconds for server traffic rule
  # Optional: Input the interval. Default value - 300 
  #refresh_interval: 300
  # Input the local path of PAC file location or URL where PAC file will be downloaded from
  # Example:
  #   - Linux:                          /opt/omnissa/dux/proxy.pac
  #   - Mac OS on Intel/AMD64:          /usr/local/var/opt/omnissa/dux/proxy.pac
  #   - Mac OS on Apple Silicon/ARM64:  /opt/homebrew/var/opt/omnissa/dux/proxy.pac
  #   - URL:                            http://mypac.mydomain.com/pacfile  
  pac_file: /opt/omnissa/dux/proxy.pac
  # Enter the desired PAC file download port number
  # 0 (Default) Use pac_location HTTP (80) or HTTPS (443) to determine
  # 1-65535 - Enter user defined port number for the PAC URL
  # Leave as is for Default value 
  port: 
  # Capture Proxy Auth
  # Note: Set 1 to configure proxy authentication during deployment.
  #       Set 0 to disable configuration of proxy authentication.
  # This will start an interactive shell using dux to set the required auth types 
  capture_proxy_auth: 0
  # PAC Monitoring Service Alert Target (Optional)
  # PAC reader sends PAC service alerts in CEE-enhanced syslog format (RFC5424) with JSON payload.
  # Example format:
  #   <15> @cee: {"event": "pac_service_status", "status": "running/stopped", ... }
  #
  # Supported protocol is UDP.
  # Example:
  #   pac_service_monitor_address: 192.168.10.100
  #   pac_service_monitor_port: 9191 
  pac_service_monitor_address: 
  pac_service_monitor_port: 
  # If all hosts have common authentication credentials, you may want to use the parameter - ssh_login_credentials
  # For authentication, provide the ssh user name and ssh key path below
  # If all hosts use a different SSH port other than 22, uncomment the `ssh_port` parameter and enter the port number.
  # If not provided, default value of 22 will be used.
  ssh_login_credentials:
    ssh_user: user1
    # Input the path of ssh key - e.g /home/admin/id_rsa
    ssh_key_path: /home/admin/id_rsa
    ## Optional: Input the ssh port. Default value - 22
    ssh_port: 
  # SSH Host key check - verify the identity of the remote host
  # By default, this is enabled and the user will be prompted to confirm the fingerprint of the public key of the remote host.
  # If disabled, dux will connect similar to the ssh option StrictHostKeyChecking=no and UserKnownHostsFile=/dev/null
  # 1 - enable host key checking
  # 0 - disable host key checking 
  ssh_host_key_check: 1
  
  # Container Logging Configuration
  # These parameters control how Docker will maintain the container logs to limit its disk usage on the host machine. 
  # max_size: Maximum size of each log file. Once the size is reached, the log file is rotated.
  # Supported units: K (Kilobytes), M (Megabytes), G (Gigabytes). Default: "10M".
  # max_num_files: Maximum number of log files to retain. Older files are deleted when the limit is reached. Default: "5". 
  container_logging:
    max_size: "10M"
    max_num_files: "5"

  # Global value for base directory for dux under which all directories of dux for PAC Reader container deployment will be created for all hosts.
  # Default is $HOME directory 
  global_base_dir: $HOME

  # Input docker host information for PAC Reader container deployment. Only one host is needed per PAC URL/file source location. 
  hosts:
    # Enter IP address of the host below 
    - address: 192.10.132.166

      ######################################################################
      ## THE FOLLOWING ARE OPTIONAL PARAMETERS FOR PAC READER CONTAINER DEPLOYMENT. 
      ## PLEASE EDIT THEM AS PER YOUR REQUIREMENTS
      ######################################################################

      ## For information specific to this host, uncomment 'host_info' and the parameters under it as needed.

      ## For authentication info specific to this host, uncomment the 'ssh_user' and 'ssh_key_path/ssh_password' as needed.
      ## If both 'ssh_key_path' and 'ssh_password' are provided, 'ssh_key_path' is preferred.
      ## If all hosts have common ssh credential info/ssh port info, you may use the global parameter: 'ssh_login_credentials'  
      ## If both 'host_info' and 'ssh_login_credentials' are given, the credentials under 'host_info' are preferred.
      
      ## SSH Port information
      ## If the host uses a different SSH port other than 22, uncomment the `ssh_port` parameter and enter the port number.
      ## If not provided, default value of 22 will be used.
      
      #host_info:
        #ssh_user: 
        ## Input the path of ssh key - e.g /home/admin/id_rsa
        #ssh_key_path: 
        ## For security reasons, the ssh_password is not recommended. 
        #ssh_password: 
        ## Input the ssh port. Default value - 22
        #ssh_port:

      # Base directory for dux under which all directories of dux for PAC Reader container deployment will be created.
      # Default is $HOME directory. If all hosts have common base directory, you may use the global parameter - 'global_base_dir'
      
      #host_base_dir: $HOME
  # Add entries to the container hosts file to manually link FQDN to IP address
  # Format:
  # - host_name:
  #   ip_address:
  host_entries:
    # Example:
    # - host_name: example.com
    #   ip_address: 192.168.1.1
    
uem:
  # The Workspace ONE UEM API Host server. The destination must contain the hostname or IP address
  # Example: load-balancer.example.com
  api_host: https://example-uem-api.com
  # Input the API Token for authenticating with the API server.
  # Example:
  #   - api_token: 35nm0Ie5kIhWCuOyxvdLTymlTOP9bhgqIUwkKz
  api_token: 35nm0Ie5kIhWCuOyxvdLTymlTOP9
  # Omnissa Tunnel Configuration ID configured in the Workspace ONE UEM Console.
  # This field is supported only if the UEM console supports multi-tunnel configuration feature (from UEM Console version 23.06 onwards).
  # If left blank, default configuration from the specified organization group will be fetched.
  tunnel_config_id: cafa5265-2e0f-4506-920e-f07f4b9esdsd
  # The organization group ID in Workspace ONE UEM Console where Tunnel is configured.
  group_id: 
  # Input the path of PFX/P12 file for UEM console authentication
  # Example:
  #   - Linux:                          /opt/omnissa/dux/pac.p12
  #   - Mac OS on Intel/AMD64:          /usr/local/var/opt/omnissa/dux/pac.p12
  #   - Mac OS on Apple Silicon/ARM64:  /opt/homebrew/var/opt/omnissa/dux/pac.p12
  pfx_file: /opt/omnissa/dux/pac.p12

# Additional CA certificates to be added to the container cert store
# Give file names of the cert to be added. Multiple filenames can be given separated by comma - e.g., cert1.crt, cert2.crt
# The default directory where the certs are recommended to be present is:
#  - for linux: /opt/omnissa/dux/certs
#  - for Mac OS on Intel/AMD64: /usr/local/var/opt/omnissa/dux/certs/
#  - for Mac OS on Apple Silicon/ARM64: /opt/homebrew/var/opt/omnissa/dux/certs/
#  - for Windows: <path of dux installation directory>/certs/
# Absolute path of the cert can be given as well - /home/admin/proxy.crt 
ca_cert_files: 

# Command Permissions Configuration
# This section controls which operations require sudo privileges.
# Set no_sudo: true to run commands without sudo (requires appropriate user permissions)
# Set no_sudo: false to run commands with sudo (default for security)
  
permissions:
  # Docker commands (run, stop, logs, inspect, etc.)
  # no_sudo: false (default) = use sudo, no_sudo: true = don't use sudo
  
  docker:
    no_sudo: false

  # File operations (mkdir, cp, rm, chown, etc.)
  
  file_operations:
    no_sudo: false

  # System commands (systemctl, sysctl, ulimit, etc.)
  
  system:
    no_sudo: false

  # Network configuration (ip route, iptables, ifconfig, etc.)
  
  network:
    no_sudo: false