COPT浮动授权服务

COPT浮动授权服务器,COPT Floating Token Server,是一个由杉数求解器提供的,能对局域网 内用户提供临时授权的服务。服务器端程序可以在Windows、Linux和MacOS三大系统下运行。

如果COPT浮动授权服务器成功启动,根据许可文件上设定的Token数量,可以对本地装有同版本或者 适配低版本的杉数求解器,但未获得单机授权的用户进行临时授权。 用户求解结束后,可以通过释放COPT环境对象来返回Token给服务器。

服务器端安装说明

COPT浮动授权服务器对应的可执行文件是 copt_flserver。其启动时需要验证具有浮动类型的许可文件, 读取服务器运行所需的配置文件 fls.ini,以及在杉数授权服务器进行远程验证,例如验证浮动 授权服务器的IP符合注册时提供的IP范围。浮动版的许可文件的获取可以通过 copt_licgen 工具 和注册后得到的许可凭证,由杉数授权服务器远程自动生成。 详情描述如下或者参考前文 如何申请与配置许可文件

安装步骤

杉数提供的COPT远程服务安装包,包含了COPT浮动服务器端的程序。用户需先通过客服申请注册并获取 COPT远程服务安装包,然后可直接将安装包解压缩并放置于自定义路径下。过程属于绿色安装,无需配置环境变量, 具体安装步骤演示如下:

对于Windows用户

请使用ZIP解压软件将软件解压至任意目录,推荐软件解压缩到 C:\Program Files 目录下。

对于Linux用户

鼠标操作解压缩COPT远程服务安装包,或在终端上输入下述命令解压缩:

tar -xzf CardinalOptimizer-Remote-7.1.1-lnx64.tar.gz

解压缩后在当前目录下得到 copt_remote71 文件夹,用户可以将它移动到其它自定义路径下。 对于 root 用户我们推荐移动到 /opt 目录下,对于非 root 用户可以放在 $HOME 目录下。 即在终端下输入下述命令(以 root 用户为例)

sudo mv copt_remote71 /opt

注意,执行该命令需要 root 权限。

对于MacOS用户

鼠标操作解压缩COPT远程服务安装包,或在终端上输入下述命令解压缩:

tar -xzf CardinalOptimizer-Remote-7.1.1-universal_mac.tar.gz

解压缩后在当前目录下得到 copt_remote71 文件夹,用户可以将它移动到其它自定义路径下。 对于 root 用户我们推荐移动到 /Applications 目录下,对于非 root 用户可以放在 $HOME 目录下。 即在终端下输入下述命令(以 root 用户为例)

mv copt_remote71 /Applications

许可文件

在成功安装COPT远程服务包后,还需配置浮动许可文件。我们推荐把获得的许可文件 license.datlicense.key 放置在COPT远程服务安装路径下的 floating 目录。

下面讲解在不同系统下,如何通过 copt_licgen 工具和许可凭证信息 key 来获取许可文件。

注意

如果用户已经获取到 license.datlicense.key 这两个授权文档,则无需重复获取了。 可以跳过如下获取许可文件的步骤,直接参阅 配置文件

对于Windows用户

需要打开命令行工具,也就是 cmd 。假如COPT远程服务已安装在 "C:\Program Files" , 在命令行工具窗口输入如下命令后,进入COPT远程服务安装路径下的 floating 目录:

cd "C:\Program Files\copt_remote71\floating"

假如用户的许可凭证信息为 7483dff0863ffdae9fff697d3573e8bc , 因为生成许可文件的 copt_licgen 在COPT远程服务安装路径下的 tools 文件夹内, 则可以在命令行工具窗口输入下述命令获取杉数COPT的许可文件 license.datlicense.key

..\tools\copt_licgen -key 7483dff0863ffdae9fff697d3573e8bc

对于Linux和MacOS用户

假如COPT远程服务安装在 "/Applications" 目录下,在终端输入以下命令进入浮动授权服务端 目录(以MacOS系统为例):

cd /Applications/copt_remote71/floating

进入 floating 目录后,假如用户的许可凭证信息为 7483dff0863ffdae9fff697d3573e8bc , 则可以在终端输入下述命令获取杉数COPT的许可文件 license.datlicense.key

../tools/copt_licgen -key 7483dff0863ffdae9fff697d3573e8bc

特别地,如果用户不是在COPT远程服务安装路径下的 floating 目录下配置的许可文件,建议将 license.datlicense.key 两个许可文件移至此路径下。可手动将这两个文件放到 floating 目录下,也可以输 入下述命令移动这两个许可文件(以MacOS系统为例)。

mv license.* /Application/copt_remote71/floating

配置文件

COPT浮动授权服务器的配置文件 fls.ini 同样位于COPT远程服务安装路径下的 floating 目录。 内容如下面所示。

[Main]
Port=7979

[Licensing]
# if empty or default license name, it is from binary folder
# to get license files from cwd, add prefix "./"
# full path is supported as well
LicenseFile = license.dat
PubkeyFile = license.key

[Filter]
# default policy 0 indicates accepting all connections, except for ones in blacklist
# otherwise, denying all connections except for ones in whitelist
DefaultPolicy = 0
UseBlackList = true
UseWhiteList = true
FilterListFile = flsfilters.ini

这里,配置文件可以设置浮动授权服务器的端口,客户端需要连接这个端口才能通讯和获得授权。在下面 Licensing 部分,配置项设定许可文件的路径。就如上面注释描述的,空缺或者 默认的许可文件名表示COPT浮动授权服务器从可执行文件所在目录下读取许可文件。

如果用户在当前目录下启动服务器,并且许可文件也在当前目录下,通过修改 LicenseFile = ./license.datPubkeyFile = ./license.key,可以让COPT浮动 授权服务器从当前目录读取许可文件。

最后是 Filter 部分, DefaultPolicy 默认设为0,表示除了在黑名单里的用户, 其他均允许连接到本授权服务器;反之,除了在白名单中的用户,其他设备均无法连接到本授权服务器。 UseBlackListTrue 表示使用黑名单列表, UseWhiteListTrue 表示使用白名单列表。 FilterListFile 表示浮动授权服务器过滤配置文件名为 flsfilters.ini 。其格式举例如下:

[BlackList]
# 127.0.*.* + user@machine*

[WhiteList]
# 127.0.1.2/16 - user@machine*

[ToolList]
# only tool client at server side can access by default
127.0.0.1/32

BlackListWhiteList 表示可添加规则到黑名单以及白名单里。 规则的格式是以IP地址开头,这里IP可以用通配符匹配,或者固定位数的方式。 另外,IP地址后面还可以包括(+)或者排除(-)给定用户名和给定机器名。 其中用户名 user 是指 username ,MacOS/Linux系统用户可以在终端通过命令 whoami 来查询;机器名 machine 是指 hostname , MacOS/Linux系统用户可以在终端通过命令 hostname 来查询。 ToolList 是对工具使用者的访问限制,添加相关IP地址表示允许此远程机器访问。 需注意的是,配置文件 flsfilters.ini 更改之后,可使用 ResetFilters 命令 把当前的规则重置为过滤配置文档里的规则。也可使用 WriteFilters 命令 把当前的规则输出到过滤配置文档。

我们知道杉数求解器还允许客户通过环境变量 COPT_LICENSE_DIR 设置授权文档所在的路径。 详情可参考 如何安装杉数求解器。在这种情况下,需要修改 配置文件为完整的环境变量路径,COPT浮动授权服务器才能读取环境变量下的授权文档。

使用示例

如果合法的浮动许可文件安装在浮动授权服务器可执行文件所在的目录下,要启动COPT浮动授权 服务器,只需在Windows的命令行或者Linux和MacOS的终端中输入下述命令:

copt_flserver

若屏幕输出如下,则表示成功启动浮动授权服务器, 启动后会监视和管理客户端的授权申请。 如果用户输入字符 Q,则浮动授权服务器会关闭退出。

> copt_flserver
  [ Info] Floating Token Server, COPT v7.1.1 20240304
  [ Info] server started at port 7979

如果本地授权验证不通过,或者远程服务器连接错误,则可能出现如下输出。

> copt_flserver
  [ Info] Floating Token Server, COPT v7.1.1 20240304
  [Error] Invalid signature in public key file
  [Error] Fail to verify local license

> copt_flserver
  [ Info] Floating Token Server, COPT v7.1.1 20240304
  [Error] Error to connect license server
  [Error] Fail to verify floating license by server

客户端使用说明

浮动授权的客户端可以是COPT命令行交互工具,或者通过接口调用杉数求解器动态库的方式,比如Python接口。 如果客户没有获得单机许可,那么浮动许可是一种更灵活的替代方式。所有使用COPT的客户端都可以 通过浮动授权的方式合法使用杉数求解器。

安装和配置

首先用户需要确保已在客户端正确安装杉数求解器,详情可参考 如何安装杉数求解器。 成功安装COPT客户端后,用户不需要配置本地的许可文件,但需要配置COPT浮动授权客户端的配置文件 client.ini,如下表所示。

Host = 192.168.1.11
Port = 7979
QueueTime = 600

上述配置文件表示客户端会尝试和 192.168.1.11:7979 连接,且排队等待时间最多为600秒。 这里,如果 Host 或者 Floating 为空,则自动设为 localhostQueueTime 空缺则认为是0,即如果服务器的Token都已经被占用就不等待,直接错误退出。这里只有 Port 必须设置, 不能空缺,而且需和浮动授权服务器的配置文件里设的端口一致。注意客户端配置文件中的关键词是不区分大小写的。

使用浮动授权的前提是客户端首先发现了配置文件 client.ini,而不是本地许可文件。但和寻找本地 许可的途径一样,客户端会从当前目录,环境变量目录 COPT_LICENSE_DIR 和客户端可执行文件 所在目录,依次查看是否有浮动许可的配置文件 client.ini。所以,如果用户想使用浮动 授权,即使用户已经在环境目录下有了本地许可,用户还可以在当前目录(不同于环境目录)下,建立 配置文件 client.ini 来激活浮动授权。

如果是调用杉数求解器动态库方式,比如Python接口,在建模中创建COPT优化求解环境时,可以进入浮动 授权模式。只要当前目录下没有授权文档,但有配置好的 client.ini。建模中最后释放优化求解环境时, 会依据最后一个释放的环境对象来决定是否退出浮动授权模式,并通知服务器释放占用Token。

使用示例

假如用户在当前目录下设置了客户端配置文件 client.ini (同时没有本地授权许可), 下面以交互式命令行工具 copt_cmd 为例,演示如何使用浮动许可获得临时授权。首先 在Windows的命令行或者Linux和MacOS的终端中输入下述命令:

copt_cmd

若屏幕输出如下,则表示客户端成功获得临时浮动许可,可以使用COPT求解优化问题。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] initialize floating client: ./client.ini

  [ Info] connecting to server ...
  [ Info] connection established
COPT>

若屏幕输出如下,则表示客户端连接到浮动授权服务器,但由于Token数目有限,需要排队等待。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] Initialize floating client: ./client.ini

  [ Info] connecting to server ...
  [Error] empty license and queue size 1
  [ Info] Wait for license in  2 / 39 secs
  [ Info] Wait for license in  4 / 39 secs
  [ Info] Wait for license in  6 / 39 secs
  [ Info] Wait for license in  8 / 39 secs
  [ Info] Wait for license in 10 / 39 secs
  [ Info] Wait for license in 20 / 39 secs
  [ Info] Wait for license in 30 / 39 secs

若屏幕输出如下,则表示客户端连接到浮动授权服务器,客户拒绝排队等待。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] Initialize floating client: ./client.ini

  [ Info] connecting to server ...
  [Error] Server error: "no more token available", code = 2
  [Error] Fail to open: ./license.dat

  [Error] Fail to initialize cmdline

若屏幕输出如下,则表示客户端无法连接浮动授权服务器,超时后退出。

> copt_cmd
  Cardinal Optimizer v7.1.1. Build date Mar 04 2024
  Copyright Cardinal Operations 2024. All Rights Reserved

  [ Info] initialize floating client: ./client.ini

  [ Info] connecting to server ...
  [ Info] wait for license in  2 / 10 secs
  [ Info] wait for license in  4 / 10 secs
  [ Info] wait for license in  6 / 10 secs
  [ Info] wait for license in  8 / 10 secs
  [ Info] wait for license in 10 / 10 secs
  [Error] timeout at waiting for license
  [Error] fail to open: ./license.dat

  [Error] Fail to initialize cmdline

浮动授权服务器管理工具

COPT浮动授权服务器同时提供了一个对服务器端进行管理的工具 copt_flstool , 用来查看服务器的配置信息,并且具有在线修改的功能。

工具说明

在Windows的命令行或者Linux和MacOS的终端中输入下述命令:

> copt_flstool

屏幕输出如下:

> copt_flstool
  COPT Floating Token Server Managing Tool

  copt_flstool [-s server ip] [-p port] [-x passwd] command <param>

  commands are:   addblackrule <127.0.0.1/20[-user@machine]>
                  addwhiterule <127.0.*.*[+user@machine]>
                  getfilters
                  getinfo
                  resetfilters
                  setpasswd <xxx>
                  toggleblackrule <n-th>
                  togglewhiterule <n-th>
                  writefilters

上面是这个工具的使用格式说明。用户通过 -s-p 来设置目标服务器的IP地址和端口。 如果不写,则默认是本地服务器和端口7979。如果服务器设置了非空密码,那么需要通过 -x 来设置密码 后才能成功连接。

这个工具提供的命令包括:

  • AddBlackRule: 添加一个规则到黑名单里。规则的格式是以IP地址开头,这里IP可以用通配符匹配,或者固定位数的方式。 另外,IP地址后面还可以包括(+)或者排除(-)给定用户名和给定机器名。

  • AddWhiteRule: 添加一个规则到白名单里。白名单规则的格式和黑名单一样。

  • GetFilters: 获取当前所有规则,包括黑名单,白名单以及关于工具的。每个规则前面有个序号,用来作为命令 ToggleBlackRuleToggleWhiteRule 的参数。

  • GetInfo: 获取服务器的基本信息,包括Token占用数和总数,连接的客户,以及支持的COPT版本号。

  • ResetFilters: 把当前的规则重置为过滤配置文档里的规则。

  • SetPasswd: 动态更新当前服务器的连接密码。

  • ToggleBlackRule: 激活或者禁止一条黑名单规则,用从 GetFilters 获取的序列号作为参数。

  • ToggleWhiteRule: 激活或者禁止一条白名单规则,用从 GetFilters 获取的序列号作为参数。

  • WriteFilters: 把当前的规则输出到过滤配置文档。

使用示例

下面的命令列出了服务器为 192.168.1.11 的基本信息。

> copt_flstool GetInfo

[ Info] COPT Floating Token Server Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to localhost:7979
[ Info] [command] wait for connecting to floating token server
[ Info] [floating] general info
  # of available tokens is 3 / 3, queue size is 0
  # of active clients is 0

如果要在别的机器上使用工具来获取本服务器的信息,需在服务器的过滤配置文件 flsfilters.ini 中,将允许机器的IP地址加入到 TooList 部分。 下面我们以在允许的机器上获取服务器 192.128.1.11 的信息为例:

> copt_flstool -s 192.168.1.11 GetInfo

[ Info] COPT Floating Token Server Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to floating token server
[ Info] [floating] general info
  # of available tokens is 3 / 3, queue size is 0
  # of active clients is 0

下面的命令列出了服务器为192.168.1.11的所有过滤规则,包括黑名单,白名单以及关于工具的规则。

> copt_flstool -s 192.168.1.11 GetFilters

[ Info] COPT Floating Token Server Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to floating token server
[ Info] [floating] filters info
[BlackList]

[WhiteList]

[ToolList]
  [1]  127.0.0.1

下面的命令演示了把IP地址为 192.168.3.133 用户加入到黑名单中。

> copt_flstool -s 192.168.1.11 AddBlackRule 192.168.3.133

[ Info] COPT Floating Token Server Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to floating token server
[ Info] [floating] server added new black rule (succeeded)

此时 GetFilters 可得到本服务器的过滤规则,可以看到已经发生了改变。

> copt_flstool -s 192.168.1.11 GetFilters

[ Info] COPT Floating Token Server Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to floating token server
[ Info] [floating] filters info
[BlackList]
  [1] 192.168.3.133

[WhiteList]

[ToolList]
  [1]  127.0.0.1

下面的命令演示了切换黑名单规则,把 192.168.3.133 从黑名单中去掉。

> copt_flstool -s 192.168.1.11 ToggleBlackRule 1

[ Info] COPT Floating Token Server Managing Tool, COPT v7.1.1 20240304
[ Info] connecting to 192.168.1.11:7979
[ Info] [command] wait for connecting to floating token server
[ Info] [floating] server toggle black rule [1] (succeeded)

服务方式启动

以系统服务的方式启动浮动授权服务器,配置文件以 copt_flserver.service 为例,可通过查看 floating 文件夹下的 readme.txt 来进行配置和操作。 readme.txt 中显示如下,分别列出了Linux和MacOS系统下的操作方式:

[Linux] To run copt_flserver as a service with systemd

Add a systemd file
    copy copt_flserver.service to /lib/systemd/system/
    sudo systemctl daemon-reload

Enable new service
    sudo systemctl start copt_flserver.service
    or
    sudo systemctl enable copt_flserver.service

Restart service
    sudo systemctl restart copt_flserver.service

Stop service
    sudo systemctl stop copt_flserver.service
    or
    sudo systemctl disable copt_flserver.service

Verify service is running
    sudo systemctl status copt_flserver.service

[MacOS] To run copt_flserver as a service with launchctrl

Add a plist file
    copy copt_flserver.plist to /Library/LaunchAgents as current user
    or
    copy copt_flserver.plist to /Library/LaunchDaemons with the key 'UserName'

Enable new service
    sudo launchctl load -w /Library/LaunchAgents/copt_flserver.plist
    or
    sudo launchctl load -w /Library/LaunchDaemons/copt_flserver.plist

Stop service
    sudo launchctl unload -w /Library/LaunchAgents/copt_flserver.plist
    or
    sudo launchctl unload -w /Library/LaunchDaemons/copt_flserver.plist

Verify service is running
    sudo launchctl list shanshu.copt.flserver

Linux系统

下面以Linux系统为例,演示通过系统服务方式启动浮动授权服务器。打开终端,输入以下命令进入服务所在路径 (以COPT远程服务安装在 home 目录下的 eleven 路径为例)。

cd /home/eleven/copt_remote71/floating

通过任意文本文件打开系统服务的配置文件 copt_flserver.service ,内容如下所示:

[Unit]
Description=COPT Floating Token Server

[Service]
WorkingDirectory=/path/to/service
ExecStart=/path/to/service/copt_flserver
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

将路径修改为 copt_flserver 所在的实际路径,修改之后 copt_flserver.service 内容显示如下:

[Unit]
Description=COPT Floating Token Server

[Service]
WorkingDirectory=/home/eleven/copt_remote71/floating
ExecStart=/home/eleven/copt_remote71/floating/copt_flserver
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

copt_flserver.service 文件复制到 /lib/systemd/system/ 路径下,命令如下:

sudo cp copt_flserver.service /lib/systemd/system/

初次启动系统服务,需要更新系统配置(之后再启动时无需更新),命令如下:

sudo systemctl daemon-reload

启动系统服务,命令如下:

sudo systemctl start copt_flserver.service

输入如下命令来验证下系统服务是否在运行:

sudo systemctl status copt_flserver.service

输入之后显示如下,表示浮动授权服务器的系统服务已启动:

copt_flserver.service - COPT Floating Token Server
Loaded: loaded (/lib/systemd/system/copt_flserver.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-06-29 11:46:10 CST; 3s ago
Main PID: 3054 (copt_flserver)
    Tasks: 6 (limit: 4915)
CGroup: /system.slice/copt_flserver.service
        └─3054 /home/eleven/copt_remote71/floating/copt_flserver

eleven-ubuntu systemd[1]: Started COPT Floating Token Server.
eleven-ubuntu COPTCLS[3054]: LWS: 4.1.4-b2011a00, loglevel 1039
eleven-ubuntu COPTCLS[3054]: NET CLI SRV H1 H2 WS IPv6-absent
eleven-ubuntu COPTCLS[3054]: server started at port 7979

若要停止浮动授权服务器系统服务,则输入以下命令:

sudo systemctl stop copt_flserver.service

MacOS系统

下面以MacOS系统为例,演示通过系统服务方式启动浮动授权服务器。打开终端,输入以下命令进入服务所在路径 (以COPT远程服务安装在 /Applications 路径为例)。

cd /Applications/copt_remote71/floating

通过任意文本文件打开系统服务的配置文件 copt_flserver.plist ,内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>shanshu.copt.flserver</string>
        <key>Program</key>
        <string>/path/to/service/copt_flserver</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>

将路径修改为 copt_flserver 所在的实际路径,修改之后 copt_flserver.plist 内容显示如下:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>shanshu.copt.flserver</string>
        <key>Program</key>
        <string>/Applications/copt_remote71/floating/copt_flserver</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>

copt_flserver.plist 文件复制到 /Library/LaunchAgents 路径下,命令如下:

sudo cp copt_flserver.plist /Library/LaunchAgents

启动系统服务,命令如下:

sudo launchctl load -w /Library/LaunchAgents/copt_flserver.plist

输入如下命令来验证下系统服务是否在运行:

sudo launchctl list shanshu.copt.flserver

输入之后显示如下,表示浮动授权服务器的系统服务已启动:

{
    "LimitLoadToSessionType" = "System";
    "Label" = "shanshu.copt.flserver";
    "OnDemand" = false;
    "LastExitStatus" = 0;
    "PID" = 16406;
    "Program" = "/Applications/copt_remote71/floating/copt_flserver";
};

若要停止浮动授权服务器系统服务,则输入以下命令:

sudo launchctl unload -w /Library/LaunchAgents/copt_flserver.plist

若是需要指定此设备下的某一用户才有权限启动浮动授权服务器的系统服务,则需要将 UserName 添加到 copt_flserver.plist 中,以 UserNameeleven 为例,添加之后 copt_flserver.plist 内容显示如下:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>shanshu.copt.flserver</string>
        <key>Program</key>
        <string>/Applications/copt_remote71/floating/copt_flserver</string>
        <key>UserName</key>
        <string>eleven</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>

将添加 UserName 后的 copt_flserver.plist 文件复制到 /Library/LaunchDaemons 路径下,命令如下:

sudo cp copt_flserver.plist /Library/LaunchDaemons

启动系统服务,命令如下:

sudo launchctl load -w /Library/LaunchDaemons/copt_flserver.plist

若要停止浮动授权服务器系统服务,则输入以下命令:

sudo launchctl unload -w /Library/LaunchDaemons/copt_flserver.plist