所内で運用していた Matlab のライセンサーバーを最新に更新するためには、OS を上げる必要が生じたので、別途ライセンスサーバー用として Linux にて構築した

今まで CentOS6 上で Matlab 2019 までのライセンスサーバーを稼働していたが、現在の 2021b(まもなく 2020a)へ更新するには、システム要件が Red Hat 7.5 以上が必須要件となった。

現在の CentOS6 上で更新をダメ元で試してみたが、やはりライブラリ関連で無理でした。

OS の選定

Windows や Mac でもライセンスサーバーを起動出来るが、安定稼働するなら Linuxが良いだろうと、RedHat 系と Debian 系で悩みましたが、EOL が 2029 年までのAlmaLinux8 に決め、構築することにした

AlmaLinux8 の構築については、ほぼ CentOS8 構築と変わらないので、割愛

ちなみに、SELinux,Firewall,ipv6 無効、時刻同期設定は行なっている
また、root での起動は推奨されていないので、matlab ユーザーアカウントを作成した

Matlab ライセンスサーバー変更手順

基本的に、公式の手順通り進めていけば良い

  1. 新しいサーバーの HostID(MAC)を調べておく

  2. ライセンスセンターへログイン
    マイアカウントからソフトウェアのラベルを選ぶ
    インストールとアクティベーションから該当のラベルを選んで、アクティベーション停止をクリック

  3. 新たに HostID とラベルを入力し、インストール用のファイルインストレーションキー(FIK)およびライセンスファイル(license.lic)をダウンロード

  4. 新しいサーバーにインストール用 ISO ファイル及び、FIK と licence.lic を転送しておく

  5. 旧サーバーのライセンスサーバーを停止及び自動起動停止に設定する

    CentOS6なので、service flexnet stopとかchkconfig flexnet offとか

Matlab ライセンスサーバーインストール手順

非対話(Silent)モードでもインストールが可能かもしれないが、トラブル報告が多いので、無難に GUI の対話式でインストールを行なった

  1. インストール用の ISO をマウント
 sudo mount -t iso9660 -o loop R2021b_Linux.iso /mnt/matlab
  1. 保存先を/usr/local/MATLAB/にするので、MATLAB フォルダを書き込み可にしておく
  2. マウントした ISO ファイル内のインストーラーを起動
  3. サインインしないで、詳細オプションをクリック
  4. ライセンスマネージャーインストールを選択
  5. ライセンスファイル(license.lic)を読み込む
  6. 保存先を指定(/usr/local/MATLAB/R2021b)
    R2021b フォルダは自動で作成されるので、予め作成してはいけない
  7. インストール完了

起動テスト

インストールされたバイナリファイルは、/usr/local/MATLAB/R2021b/etc/glnxa64/内のファイルを実行するはずなのだが、lmuttil や lmgrd のどれもファイルがないとの謎のエラーが出る

 ./lmgrd
zsh: no such file or directory: ./lmgrd
$ file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped

どうやら、ld-lsb-x86-64.so.3 が原因らしく、 $ /lib64/ld-linux-x86-64.so.2 ./lmgrdとしたら起動した

あまりスマートな解決方法ではないかもしれないが、ライブラリを誤魔化す

$ sudo ln -s /lib64/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3

$ ldd lmgrd
	linux-vdso.so.1 (0x00007fffb0ffb000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f78d9522000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f78d91a0000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f78d8f88000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f78d8bc3000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f78d89bf000)
	/lib64/ld-lsb-x86-64.so.3 => /lib64/ld-linux-x86-64.so.2 (0x00007f78d9742000)

Systemd 用ファイル

インストール時に flexnet.boot.linux なる設定ファイルがあるものの、Systemd 用には対応していないので、自分で作成する必要がある

/etc/systemd/system/matlab.service を下記の内容で作成(ファイル名は任意)

  File: matlab.service
  [Unit]
  Description=MATLAB FlexLM license manager

  [Service]
  Type=forking
  ExecStart=/usr/local/MATLAB/R2021b/etc/lmstart
  ExecStop=/usr/local/MATLAB/R2021b/etc/lmdown
  KillMode=none
  Restart=on-failure
  RestartSec=90
  #
  User=matlab

  [Install]
  WantedBy=multi-user.target

起動・自動起動設定

$ sudo systemctl status matlab
● matlab.service - MATLAB FlexLM license manager
   Loaded: loaded (/etc/systemd/system/matlab.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-02-14 17:06:43 JST; 7min ago
  Process: 869 ExecStart=/usr/local/MATLAB/R2021b/etc/lmstart (code=exited, status=0/SUCCESS)
 Main PID: 1534 (lmboot)

Active: active(running)になっていなければ起動されているので、inactive になっていなかったら起動する

$ sudo systemctl start matlab

OS 立ち上げ時に自動で起動設定

$ sudo systemctl enable matlab

その他

  • /usr/local/MATLAB を読み込みモードに戻しておきましょう

  • lmstat や/var/tmp/lm_TMW.dat のログで通信しているか確認しておきましょう

  • firewall導入する場合は、デフォルトポートの 27000,27001 を通しておく

  • エンドユーザへ license.dat を配布する場合は、licence.dat 内の DAEMON 行を削除し、USE_SERVERに変えておきましょう

    (ちなみに、license.datはライセンスサーバー上の/usr/local/MATLAB/R201b/etcに作成されている)