FreeBSD QandA 1247

FreeBSD QandA

Q. Linux(x86) 版の MATLAB を FreeBSD で使えますか?
   (keyword: MATLAB, Linux, emulation)

A. 使えます。もちろんライセンスの問題はこれとは別に解決する必要があります。
   FreeBSD 2.2.8-STABLE での例を紹介します。これ以外方法や、他の動作環境
   での実績があれば QandA に報告して追加・修正して下さい。

   [概略]

   適当な Linux マシンに Linux(x86) 用の MATLAB をインストールし、その
   ディレクトリを FreeBSD マシンが NFS マウントします。FreeBSD では、linux
   エミュレーション機能によってこのディレクトリ中の MATLAB を実行します。
   (試した環境は、FreeBSD が 2.2.8-STABLE、MATLAB が 5.2.1 で Linux
   (Debian 2.2) マシンにインストールされ、ネットワークフローティングの
   ライセンスは Solaris 2.6 が管理しているという環境です)

   [手順]

   Step 0.(適当なマシンに MATLAB をインストールし NFS export する)
      ・NFS サーバとなる Linux マシンに、Linux(x86) 版のバイナリを含めて
        MATLAB をインストールし、少なくともそのマシンで使えるようにします。
      ・MATLAB をインストールしたディレクトリ (例えば /usr/local/matlab と
        します) を、FreeBSD マシンに対して NFS export します。

   Step 1.(FreeBSD マシンで linux エミュレーション機能を有効にする)
      ・linux_lib-2.6.1 を packages/ports からインストールします。ただし、
        FreeBSD 3.3-RELEASE から linux_lib は linux_base に置き換えられた
        ため、この QandA の手順では動作しないかもしれません。
      ・linux(8) エミュレータ・カーネルモジュールをロードします。また、
        rc.conf(5) で linux_enable=YES とすればブート時に自動的に実行します。

   Step 2.(MATLAB の linux(x86) 版のあるディレクトリをマウントする)
      ・上記の例に従って、mount -t nfs server:/usr/local/matlab /matlab 
        とし、ls /matlab で bin や etc 等中身が見えるようにします。server 
        は Linux マシンのホスト名、/matlab は予め mkdir しておきます。また、
        fstab(5) に書いておくか amd(8) などを併用すれば便利でしょう。

   Step 3.(FreeBSD マシンに必要な linux のライブラリを追加する)
      ・MATLAB の動作に不足している linux のライブラリを、/compat/linux/lib
        に追加します。/compat/linux/usr/bin/ldd /matlab/bin/* などと実行し、
        見付からないライブラリを MATLAB をインストールした Linux 側の /lib 
        からコピーすれば良いでしょう。
        (ld-linux* は特に重要そうなのだが、取捨選択が私には難しい。そこで
         Linux 側の /lib を全部コピーした。linux_lib が上書きされるし、必要
         以上にコピーするので乱暴かも知れないが、私の場合はこれで動作した。
         現状は[付録]のようになっている)
      ・ライブラリを追加したら /compat/linux/sbin/ldconfig を実行します。

   Step 4.(MATLAB を実行する)
      ・例えば、/matlab/bin/matlab -lnx86 によって、MATLAB を使用できます。
        更にライブラリが不足しているようなら Step 3.を繰り返します。

   [使用感]

   少なくとも DEMO は全て実行できます。
   音も出ます。(sb なサウンドドライバで確認)

   [付録]

   % ls -il /compat/linux/lib
   total 6031
      749 -rwxr-xr-x  1 root  wheel    45017 Feb 21 14:37 ld-2.0.7.so*
      747 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 ld-linux.so.1@ -> ld-linux.so.1.9.10
      124 -rwxr-xr-x  1 root  wheel    21367 Oct 26  1996 ld-linux.so.1.7.14*
      773 -rwxr-xr-x  1 root  wheel    24396 Jan 14 12:23 ld-linux.so.1.9.10*
      141 lrwxrwxrwx  1 root  wheel       11 Mar  9 19:10 ld-linux.so.2@ -> ld-2.0.7.so
      736 -rwxr-xr-x  2 root  wheel    99488 Jan 14 12:23 ld.so*
      125 -rwxr-xr-x  1 root  wheel    24580 Oct 26  1996 ld.so.1.7.14*
      736 -rwxr-xr-x  2 root  wheel    99488 Jan 14 12:23 ld.so.1.9.10*
      750 -rw-r--r--  1 root  wheel     2768 Feb 21 14:37 libBrokenLocale-2.0.7.so
      142 lrwxrwxrwx  1 root  wheel       24 Mar  9 19:10 libBrokenLocale.so.1@ -> libBrokenLocale-2.0.7.so
      751 -rw-r--r--  1 root  wheel   651436 Feb 21 14:37 libc-2.0.7.so
      134 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libc.so.5@ -> libc.so.5.4.46
      128 -rwxr-xr-x  1 root  wheel   705995 Oct 26  1996 libc.so.5.3.12*
      139 -rwxr-xr-x  1 root  wheel  1861963 Apr 11  1997 libc.so.5.4.23*
      819 -rw-r--r--  1 root  wheel   586732 Mar  9 11:46 libc.so.5.4.46
      143 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:10 libc.so.6@ -> libc-2.0.7.so
      724 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libcom_err.so.2@ -> libcom_err.so.2.0
      117 -rw-r--r--  1 root  wheel     4100 Feb 11 08:13 libcom_err.so.2.0
      752 -rw-r--r--  1 root  wheel   150380 Feb 21 14:37 libcrypt-2.0.7.so
      144 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libcrypt.so.1@ -> libcrypt-2.0.7.so
      753 -rw-r--r--  1 root  wheel    55588 Feb 21 14:37 libdb-2.0.7.so
      145 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libdb.so.2@ -> libdb-2.0.7.so
      754 -rw-r--r--  1 root  wheel     6612 Feb 21 14:37 libdl-2.0.7.so
      126 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:09 libdl.so@ -> libdl.so.1.7.14
      135 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:10 libdl.so.1@ -> libdl.so.1.9.10
      127 -rwxr-xr-x  1 root  wheel     6983 Oct 26  1996 libdl.so.1.7.14*
      816 -rwxr-xr-x  1 root  wheel     5660 Jan 14 12:23 libdl.so.1.9.10*
      146 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libdl.so.2@ -> libdl-2.0.7.so
      735 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:10 libe2p.so.2@ -> libe2p.so.2.3
      733 -rw-r--r--  1 root  wheel     8820 Feb 11 08:13 libe2p.so.2.3
      732 lrwxrwxrwx  1 root  wheel       16 Mar  9 19:10 libext2fs.so.2@ -> libext2fs.so.2.4
      728 -rw-r--r--  1 root  wheel    68524 Feb 11 08:13 libext2fs.so.2.4
      136 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:09 libfbm.so@ -> libfbm.so.1.0.0
      132 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:09 libfbm.so.1@ -> libfbm.so.1.0.0
      130 -rwxr-xr-x  1 root  wheel    72053 Oct 26  1996 libfbm.so.1.0.0*
      755 -rw-r--r--  1 root  wheel   104192 Feb 21 14:37 libm-2.0.7.so
      133 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:09 libm.so.5@ -> libm.so.5.0.8
      129 -rwxr-xr-x  1 root  wheel    36084 Oct 26  1996 libm.so.5.0.6*
      138 -rwxr-xr-x  1 root  wheel    76697 Apr 11  1997 libm.so.5.0.8*
      157 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:10 libm.so.6@ -> libm-2.0.7.so
      746 -rw-r--r--  1 root  wheel   242644 Oct 30 22:57 libncurses.so.3.4
      741 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libncurses.so.4@ -> libncurses.so.4.2
      738 -rw-r--r--  1 root  wheel   240572 Dec  4 00:28 libncurses.so.4.2
      756 -rw-r--r--  1 root  wheel    19044 Feb 21 14:37 libnsl-2.0.7.so
      158 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:10 libnsl.so.1@ -> libnsl-2.0.7.so
      757 -rw-r--r--  1 root  wheel    24660 Feb 21 14:37 libnss_compat-2.0.7.so
      159 lrwxrwxrwx  1 root  wheel       22 Mar  9 19:10 libnss_compat.so.1@ -> libnss_compat-2.0.7.so
      758 -rw-r--r--  1 root  wheel    18096 Feb 21 14:37 libnss_db-2.0.7.so
      160 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 libnss_db.so.1@ -> libnss_db-2.0.7.so
      759 -rw-r--r--  1 root  wheel     9976 Feb 21 14:37 libnss_dns-2.0.7.so
      161 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:10 libnss_dns.so.1@ -> libnss_dns-2.0.7.so
      760 -rw-r--r--  1 root  wheel    30204 Feb 21 14:37 libnss_files-2.0.7.so
      162 lrwxrwxrwx  1 root  wheel       21 Mar  9 19:10 libnss_files.so.1@ -> libnss_files-2.0.7.so
      761 -rw-r--r--  1 root  wheel    32092 Feb 21 14:37 libnss_nis-2.0.7.so
      163 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:10 libnss_nis.so.1@ -> libnss_nis-2.0.7.so
      830 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libpam.so.0@ -> libpam.so.0.66
      766 -rw-r--r--  1 root  wheel    96472 Feb 25 04:28 libpam.so.0.66
      826 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:10 libpam_misc.so.0@ -> libpam_misc.so.0.66
      814 -rw-r--r--  1 root  wheel     5516 Feb 25 04:28 libpam_misc.so.0.66
      748 -rw-r--r--  1 root  wheel    31708 Feb 10 12:38 libproc.so.1.9.0
      764 -rw-r--r--  1 root  wheel    49524 Feb 21 14:37 libpthread-0.7.so
      164 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libpthread.so.0@ -> libpthread-0.7.so
      743 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 libreadline.so.2@ -> libreadline.so.2.1
      742 -rw-r--r--  1 root  wheel   176320 Feb 17 17:56 libreadline.so.2.1
      762 -rw-r--r--  1 root  wheel    45104 Feb 21 14:37 libresolv-2.0.7.so
      165 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 libresolv.so.2@ -> libresolv-2.0.7.so
      745 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libslang.so.1@ -> libslang.so.1.2.2
      744 -rw-r--r--  1 root  wheel   226916 Oct 16 16:58 libslang.so.1.2.2
      727 lrwxrwxrwx  1 root  wheel       12 Mar  9 19:10 libss.so.2@ -> libss.so.2.0
      726 -rw-r--r--  1 root  wheel    13972 Feb 11 08:13 libss.so.2.0
      131 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:09 libtermcap.so.2@ -> libtermcap.so.2.0.8
      137 -rwxr-xr-x  1 root  wheel    11925 Oct 26  1996 libtermcap.so.2.0.8*
      763 -rw-r--r--  1 root  wheel     6692 Feb 21 14:37 libutil-2.0.7.so
      140 lrwxrwxrwx  1 root  wheel       16 Mar  9 19:10 libutil.so.1@ -> libutil-2.0.7.so
      737 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libuuid.so.1@ -> libuuid.so.1.2
      833 -rw-r--r--  1 root  wheel     5700 Feb 11 08:13 libuuid.so.1.2
   484567 drwxr-xr-x  2 root  wheel     1024 Mar  8 14:24 security/

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。