お客様専用ページ > お客様専用FAQ
【OS X の FLEXlmライセンスマネージャ】 OS X 上でライセンスマネージャ(lmgrd) の動作に関して不具合が生じる場合がある。これは、OS X システムのホスト名の扱いや名前(アドレス)解決の方法が複数実装されていることに因る問題が絡んでおり、これらの問題を避けて簡単に解決する方法を説明する。
2013年1月初稿
© 株式会社ソフテック
(症状)ライセンスマネージャが起動していないことにより、ユーザは、以下のようないくつかの現象に遭遇する。
この問題は、FLEXlmライセンスマネージャのプログラムである lmgrd プロセスが正常に起動していないための問題です。これは、OS X 上で引き起こる以下に挙げる原因で、ライセンスマネージャ・プロセスがリスタートできないことに因るものです。特に、10.8以降の Mountain Lion において顕著にこの症状が現れます。
ライセンスマネージャ 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」となります。
この問題を回避する方法を説明します。
自分の対外的な「ホスト名」は、外部の 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! 自身のホスト情報は定義しない
ライセンスキーを取得する際に指定したホスト名を使用せず、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=8049mtu 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