はじめに
Mac使いでMathematicaを使いたいが、ライセンスサーバーが学内にあるので学外からアクティベートできず使えない!
こんな経験がある方はこの記事を見れば解決します。(ただしVer.11以前のMathematicaでは成功していません。)
sshでDynamic Port Forwardingを飛ばしてしまえば解決するはずだったのですが、どうやらMathematicaはMacのネットワーク設定からsocksプロキシを設定しても見てくれないようです。。。
この現象によって筆者はずっと悩んでいましたが、tsocksというソフトを利用することによって解決しました。
(また、この記事はMacOSを標的としていますが、LinuxやWindows Subsystem for Linux(WSL)でも同様の手順で解決するはずです。
純正Windowsはtsocksが使えないのでもう少し工夫する必要がありそうです。)
環境
- MacOS Mojave 10.14.6
- Mathematica 12.0
※ Mathematica 11.1以前の32bit版を使用している方は後ろの方のMathematica 11.1で起動しない問題も参照してください。
Dynamic Port Forwarding
まず、Mathematicaのライセンスサーバーにpingが通る踏み台サーバーを用意し、
sshでDynamic Port Forwardingします。
Dynamic Port Forwardについての詳細な説明は省きます。
詳しくはググるか、sshによるポートフォワーディングまとめなどを参照してください。
$ ssh {ユーザー名}@{学内に置いてある踏み台サーバーIP} -D 10080
ここでは10080ポートを利用していますが、基本何でもいいです。ただし、小さい数字はすでに何かのサービスが専有している可能性があるので10000以上を指定するのが無難です。
本来はここまでやってsocksプロキシを設定すればよいのですが、今回は追加の手順が必要です。
tsocks
tsocksは任意のアプリケーションの通信を強制的にsocksプロキシ経由にするソフトです。
githubで公開されています。
homebrew版もありますが、上手く動かなかったのでソースからビルドします。
まず別のターミナルを開いて、ローカルにcloneします。(今回は~/opt
を作業ディレクトリとします。)
$ cd ~/opt
$ git clone https://github.com/pc/tsocks.git
あとはgithubで記された手順に従って作業しますが、/usr
にソフトをインストールすることは推奨されていませんし、SIPで保護されているので、/usr/local
以下にインストールするように変更します。
以下の手順を実行してください。
$ cd tsocks
$ autoconf
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
次に/usr/local/bin/tsocks
を以下のdiffのように修正します。
$ vi /usr/local/bin/tsocks
45c45
< LIBDIR="/lib"
---
> LIBDIR="/usr/local/lib"
さらにtsocks用の設定ファイルを作ります。
$ sudo vi /etc/tsocks.conf
$ cat /etc/tsocks.conf
server = 127.0.0.1
server_type = 5
server_port = 10080
ここでのserver_port
は先程ポートフォワーディングで設定したポートです(今回は10080)。
実際に起動する
以下で起動します。
$ tsocks /Applications/Mathematica.app/Contents/MacOS/Mathematica
これでsocksプロキシ経由でMathematicaを起動することができました。
毎回これを入力するのはめんどくさいので、エイリアスを設定しておくと良いです。
$ echo "alias math-socks='tsocks /Applications/Mathematica.app/Contents/MacOS/Mathematica'" >> ~/.bashrc
次回からは以下でsocksプロキシを経由して起動できます。
$ math-socks
あとは起動したMathematica上でいつものようにネットワークアクティベートすればOKです。
Mathematica 11.1で起動しない問題
同様の手順でMathematica 11.1を起動しようとすると、
$ tsocks /Applications/Mathematica.app/Contents/MacOS/Mathematica
dyld: could not load inserted library '/usr/local/lib/libtsocks.dylib' because no suitable image found. Did find:
/usr/local/lib/libtsocks.dylib: mach-o, but wrong architecture
/usr/local/lib/libtsocks.dylib: stat() failed with errno=1
[1] 66718 abort tsocks ./Mathematica
と怒られます。
これはVer.11以前のMathematicaが32bitアプリであるため発生している現象です。
これに対応するためにはtsocksを32bitでmakeする必要があると思われますが、、、勉強不足でやり方がよくわかりません。
どなたか教えて下さい。