Contents
Things needed
the latest stable NetBSD/i386 installation. The archivers/{zip,unzip} packages. The linux emulation packages suse_base and suse_compat.
If you want to run binary modules (MEX), you also need the suse_devel-7.3 package; that is not (yet?) available as suse9.x version. Matlab 14.3 ships with a JDK 1.5 which runs nicely on netbsd-3, so no additional JRE needed. The three Matlab 7 / R14 Unix installation CDROMs. The patches listed below. A few GBytes of diskspace.
Work to do
A Short Cut
While the following steps are kept for documentation and your own experiments, there is a tar-ball available with the patches and a shell script to apply them.
Unpack, change to the patch_matlabcd directory, call sh patch-matlab.sh -m /path/to/cdcontent, optionally add '-v' for verbose output.
Footwork
- Copy the three CDROMs to the harddisk (directories CD1, CD2, CD3).
- mount_union(8) a scratch directory on top of the directory that contains CD[123]. This scratch directory will contain all the changes that you make to the content of the CDs.
- chdir to CD1
- Apply the patch
--- /u/software/payware/unix/matlab-r14/CD1/install 2004-09-13 14:56:28.000000000 +0200
+++ install 2004-09-14 11:04:26.000000000 +0200
@@ -516,6 +516,19 @@
Darwin) # Mac OS X
ARCH="mac"
;;
+ NetBSD) # NetBSD (Linux emul)
+ case "`/usr/bin/uname -m`" in
+ i*86)
+ ARCH="glnx86"
+ ;;
+ ia64)
+ ARCH="glnxi64"
+ ;;
+ x86_64)
+ ARCH="glnxa64"
+ ;;
+ esac
+ ;;
esac
fi
return 0
@@ -730,6 +743,19 @@
Darwin) # Mac OS X
ver=`/usr/bin/uname -r | awk '{print $1}'`
;;
+ NetBSD) # NetBSD (Linux emul)
+ case $Arch in
+ glnx86)
+ ver=`/emul/linux/lib/libc.so.6 | head -1 | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"`
+ ;;
+ glnxi64)
+ ver=2.2.4
+ ;;
+ glnxa64)
+ ver=`/emul/linux/lib64/libc.so.6 | head -1 | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"`
+ ;;
+ esac
+ ;;
esac
fi
#
to the ./install script (assuming /emul/linux is a symlink to the root of the linux emulation setup). Apply equally to CD2 and CD3. Apply the patch
--- /u/software/payware/unix/matlab-r14/CD1/update/install/arch.sh 2004-09-13 14:54:55.000000000 +0200
+++ update/install/arch.sh 2004-09-14 11:38:19.000000000 +0200
@@ -185,6 +185,19 @@
Darwin) # Mac OS X
ARCH="mac"
;;
+ NetBSD) # NetBSD (Linux emul)
+ case "`/usr/bin/uname -m`" in
+ i*86)
+ ARCH="glnx86"
+ ;;
+ ia64)
+ ARCH="glnxi64"
+ ;;
+ x86_64)
+ ARCH="glnxa64"
+ ;;
+ esac
+ ;;
esac
fi
return 0
to ./update/install/arch.sh. Apply equally to CD2 and CD3. Pick the ./update/pd/install/tar.cmp zip archive from CD1, and unpack it.
Archive: tar.cmp
Length Date Time Name
-------- ---- ---- ----
41864 09-14-04 13:10 install_matlab
0 09-14-04 13:08 update/
0 09-14-04 13:08 update/install/
0 09-14-04 13:08 update/install/scripts/
676 07-10-97 05:11 update/install/scripts/abort.sh
2575 01-11-99 20:24 update/install/scripts/actualp.sh
6230 09-14-04 13:11 update/install/scripts/arch.sh
7329 07-27-00 21:42 update/install/scripts/batch1.sh
2597 01-11-99 20:24 update/install/scripts/batch4.sh
6985 01-29-03 21:28 update/install/scripts/bld_lbin.sh
9466 12-11-03 19:21 update/install/scripts/bld_sbin.sh
789 10-23-95 19:07 update/install/scripts/center.sh
530 12-11-03 19:21 update/install/scripts/cleanup.sh
486 01-11-99 20:24 update/install/scripts/clearsc.sh
848 01-11-99 20:24 update/install/scripts/cont.sh
449 01-11-99 20:24 update/install/scripts/echon.sh
2167 11-01-02 03:33 update/install/scripts/fin.sh
4590 03-22-04 06:07 update/install/scripts/genpathdef.sh
3256 12-11-03 19:21 update/install/scripts/intro_l.sh
5376 12-11-03 19:21 update/install/scripts/intro_s.sh
20832 01-09-04 18:30 update/install/scripts/lm.sh
6718 12-11-03 19:21 update/install/scripts/local.sh
3590 12-11-03 19:21 update/install/scripts/main.sh
1115 12-11-03 19:21 update/install/scripts/mapname.sh
1502 01-11-99 20:24 update/install/scripts/netruser.sh
1754 10-23-98 20:50 update/install/scripts/oldname.sh
5267 11-01-02 03:33 update/install/scripts/options.sh
6853 08-31-00 18:09 update/install/scripts/perm.sh
6585 06-12-02 22:21 update/install/scripts/ruser.sh
784 01-11-99 20:24 update/install/scripts/searchp.sh
3303 12-11-03 19:21 update/install/scripts/ucleanpe.sh
3295 12-11-03 19:21 update/install/scripts/update.sh
5395 12-11-03 19:21 update/install/scripts/util.sh
8565 12-11-03 19:21 update/install/scripts/verifyp.sh
-------- -------
171771 34 files
Apply the patch
--- install_matlab.orig 2005-08-12 10:23:52.000000000 +0200
+++ install_matlab 2005-09-30 14:27:23.000000000 +0200
@@ -552,6 +552,19 @@
Darwin) # Mac OS X
ARCH="mac"
;;
+ NetBSD) # NetBSD (Linux emul)
+ case "`/usr/bin/uname -m`" in
+ i*86)
+ ARCH="glnx86"
+ ;;
+ ia64)
+ ARCH="glnxi64"
+ ;;
+ x86_64)
+ ARCH="glnxa64"
+ ;;
+ esac
+ ;;
esac
fi
return 0
@@ -795,6 +808,19 @@
Darwin) # Mac OS X
ver=`/usr/bin/uname -r | awk '{print $1}'`
;;
+ NetBSD) # NetBSD (Linux emul)
+ case $Arch in
+ glnx86)
+ ver=`/emul/linux/lib/libc.so.6 | head -1 | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"`
+ ;;
+ glnxi64)
+ ver=2.2.4
+ ;;
+ glnxa64)
+ ver=`/emul/linux/lib64/libc.so.6 | head -1 | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"`
+ ;;
+ esac
+ ;;
esac
fi
#
to install_matlab, and the patch
--- orig/update/install/scripts/arch.sh 2004-04-04 10:20:31.000000000 +0200
+++ update/install/scripts/arch.sh 2004-09-14 13:11:17.000000000 +0200
@@ -185,6 +185,19 @@
Darwin) # Mac OS X
ARCH="mac"
;;
+ NetBSD) # NetBSD (Linux emul)
+ case "`/usr/bin/uname -m`" in
+ i*86)
+ ARCH="glnx86"
+ ;;
+ ia64)
+ ARCH="glnxi64"
+ ;;
+ x86_64)
+ ARCH="glnxa64"
+ ;;
+ esac
+ ;;
esac
fi
return 0
(same as above) to update/install/scripts/arch.sh. Re-zip the contents of the archive
[hf@venediger] /var/tmp # zip -r tar.cmp install_matlab update
adding: install_matlab (deflated 77%)
adding: update/ (stored 0%)
adding: update/install/ (stored 0%)
adding: update/install/scripts/ (stored 0%)
adding: update/install/scripts/abort.sh (deflated 53%)
adding: update/install/scripts/actualp.sh (deflated 63%)
adding: update/install/scripts/arch.sh (deflated 69%)
adding: update/install/scripts/batch1.sh (deflated 70%)
adding: update/install/scripts/batch4.sh (deflated 60%)
adding: update/install/scripts/bld_lbin.sh (deflated 75%)
adding: update/install/scripts/bld_sbin.sh (deflated 80%)
adding: update/install/scripts/center.sh (deflated 55%)
adding: update/install/scripts/cleanup.sh (deflated 42%)
adding: update/install/scripts/clearsc.sh (deflated 41%)
adding: update/install/scripts/cont.sh (deflated 53%)
adding: update/install/scripts/echon.sh (deflated 39%)
adding: update/install/scripts/fin.sh (deflated 78%)
adding: update/install/scripts/genpathdef.sh (deflated 66%)
adding: update/install/scripts/intro_l.sh (deflated 80%)
adding: update/install/scripts/intro_s.sh (deflated 85%)
adding: update/install/scripts/lm.sh (deflated 81%)
adding: update/install/scripts/local.sh (deflated 78%)
adding: update/install/scripts/main.sh (deflated 68%)
adding: update/install/scripts/mapname.sh (deflated 54%)
adding: update/install/scripts/netruser.sh (deflated 62%)
adding: update/install/scripts/oldname.sh (deflated 53%)
adding: update/install/scripts/options.sh (deflated 72%)
adding: update/install/scripts/perm.sh (deflated 74%)
adding: update/install/scripts/ruser.sh (deflated 82%)
adding: update/install/scripts/searchp.sh (deflated 47%)
adding: update/install/scripts/ucleanpe.sh (deflated 63%)
adding: update/install/scripts/update.sh (deflated 70%)
adding: update/install/scripts/util.sh (deflated 70%)
adding: update/install/scripts/verifyp.sh (deflated 78%)
to the same name. Copy to CD1, CD2 and CD3. Rinse and repeat.
- And that's about it. Provide a proper license.dat, and you are ready for installation. chdir to the installation directory, call the /path/to/install script from CD1, and click OK a few times.
At the end of the installation, there is a spurious rm -f with empty argument that can safely be ignored. If you find out where it hides, please tell me.
- OK, there's still the license manager...
FlexLM comes with a byzantine set of shell script tools. Of course, there is one more arch.sh to patch, this time under {MATLABHOME}/etc/util/arch.sh. Then create /usr/tmp, preferably as a symlink to /var/tmp, because FlexLM and the MLM backend have that hard-coded for logs, locks, preferences. Make sure you have got a proper license file in place - the procedure is well-documented. After that, you can either start the flexlm daemon from /etc/rc.local by using {MATLABHOME}/etc/rc.lm.glnx86 start|stop, or with the following rc.d script :
#!/bin/sh
#
# $Id: how_to_run_matlab_r14.3_on_netbsd__92__i386.mdwn,v 1.2 2012/02/05 07:14:36 schmonz Exp $
#
# PROVIDE: flexlm
# REQUIRE: DAEMON
. /etc/rc.subr
name="flexlm"
rcvar=$name
flexlm_user="flexlm"
matlabroot="/path/to/matlabr14"
lm_license="${matlabroot}/etc/license.dat"
required_files="${lm_license}"
command="${matlabroot}/etc/glnx86/lmgrd"
command_args="-c ${lm_license} -2 -p -l +/var/log/flexlmlog"
load_rc_config $name
run_rc_command "$1"
-- you need to create a user to run flexlm as, and own the logfile to him.
Other patches
arch.sh
For whatever reason there may be, a Matlab 14 installation has three instances of the arch.sh script that works out what platform Matlab is running on:
> find . -name arch.sh -print
./bin/util/arch.sh
./etc/util/arch.sh
./update/install/scripts/arch.sh
And (of course) the one that is sourced by {MATLABROOT}/bin/matlab is the original version which you should replace by e.g. {MATLABROOT}/etc/util/arch.sh once you get tired of adding -glnx86 to every matlab invocation.
MEX
If you want to build binary modules with mex you need to make sure those modules (libraries) are linux libraries since you cannot use native NetBSD libraries with a program running in emulation. Make sure you install the suse_devel package as listed above, and apply this patch to {MATLABROOT}/toolbox/matlab/general/mex.m. It makes sure the mex shell-script (which calls the compiler) is executed by the linux shell.
Sound
Add a symlink to the native /dev/sound like
[hf@dreispitz] /<1>linux/dev > pwd
/usr/pkg/emul/linux/dev
[hf@dreispitz] /<1>linux/dev > ll audio
0 lrwx------ 1 root wheel 13 Sep 10 03:25 audio -> /../dev/sound
Linux pthread libs
Matlab 13, at least, expects the pthread shared library under /usr/lib whereas NetBSD's suse*_base package installs it under /lib. You need to manually add
[hf@dreispitz] /<2>usr/lib > ll libpthread.so*
0 lrwxr-xr-x 1 root wheel 25 Jul 22 17:35 libpthread.so -> ../../lib/libpthread.so.0
0 lrwxr-xr-x 1 root wheel 25 Jul 22 17:35 libpthread.so.0 -> ../../lib/libpthread.so.0
LD_LIBRARY_PATH
As a Linux binary, Matlab makes heavy use of the LD_LIBRARY_PATH environment variable to access shared libraries. For a shell exit, it populates LD_LIBRARY_PATH like
>> !echo $LD_LIBRARY_PATH
/opt/matlabr14/sys/os/glnx86:/opt/matlabr14/bin/glnx86:/opt/matlabr14/extern/lib/glnx86:/opt/matlabr14/sys/java/jre/glnx86/jre1.5.0/lib/i386/native_threads:/opt/matlabr14/sys/java/jre/glnx86/jre1.5.0/lib/i386/client:/opt/matlabr14/sys/java/jre/glnx86/jre1.5.0/lib/i386
>>
NetBSD ELF binaries do not normally use LD_LIBRARY_PATH; instead, NetBSD compiles fixed library paths into shared libraries and applications. Nevertheless, non-setuid NetBSD binaries still look at LD_LIBRARY_PATH. The above path apparently confuses complex NetBSD binaries like NEdit, XEmacs, Mozilla, which try to pick up Linux libraries instead of the native ones. As a workaround, unset LD_LIBRARY_PATH before calling the application, either with per-application wrapper scripts, or a generic wrapper script like
#!/bin/sh
unset LD_LIBRARY_PATH
exec "$@"
OpenGL
Commands like bench that use OpenGL result in a kernel panic . Christos Zoulas has provided a kernel patch. It is against 2005-10-10 NetBSD-current source and applies with offsets to the netbsd-3 branch; apply from within sys/arch/i386/.
The patch avoids the panic; what functionality exactly is missing remains to be seen.
Workaround: The Matlab command opengl software enforces software rendering which is slower than using hardware support - but appears to work, unlike the latter. You still need the kernel patch, though, as any OpenGL operation will panic otherwise.
Issues left
Why Mathworks duplicate their set of install scripts everywhere and still keep a zipped copy around to drop on top of the installation is beyond me. The diffs above are clean and minimal - it's just that you have to have five instances of each.
--Hauke Fath