お客様専用ページ > お客様専用FAQ

OS X 上のライセンスマネージャの動作に関する不具合

【OS X の FLEXlmライセンスマネージャ】 OS X 上でライセンスマネージャ(lmgrd) の動作に関して不具合が生じる場合がある。これは、OS X システムのホスト名の扱いや名前(アドレス)解決の方法が複数実装されていることに因る問題が絡んでおり、これらの問題を避けて簡単に解決する方法を説明する。
2013年1月初稿
© 株式会社ソフテック

Question

(症状)ライセンスマネージャが起動していないことにより、ユーザは、以下のようないくつかの現象に遭遇する。

  1. 最初は、ライセンスマネージャ(lmgrd)の起動が成功しコンパイル出来たが、突然、License Manager Problem のメッセージでコンパイル出来なくなった。
  2. システムがスリープ状態になった後、License Manager Problemによりコンパイラが使用できなくなった。
  3. コンパイラを使用する前の段階で問題が起きている場合もある。license.datをセットした後、ライセンスマネージャ(lmgrd)の起動を行ったが、そもそも lmgrd のプロセスが立ち上がらない。
Answer

この問題は、FLEXlmライセンスマネージャのプログラムである lmgrd プロセスが正常に起動していないための問題です。これは、OS X 上で引き起こる以下に挙げる原因で、ライセンスマネージャ・プロセスがリスタートできないことに因るものです。特に、10.8以降の Mountain Lion において顕著にこの症状が現れます。

  • (a) システム・スリープで lmgrd プロセスが停止することに因る
  • (b) ネットワーク接続性が切断されることに因る
  • (c) ネットワーク自動再構成時の(ホスト)名前解決方法が異なることに因る

ライセンスマネージャ lmgrd プロセスが常時、稼働していなければ、ユーザがコンパイル・コマンドを使用する時に、ライセンス使用許可を得ることができないため、結果的に License Manager Problem のメッセージを出してコンパイルができません。

この原因は上記の通り様々あるのですが、例えば、私が経験した障害は、今まで正常に動作していた OS X 10.7 (Lion) に設定していた /etc/hostsや DNS の設定等を含むネットワーク構成と同じものを 10.8 Mountain Lion に適用したら、ライセンスマネージャ lmgrd 自体が起動しないと言う現象に遭遇しました。このネットワーク構成は、WiFiポートに対して、「静的IPアドレス」と「ホスト名」を /etc/hosts に定義しさらに DNS にも登録済みの構成であり、一般的かつ正しい設定をしているものでした。この状態で、いつもの通り、PGIのライセンスマネージャを起動すると、license.dat 内に記されているホスト名とこの Mac OS が認識しているホスト名とが異なるため、lmgrd プロセスを起動できないと言うエラーが生じました。license.dat の中のホスト名を変更したり試行錯誤して、lmgrd は起動できたが、コンパイルを行うと License Manager Problem によりコンパイル出来ないと言ったことも生じました。この原因は、ライセンス管理を司る lmgrd ともう一つの pgroupd と言う PGI 用デーモンの内部通信ができないと言うものです。いずれにしても、OS X 内の「名前解決」に関する問題であることが分かりました。

この原因を詳細に探ると、ホスト名、IPアドレスの名前解決に用いられる方法、すなわち /etc/hosts や DNS、そしてアップル社の Bonjour(ボンジュール)等のメソッドが、システムのスリープ等によりネットワーク構成の自動変更が起きる度に切り替わり、OS が認識するホスト名が変化すると言うものでした(これが曲者でした)。具体的に言うと、アップル社の Bonjour(ボンジュール)は、DNS と同様、Name service の一つですが、Apple の世界ではローカルサブネット上の Mac コンピュータには必ず名前がつけられています。この名前付けの一般的なルールは、****.local と言うものです。この Bonjour のホスト・ネーミング(***.local) のサフィックスに必ず .local が付加されるため、これが /etc/hosts や DNS 上のホスト名と異なり、license.dat に記述されているホスト名と齟齬を起こします。Bonjourサービスは停止することは推奨されていないため、どうしても一般的な DNS サービスによるホスト名とBonjourサービスによるホスト名が共存した形で、ネームサービスを運用せざるを得ません。実は、これが FLEXlm ライセンスマネージャの運用においては問題となり、lmgrd プロセスの動作に問題が生じます。lmgrd プロセスは、Bonjour サービスから名前解決を行うことができないように作られています。これによって lmgrd が名前解決ができない状況が生まれます。以下の説明では、こうした環境であることを受け入れて、FLEXlm ライセンスマネージャの設定の仕方を変更することで、正常にライセンスマネージャを動作させる方法を説明します。

なお、今回の対応策とは関係しませんが、参考までに Bonjour用のローカルサブネット上のホスト名を設定する方法は、次の通りです。「システム環境設定」-「共有」の設定画面を開き、その画面の上位に「コンピュータ名」の定義の部分に「編集」するボタンがあります。この中で、***.localと言うホスト名を設定します。*** の部分はこのホスト名となります。例えば、/etc/hosts あるいは DNS の世界で、ある Mac を「macbook」というホスト名を定義したと仮定します。また、この Mac の Bonjour 用のホスト名は同じ名前の冠をつけたとしても名前は、「macbook.local」となります。

この問題を回避する方法を説明します。

  • (1) /etc/hosts(/private/etc/hosts)ファイルに自分のホスト名を定義しない。

     自分の対外的な「ホスト名」は、外部の DNS 上で定義しておくか、あるいは DHCP で割り当てます。以下に示す /etc/hosts(/private/etc/hosts)ファイルの中にはあえて明示的に定義しないようにします(これが災いをする)。一方、自身の IP アドレスの設定は、当該ネットワークインタフェース(有線 Ethernet あるいは WiFi 無線等)のネットワークの設定にて定義して構いません。これは「システム環境設定」の中の「ネットワーク」を選び、設定画面を出して、この中で当該ネットワークインタフェースの個々の設定を行いますす。ここで述べる対策法とは、ライセンスマネージャに認識させるホストを「localhost」とするものです。自身の「ホスト名」と「IPアドレス」は、ライセンスマネージャが認識するホスト名とさせないようにすることです。

    ● /etc/hosts (/private/etc/hosts の例)
    ##
    # Host Database
    #
    # localhost is used to configure the loopback interface
    # when the system is booting.  Do not change this entry.
    ##
    127.0.0.1       localhost
    255.255.255.255 broadcasthost
    ::1             localhost
    fe80::1%lo0     localhost
    #Don't specify IP addres myself! 自身のホスト情報は定義しない
    
  • (2) license.dat 内のホスト名の指定部分を localhost に変更する。

     ライセンスキーを取得する際に指定したホスト名を使用せず、127.0.0.1 で定義されているローカルループの一般的なホスト名 localhost を使用して定義します。具体的には、license.dat の 1 行目 SERVER 行に、本来、ライセンスキーを取得する際に指定したホスト名が記述されていますが、これを localhost に変更します。このような指定方法も 現 FLEXlm ライセンスマネージャのバージョンの仕様で認められております。

    ● /opt/pgi/license.dat の1行目の確認
    
    以下は、私のマシンの例です。
    
    bash-3.2# cat license.dat
    SERVER localhost 20c9d049244f 27000
    DAEMON pgroupd
    PACKAGE PGI2011-workstation-fortran pgroupd 2014.0213 7F31F6BD8AE2 \
    (snip)

以上のような変更を行い、システムの再起動を行うことで、正常に FLEXlm ライセンスマネージャ(lmgrd)が動作するはずです。lmgrd が正常に動作している場合は、以下の ps コマンドで3行のステータスが表示されます。もし、動作していない場合は、/opt/pgi/license.log に lmgrd の起動ログがありますので、このログの内容からエラーの原因を探しだすことができます。原因が掴めない場合は、/opt/pgi/license.logファイルを弊社まで送付いただきたいと思います。

macbook:~ kato$ ps ax |grep lmgrd
   99   ??  S      0:00.13 /opt/pgi/osx86/12.10/bin/lmgrd -c /opt/pgi/license.dat -l /opt/pgi/license.log
  100   ??  Ss     0:00.36 pgroupd -T localhost 11.10 5 -c /opt/pgi/license.dat --lmgrd_start 5100d24a
  656 s003  R+     0:00.00 grep lmgrd

ちなみに、lmgrd の起動を手動で行う場合は、root 権限で、以下のコマンドを実行します。

bash-3.2# sudo /Library/StartupItems/PGI/PGI start

今回の問題回避のためにホスト名を localhost として変更しましたが、当初 license key を取得する際の hostid と hostname の二つに関しては、従来通り以下のコマンドで出力される文字列を使用して結構です。

macbook:~ kato$ lmutil lmhostid
lmutil - Copyright (c) 1989-2011 Flexera Software, Inc. All Rights Reserved.
The FLEXnet host ID of this machine is "20c9d049244f" <=====これ

macbook:~ kato$ lmutil lmhostid -hostname
lmutil - Copyright (c) 1989-2011 Flexera Software, Inc. All Rights Reserved.
The FLEXnet host ID of this machine is "HOSTNAME=macbook.softek.co.jp" <===これ

ちなみに、この Mac のネットワークインタフェースの構成は、以下のようなものである。
en0 の MAC Address がライセンスキー取得のための hostid として使用している。
macbook:~ kato$ ifconfig
lo0: flags=8049 mtu 16384
        options=3
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
gif0: flags=8010 mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863 mtu 1500
        ether 20:c9:d0:49:24:4f
        inet6 fe80::22c9:d0ff:fe49:244f%en0 prefixlen 64 scopeid 0x4
        inet 172.16.1.100 netmask 0xffffff00 broadcast 172.16.1.255
        media: autoselect
        status: active
p2p0: flags=8843 mtu 2304
        ether 02:c9:d0:49:24:4f
        media: autoselect
        status: inactive