Tweak License Server (tlm_server) 版本 2.6

注意:

当前仍支持通过 GTO 单机版或浮动许可文件许可 RV,但不再分发。有关详细信息,请访问有关永久使用许可维护服务合约 (maintenance plan) 的常见问题解答

目录

受众

许可服务器应由系统管理员或熟悉系统进程在平台上的工作方式的人员安装。

概述

Tweak License Server 能够管理从 Tweak Software 购买的任意数量的应用程序。如果客户端和服务器之间存在网络连接,并且存在与客户端软件匹配的有效许可,则服务器将向客户端授予运行所需应用程序的权限。管理许可计数、类型和功能的操作对于用户来说全都是透明的。Tweak License Server 通常作为系统服务运行,但也可以作为前台或后台进程显式运行。

建议的安装过程

下面提供了有关将 tlm_server 作为进程或服务进行安装的平台特定说明。但是,建议您首先按照以下步骤操作以使服务器正常工作:

  1. 通过将软件包解压缩到合适的目录来安装服务器(在 macOS 上,则是运行安装程序 - 请参见下文)。请注意,服务器必须在具有以下 MAC 地址(主机 ID)的计算机上运行:该 MAC 地址(主机 ID)与该服务器将为其提供服务的许可中的 MAC 地址(主机 ID)相对应。

  2. 从命令行运行 tlm_server,命令中使用 -fg 标志但不使用 -log 标志,例如:

     tlm_server -fg -f <my_license_file>.gto

    注意:在 Windows 上,必须使用 .exe 扩展名,否则 tlm_server 将无法运行。在 macOS 上,安装程序将 tlm_server 可执行文件放置在 /Applications/Utilities/tlm_server/bin 中。)

    您应该会看到类似如下的内容

    Tweak License Server
    Started: Fri Feb 26 15:17:41 2010
    tlm_server running on host 'myhost' port 5436
    Version: 2.6.0
    
    License 1: rvsolo 3.*.* :: 0 in use, 5 available, 5 total
    License 2: rvio 3.*.* :: 0 in use, 5 available, 5 total
  3. 运行 RV 或 RVIO 客户端并查看 tlm_server 的输出。应该会看到许可被批准 (APPROVED) 和释放 (RELEASED)。(在正常操作期间,可能还会看到一些许可被拒绝的情况,因为 RV 会首先尝试使用“最不理想”(即最便宜)的许可类型。)

    请注意,RV 需要知道如何联系许可服务器。如果是首次运行 RV,它将启动许可安装程序,您可以使用底部的 “Set License Server” 按钮。或者,您可以按照 客户端许可 部分中所述安装站点范围的客户端许可,也可以在每个计算机上安装客户端许可。

  4. 如果一切正常,则终止正在运行的服务器 (ctrl-C),并以进程方式(在后台)启动新服务器,以及记录日志:

     tlm_server -f <my_license_file>.gto -log <my_log_file>

    注意:在 Windows 上,必须使用 .exe 扩展名,否则 tlm_server 将无法运行。)

    服务器进程将输出 Running in background ...,然后您可以关闭您在其中启动 tlm_server 的终端。

  5. 此时,服务器完全正常运行,您只需定期检查 tlm_server 日志文件,确保一切符合预期。但最终,您可能希望安装服务器,以便在服务器计算机重新启动时它会自动启动。由于此过程与平台密切相关,请参考以下相应部分。

Linux 服务安装

注意:下文提到的 service 命令常用于衍生自 RedHat 或 Fedora 的 Linux dist(例如 CentOS)。在 Debian 或 Ubuntu 等其他系统上,您可能需要安装 sysvconfig 软件包。
  1. 编辑/查看安装脚本 (install_tlmserver)。应编辑(或仅检查)该安装,以确保其适合您的 Linux 系统。默认情况下,它将安装一个脚本,该脚本将许可服务器二进制文件作为系统服务进行调用。如果未在 /usr/local/tweak 中安装该软件包,则需要更改文件顶部的变量。
  2. 编辑/查看 start_tlmserver_init.sh 脚本。检查下文的命令行参数,并确保启动脚本指向正确位置(例如许可文件所在位置)。请注意,如果在 init 目录中安装此脚本时对其进行重命名,请确保名称中不包含字符串“tlm_server”,因为如果有任何其他名称中包含“tlm_server”的进程在运行,tlm_server 将拒绝运行。
  3. 运行安装程序脚本(或手动安装)。应从脚本所在的目录运行脚本。
  4. 启动服务器。使用 service 命令启动服务器,例如“service start_tlmserver start”,如果您未使用服务接口,则使用“/etc/init.d/start_tlmserver start”。
  5. 重新启动时,服务器应会自动启动。

我们内部是在 Ubuntu 8.04 上测试许可服务器。在其他版本的 Linux 上,tlm_server 可能可以运行。如果您未运行 Debian 或 Red Hat 衍生分发版本,我们可以与您合作来安装。

Linux 上的网络超时

如果 RV 由于某种原因而退出,应立即释放许可。如果服务器与运行 RV 的计算机失去联系(例如,如果连接到该计算机的网络服务已中断),则连接将超时,并且将在 2-3 分钟后释放许可。

macOS 服务安装

macOS 安装程序将服务器二进制文件安装到 /Applications/Utilities/tlm_server 中并在 /Library/StartupItems 中创建启动项。服务器必须在以下位置之一中找到有效的许可文件,才能成功批准来自应用程序的许可请求:

/Applications/Utilities/tlm_server/etc/license.gto
/Library/Application Support/RV/license.gto
/Library/Application Support/TLM/license.gto
/var/tweak/license.gto

因此,在首次安装期间,建议您先完成上文所述的“建议的安装过程”。要运行上文的命令行示例,请使用 /Applications/Utilities/tlm_server/bin/tlm_server 中的服务器可执行文件。

确认服务器按预期工作后,在上面的位置之一中安装许可文件,然后重新启动服务器,例如:

 sudo /Library/StartupItems/TLMServer/TLMServer start

服务器运行后,ps 将显示类似如下的命令行:

 tlm_server -f /Applications/Utilities/tlm_server/etc/license.gto -log /var/log/tlm_server.log

并且,您可以在日志文件 /var/log/tlm_server.log 中监视许可服务器的行为。

macOS 上的网络超时

如果 RV 由于某种原因而退出,应立即释放许可。如果服务器与运行 RV 的计算机失去联系(例如,如果连接到该计算机的网络服务已中断),则连接将超时,并且将在由某些系统级别设置确定的时间长度后释放许可。要检查这些设置,请运行以下命令:

% sysctl -A |& grep net.inet.tcpkeep
net.inet.tcp.keepidle: 7200000
net.inet.tcp.keepintvl: 75000

此处显示的值是一些典型值,使用这些值时,将在大约 130 分钟后释放许可。这应该适用于许多情况,但如果您希望更快释放许可,可以运行以下命令:

sudo sysctl -w net.inet.tcp.keepidle=60000
sudo sysctl -w net.inet.tcp.keepintvl=60000

这样,将在大约 10 分钟后发生超时并释放许可。在下次系统重新启动时将重置这些数字。要永久保存这些数字,请将以下行添加到文件 /etc/sysctl.conf 中。

net.inet.tcp.keepidle=60000
net.inet.tcp.keepintvl=60000

Windows 服务安装

安装服务器并确认其按预期工作后,您可能希望从 tlm_server 可执行文件创建 Windows 服务。

我们建议在所有版本的 Windows 上都使用 Ian Patterson 的“Non-Sucking Service Manager”(可从此处获取)。

步骤如下(以管理员身份操作):

  1. 将 tlm_server zip 文件解压缩到某处(在以下内容中为 c:\Program Files (x86)\tlm_server-win32-x86-2.6.0

  2. 下载 NSSM 并将其安装到某处(在以下内容中为 c:\nssm-2-5

  3. 创建服务:

    c:\nssm-2.5\win64\nssm.exe install TLM "c:\Program Files (x86)\tlm_server-win32-x86-2.6.0\bin\tlm_server.exe"
    "-log \"c:\Program Files (x86)\tlm_server-win32-x86-2.6.0\tlm_server.log\" -f \"c:\Program Files (x86)\tlm_server-win32-x86-2.6.0\etc\license.gto\""

    应该会看到“Service TLM installed successfully!”。请注意:

    • 必须在一行上键入上文整个命令。
    • 如果路径中包含空格,需要使用双引号,并且还需要使用转义的双引号
    • 别忘了将路径替换为您的实际日志文件许可文件的路径。
    • 上文的 -log 选项的参数是文件,而不是目录。如果此文件不存在,系统将会创建。
  4. 现在,您可以使用 Windows 管理工具“服务”显式启动该服务,或者只是重新启动。

如果出现任何问题,并且需要卸载该服务,您可以:

  1. 使用 Windows 管理工具“服务”停止该服务。

  2. 使用 NSSM 移除该服务:

    c:\nssm-2.5\win64\nssm.exe remove TLM confirm

Windows 上的网络超时

如果 RV 由于某种原因而退出,应立即释放许可。如果服务器与运行 RV 的计算机失去联系(例如,如果连接到该计算机的网络服务已中断),则连接将超时,并且将在 2-3 分钟后释放许可。

获取许可文件

Tweak License Server 需要 Tweak Software 生成的许可文件才能运行。许可将与运行服务器的计算机的主机 ID 匹配。获取许可的过程如下:

  1. 查找本地硬件 ID(MAC 地址)。可以通过多种方法获取要托管 Tweak License Server 的计算机的硬件地址。许可服务器软件包中包含一个名为 tlm_hostid 的程序,该程序可列出有效的硬件 ID。最佳选择是来自系统组件(例如用于 et0 的板载 NIC)的 ID。在 Linux 计算机上,与计算机网卡 (eth0) 参数一起传递的命令 /sbin/ifconfig 将生成硬件地址。在 macOS 上,也可以使用 ifconfig,或者您可以使用“网络偏好设置”查找_以太网 ID_。硬件 ID 应类似如下:00:E0:81:25:C8:82。

    请注意,在许多系统上,由于存在多个网络接口,因此将有多个 ID。在这些情况下,其中任何一个都可以。

  2. 通过电子邮件将硬件 ID 发送给 Tweak。

  3. 安装许可文件。Tweak 许可文件可以位于许可服务器主机可以访问的任意位置。最简单的做法是将其放置在同一目录中。

命令行参数

-f

本地许可文件的路径。这可以是相对于 Tweak License Server 安装目录的路径,但绝对路径最安全。

-log

许可服务器日志文件的路径。许可服务器可以维护其所有活动的日志。将文件名传递到此参数就可以在主机计算机本地存储信息。如果未指定 -log 选项,服务器将输出到标准输出设备。

-fg

在前台运行服务器。如果未指定此参数,服务器将作为进程或服务运行。

-s

显示当前正在运行的服务器的状态。列出正在运行的服务器的版本/编译信息,并列出当前已检出许可的每个用户。要从远程计算机获取状态,需要提供 -h-p 选项。进程将联系其他服务器,并获取可用许可的列表以及当前正在使用这些许可的用户。如果许可具有到期日期和维护到期日期,状态信息还包含这些日期。

-q

联系正在运行的许可服务器并请求其关闭。要关闭远程服务器,需要提供 -h-p 选项以及 -q 选项。

-h

指定将从其运行服务器的主机。此项默认为本地主机,并且仅在极少数情况下才会更改。还可与 -s-q 选项一起使用,以联系远程服务器。

-p

指定本地服务器将侦听传入许可请求的端口。此项默认为端口 5436。使用 -s-q 选项时需要此项。请注意,在 Windows 上,端口只能是 5436。

-help

输出命令行帮助。

-version

显示版本。

客户端许可

如上文所述,Tweak License Server 要求在本地安装许可文件。客户端进程(RV、RVIO 等)都需要自己的指向服务器的许可文件。此文件可以存储在网络上安装软件包的位置(所有客户端一个文件副本),也可以存储在每台计算机本地(每台计算机一个副本),应类似于如下:

GTOa (3)

server: ServerLicense (1)
{
    id
    {
        string hostname = "servername"
        int port = 5436
    }
}

hostname 字段是运行许可服务器的计算机的地址。port 字段应与在主机上运行许可服务器时指定的端口匹配。

多个服务器和备用服务器

如果有多组许可(例如,有两个许可,每个许可允许检出 10 个副本),您可能想在不同的服务器上运行它们。要在客户端文件中指定多台服务器,请添加以下内容:

GTOa (3)

server1: ServerLicense (1)
{
    id
    {
        string hostname = "servername1"
        int port = 5436
    }
}

server2: ServerLicense (1)
{
    id
    {
        string hostname = "servername2"
        int port = 5436
    }
}

如果第一台服务器不可用或没有剩余任何许可,客户端将尝试联系第二台服务器以获取许可。

获取状态

可以通过使用 -s 选项运行 tlm_server 的另一个副本,获取远程计算机(或本地计算机)上正在运行的许可服务器的状态:

shell> tlm_server -s -h hostmachine -p portnum
asking for status, hostmachine, portnum

RESPONSE: tlm_server running on host 'hostmachine' port portnum
Version: 2.6.0

License 1: rv *.*.* :: 1 in use, 0 available, 1 total, maint expires Sat Jun 16 12:13:00 2010
     -> alan@127.0.0.1 checked out at Sat Feb 27 16:15:40 2010

对于每个许可,状态信息包括当前已检出许可的用户、可用座席数、许可的到期日期和维护到期日期(如果适用)。

限制/疑难解答

有一些限制会导致服务器无法运行或无法为特定许可提供服务:

服务器运行并至少托管一个有效许可后,如果在获取许可时遇到问题,请检查服务器日志输出。服务器将在日志输出中为每个拒绝的许可请求提供原因。请注意,正确设置的许可服务器的日志中仍会有许多 REJECTED 说明,因为 Tweak 应用将首先尝试获取“最不理想”(最便宜)的许可类型。

可能会在日志中看到的拒绝许可请求的原因包括:

Package Name Mis-Match

最常见的原因是,Tweak Software 要求提供多个软件包,以期先使用最不理想的许可。

Version Mis-Match

此请求针对的是此许可不支持的软件包版本。

Maintenance Expired

请求许可的软件包的编译日期超过许可的维护到期日期(在许可文件中此日期标有 updatesUntil)。

Start Date Not Reached

许可可能有 startDate 字段,在该日期之前无法使用这些许可。

License Count Exceeded

如果批准此许可请求,并发用户数将会超出此许可允许的限制(由许可文件中的 count 字段指示)。

如果要使许可管理器完全不受限制,并直接从 RV 或 RVIO 使用给定许可,可以通过正确命名许可并将其放置在正确的目录中来手动安装许可:

手动安装许可

您可以在所有操作系统上手动安装许可。将许可文件重命名为“license.gto”,并将其放置在正确的目录中。在 Linux 和 Windows 上,主 RV 目录(安装 RV 的任何位置)下有一个名为 etc 的目录。您可以将 license.gto 文件复制到该目录中。在 Mac 上,许可文件存储在以下目录中:/Library/Application Support/RV

Tweak 许可文件剖析

一个许可文件可以包含任意数量的许可。服务器将检查所有这些许可,以确定哪些许可可以满足传入请求,以及当前检出的许可是否可用于满足请求,而无需使用其他许可。

如果文件中有多个许可可以满足请求,则使用的许可将是文件中最新的许可,因此您可以为文件中的许可排序以确定使用顺序。

 GTOa (3)

048340189d06b475b271bd090dce56fd77827c7e: License (2) # License Name: File Version
{
    license
    {
        string package =  "rv"                  # Name of licensed software package
        string version =  "3.4.*"               # Version licensed
        string expires =  "29-Apr-2008"         # Expiration date, can be "permanent"
        string updatesUntil =  "25-Apr-2008"    # Expiration date for update rights
        int count =  1                          # Number of seats licensed
        string hostID =  "00:17:F2:CA:09:1A"    # Host ID
        string issued =  "15-Apr-2008"          # Issue date
        string reason =  "eval"                 # Reason for license
        string licensee =  "Facility Name"      # Optional field
        string email =  "contact@facility.com"  # Optional field
        string machine =  "servername"          # Optional field
        string os =  "any"                      # Operating System licensed
        string card =  "cardname"               # Optional field
    }
}

a79302764e96c74e0064d6a652000a54288e5abd: License (2)
{
    license
    {
        string replaces =  "048340189d06b475b271bd090dce56fd77827c7e"
                                                # License superseded by this one.
                                                # Replaced license must be present
                                                # in the file or tlm_server will fail
        string package =  "rv"
        string version =  "3.4.*"
        string expires =  "permanent"
        string updatesUntil =  "25-Apr-2009"
        int count =  1
        string hostID =  "00:17:F2:CA:09:1A"
        string issued =  "25-Apr-2008"
        string reason =  "commercial"
        string licensee =  "Facility Name"
        string email =  "contact@facility.com"
        string machine =  "servername"
        string os =  "any"
        string card =  "cardname"
    }
}