Difference between revisions of "Matlab"

From ArchWiki
Jump to: navigation, search
(out of date)
(License: invalid machine id)
(12 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
[[Category:Mathematics and science]]
 
[[Category:Mathematics and science]]
{{Article summary start}}
+
{{Related articles start}}
{{Article summary text|This article contains information about the installation, configuration and use of MATLAB.}}
+
{{Related|Octave}}
{{Article summary heading|Related}}
+
{{Related|Sage-mathematics}}
{{Article summary wiki|Octave}}
+
{{Related|Mathematica}}
{{Article summary wiki|Sage-mathematics}}
+
{{Related articles end}}
{{Article summary wiki|Mathematica}}
+
{{Article summary end}}
+
 
+
{{Out of date|The Java-related instructions are seriously out of date: {{Pkg|openjdk6}} does not exist, {{AUR|bin32-openjdk6}} is outdated, etc.}}
+
 
+
 
From the [http://www.mathworks.com/products/matlab/ official website]:
 
From the [http://www.mathworks.com/products/matlab/ official website]:
  
Line 15: Line 10:
  
 
== General installation ==
 
== General installation ==
{{Warning|This should not be necessary for MATLAB R2013a+, which is compliant with Java 7 and does not require extra packages. Installation should be done with the install script provided by matlab.}}
+
{{Note|Versions earlier than MATLAB R2013a are not compatible with Java 7. When installing an older version, first install {{Pkg|libxp}} and {{AUR|jre6}}.}}
Use the following commands to mount and install Matlab. Note that the path to the install script should contain no spaces, or the install will fail. For graphical install and interface {{Pkg|libxp}} is needed. You may need to [[Pacman|install]] {{Pkg|libxp}} from the [[official repositories]] first. Note also that Matlab is not compliant with Java 7, so you may need to install, for example, {{Pkg|openjdk6}}.
+
 
Install from iso file:
+
MATLAB 2013a+ should install fine with the install script provided by MATLAB, without any additional packages.
 +
 
 +
To install from an iso file:
 
  # modprobe loop
 
  # modprobe loop
 
  # mount -o loop matlab.iso /mnt/
 
  # mount -o loop matlab.iso /mnt/
Line 31: Line 28:
 
To create a menu item, we need to get a icon first:
 
To create a menu item, we need to get a icon first:
 
   
 
   
  # wget http://upload.wikimedia.org/wikipedia/commons/2/21/Matlab_Logo.png -O /usr/share/icons/matlab.png
+
  # curl http://upload.wikimedia.org/wikipedia/commons/2/21/Matlab_Logo.png -o /usr/share/icons/matlab.png
  
 
Then create a new .desktop file in {{ic|/usr/share/applications}} with following lines:
 
Then create a new .desktop file in {{ic|/usr/share/applications}} with following lines:
Line 42: Line 39:
 
Name=MATLAB
 
Name=MATLAB
 
Comment=Start MATLAB - The Language of Technical Computing
 
Comment=Start MATLAB - The Language of Technical Computing
Exec=matlab -desktop
+
Exec=env -u _JAVA_OPTIONS matlab -desktop -nosplash -r "cd('%d'); edit '%f'"
 
Categories=Development;
 
Categories=Development;
 +
MimeType=text/x-matlab;
 
</nowiki>
 
</nowiki>
 
}}
 
}}
  
You can also put this .desktop file in the Desktop folder to create a shortcut.
+
The {{ic|Exec}} command line is composed as follows:
  
More details see [https://help.ubuntu.com/community/MATLAB MATLAB - Community Ubuntu Documents]
+
* {{ic|-desktop}} is a flag needed to run matlab without a terminal.
 +
* {{ic|-nosplash}} is a flag preventing the splash screen from showing and taking up a temporary space in your task bar.
 +
* {{ic|env -u _JAVA_OPTIONS}} prevents the creation of a .java.log-file in your home directory by unsetting {{ic|$_JAVA_OPTIONS}}. Java prints all options set this way to stdout, and matlab treats everything in stdout as error worth a log.
 +
* {{ic|-r '...'}} executes matlab code on startup:
 +
*# {{ic|cd('%d')}} This changes the working directory of matlab to the opened file’s directory.
 +
*# {{ic|edit '%f'}} This spawns an editor tab for the file.
  
=== Install 32-bit Matlab on 64-bit system ===
+
You can also put this .desktop file in the ~/Desktop directory to create a shortcut.
{{Note|Follow this section only if you have a student version before R2013a. All releases since R2012b are 64-bit only.}}
+
  
These instructions are tested for the R2012a student version. To start off we need to install a bunch of packages from the [[multilib]] repository (this list may be out of date):  
+
More details see [https://help.ubuntu.com/community/MATLAB MATLAB - Community Ubuntu Documents]
{{Pkg|lib32-mesa}}, {{Pkg|lib32-glu}}, {{Pkg|lib32-glibc}}, {{Pkg|lib32-libxmu}}, {{Pkg|lib32-zlib}}, {{Pkg|lib32-ncurses}}, {{Pkg|lib32-libxtst}}, {{Pkg|lib32-libxi}}, {{Pkg|lib32-libxrender}}, {{Pkg|lib32-libxfixes}}, {{Pkg|lib32-freetype2}}, {{Pkg|lib32-fontconfig}}, {{Pkg|lib32-libxdamage}}.
+
A few packages from the [[AUR]] might also be needed:
+
{{AUR|lib32-libxpm}}, {{AUR|lib32-libxp}}, {{AUR|bin32-openjdk6}} ({{Pkg|openjdk7}} might also work).
+
  
Once they are installed:
+
=== Install supported compiler ===
  
$ ./install -glnx86
+
In order for Matlab to work with C code (needed for simulink) it is necessarry to install a [http://www.mathworks.ch/support/compilers/?sec=glnxa64 supported compiler]. Install {{AUR|gcc44}} from the AUR.
  
After fixing any library dependency problems, you will be able to guide the installer through the install process.  If activation doesn't work in the installer you'll need to login to Wolfram's site and download a license file which you'll put in {{ic|${MATLAB}/licenses}}. After the install process, you'll need to create a symbolic link because the installer oddly thinks it's installing the 64-bit version of Matlab:
+
Then edit {{ic|${MATLAB}/bin/mexopts.sh}} and replace all occurances of CC='gcc' with CC='gcc-4.4' and CXX='g++' with CXX='g++-4.4'. Afterwards run
 +
mex -setup
 +
in Matlab and select the {{ic|mexopts.sh}} file.
  
$ cd ${MATLAB}/sys/java/jre
+
== Troubleshooting ==
$ ln -s glnx86 glnxa64
+
As one installs Matlab, it might complain that it cannot find a package, for the most part just look at the package name and then install it with [[Pacman]], or in the case of x86_64 there are some libraries only in [[AUR]].
  
In the above, ${MATLAB} should be replaced by the root directory you chose for your installation.
+
=== Install-Time Library Errors ===
 +
* Make sure that the symlink {{ic|bin/glnx64/libstdc++.so.6}} is pointing to the correct version of {{ic|libstdc++.so.xx}} (which is also in the same directory and has numbers where 'xx' is). By default, it may be pointing to an older (and nonexistent) version (different value for 'xx').
  
You'll also need to put another link in Matlab's {{ic|bin}} folder because despite asking Matlab to install the 32bit version, it still thinks you want to use the 64bit one:
+
* Make sure the device you're installing from is not mounted as {{ic|noexec}}
  
$ cd ${MATLAB}/bin
+
* If you downloaded the files from Mathworks' website, make sure they are not on an NTFS or FAT partition, because that can mess up the symlinks. Ext4 or Ext3 should work.
$ ln -s glnx86 glnxa64
+
  
After that you'll need to edit the {{ic|${MATLAB}/bin/matlab}} script to get the java settings correct.  After the comments at the top of the file, you'll need the line:
+
=== License: invalid machine id ===
 +
The installer may complain about an invalid machine id, because it is looking for a network interface named eth0 to get a MAC address for activation, while new Arch Linux setups do not have a network interface called eth0 (systemd uses [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames Predictable Network Interface Names]).
  
export MATLAB_JAVA=/path/to/jre
+
The optimal solution is to create a dummy network interface named eth0 with the MAC address of the network device in use (wireless or wired) when you activated MATLAB. First, get that MAC address using {{ic|ip link}} Next, create the following file:
  
Where {{ic|/path/to/jre}} will be {{ic|/opt/java/jre}} if you're using Sun's JRE. The path is one level up from where {{ic|rt.jar}} is located.  That is, {{ic|rt.jar}} should be in {{ic|/opt/java/jre/libs}} if you used {{ic|/opt/java/jre}} for {{ic|MATLAB_JAVA}}. In Matlab R2010a it works pretty well, if you use the internal JRE with:
+
{{hc|/etc/systemd/system/matlab.licensing.service|<nowiki>
 +
[Unit]
 +
Description=Dummy network interface for MATLAB
 +
Requires=systemd-modules-load.service
  
export MATLAB_JAVA=${MATLAB}/sys/java/jre/glnx86/jre
+
[Service]
 +
Type=oneshot
 +
ExecStart=/sbin/ip link set dev dummy0 name eth0
 +
ExecStart=/sbin/ip link set dev eth0 address 00:00:00:00:00:00
  
If using {{AUR|bin32-openjdk6}}, use
+
[Install]
 +
WantedBy=multi-user.target
 +
</nowiki>
 +
}}
  
export MATLAB_JAVA=/usr/lib/jvm/java-7-openjdk/jre/
+
Replace 00:00:00:00:00:00 with your MAC address.
  
To run it, you'll need to:
+
Then make the script run on boot:
  
  $ ${MATLAB}/bin/matlab -glnx86 -desktop
+
  # systemctl enable matlab.licensing
  
At this point you may have to resolve more library dependencies or troubleshoot [[Java]].  Your version of Matlab may need a specific version of Sun's JRE installed.
+
Finally, set the dummy module to load on boot by creating the following file:
  
=== Install supported compiler ===
+
{{hc|/etc/modules-load.d/dummy.conf|<nowiki>dummy</nowiki>
 
+
}}
In order for Matlab to work with C code (needed for simulink) it is necessarry to install a [http://www.mathworks.ch/support/compilers/?sec=glnxa64 supported compiler]. Install {{AUR|gcc44}} from the AUR.
+
 
+
Then edit {{ic|${MATLAB}/bin/mexopts.sh}} and replace all occurances of CC='gcc' with CC='gcc-4.4' and CXX='g++' with CXX='g++-4.4'. Afterwards run
+
mex -setup
+
in Matlab and select the {{ic|mexopts.sh}} file.
+
 
+
== Troubleshooting ==
+
As one installs Matlab, it might complain that it can't find a package, for the most part just look at the package name and then install it with [[Pacman]], or in the case of x86_64 there are some libraries only in [[AUR]].
+
 
+
==== License: invalid machine id ====
+
The installer may complain about an invalid machine id, because it is looking for a network interface named eth0 to get a MAC address for activation, while new Arch Linux setups do not have a network interface called eth0 (systemd uses [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames Predictable Network Interface Names]). Just [[rename network interfaces|change the name of the interface]].
+
  
In a nutshell: install {{Pkg|wireless_tools}} and execute the following:
+
==== Rename Interfaces ====
# systemctl stop NetworkManager
+
# ifrename -i enp2s0f0 -n eth0
+
# systemctl start NetworkManager
+
  
This will be needed after each reboot. To make it permanent:
+
A less preferable option is to [[rename network interfaces|change the name of the interface]].
# ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules
+
  
The machine id should now be different than 000000000000 and you should be able to install and activate MATLAB without problems.  
+
The machine id should now be different than 000000000000 and you should be able to install and activate MATLAB without problems.
  
==== Resolving start warnings/errors ====
+
=== Resolving start warnings/errors ===
  
 
* Even if all needed libraries are installed, Matlab when starting can still report some missing libraries. This is resolved by symbolic linking of needed libraries to directories that Matlab checks at start-up. For example, if Matlab triggers error/warning about missing {{ic|/lib64/libc.so.6}} library, this can be resolved by:
 
* Even if all needed libraries are installed, Matlab when starting can still report some missing libraries. This is resolved by symbolic linking of needed libraries to directories that Matlab checks at start-up. For example, if Matlab triggers error/warning about missing {{ic|/lib64/libc.so.6}} library, this can be resolved by:
Line 127: Line 123:
 
  export MATLAB_JAVA=/usr/lib/jvm/java-7-openjdk/jre
 
  export MATLAB_JAVA=/usr/lib/jvm/java-7-openjdk/jre
  
==== MATLAB crashes when displaying graphics ====
+
=== MATLAB crashes when displaying graphics ===
  
 
To identify this error, start MATLAB with
 
To identify this error, start MATLAB with
Line 145: Line 141:
 
  sudo ln -s /usr/lib/libstdc++.so.6
 
  sudo ln -s /usr/lib/libstdc++.so.6
  
==== Blank/grey UI when using DWM/Awesome ====
+
=== Blank/grey UI when using DWM/Awesome ===
  
 
wmname LG3D
 
wmname LG3D

Revision as of 23:23, 12 January 2014

From the official website:

MATLAB is a high-level language and interactive environment for numerical computation, visualization, and programming. Using MATLAB, you can analyze data, develop algorithms, and create models and applications. The language, tools, and built-in math functions enable you to explore multiple approaches and reach a solution faster than with spreadsheets or traditional programming languages, such as C/C++ or Java.

General installation

Note: Versions earlier than MATLAB R2013a are not compatible with Java 7. When installing an older version, first install libxp and jre6AUR.

MATLAB 2013a+ should install fine with the install script provided by MATLAB, without any additional packages.

To install from an iso file:

# modprobe loop
# mount -o loop matlab.iso /mnt/
# /mnt/install

Additionally, install xorg-fonts-100dpi, xorg-fonts-75dpi, and xorg-fonts-type1 so fonts are displayed properly in figures.

Create Desktop and Menu Shortcuts

If you choose Custom in Installation Type, the symlink will be created automatically. Otherwise, you may need to manually create a symlink in /usr/local/bin to make it easier to launch in terminal:

# ln -s /{MATLAB}/bin/matlab /usr/local/bin

To create a menu item, we need to get a icon first:

# curl http://upload.wikimedia.org/wikipedia/commons/2/21/Matlab_Logo.png -o /usr/share/icons/matlab.png

Then create a new .desktop file in /usr/share/applications with following lines:

/usr/share/applications/matlab.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Icon=/usr/share/icons/matlab.png
Name=MATLAB
Comment=Start MATLAB - The Language of Technical Computing
Exec=env -u _JAVA_OPTIONS matlab -desktop -nosplash -r "cd('%d'); edit '%f'"
Categories=Development;
MimeType=text/x-matlab;

The Exec command line is composed as follows:

  • -desktop is a flag needed to run matlab without a terminal.
  • -nosplash is a flag preventing the splash screen from showing and taking up a temporary space in your task bar.
  • env -u _JAVA_OPTIONS prevents the creation of a .java.log-file in your home directory by unsetting $_JAVA_OPTIONS. Java prints all options set this way to stdout, and matlab treats everything in stdout as error worth a log.
  • -r '...' executes matlab code on startup:
    1. cd('%d') This changes the working directory of matlab to the opened file’s directory.
    2. edit '%f' This spawns an editor tab for the file.

You can also put this .desktop file in the ~/Desktop directory to create a shortcut.

More details see MATLAB - Community Ubuntu Documents

Install supported compiler

In order for Matlab to work with C code (needed for simulink) it is necessarry to install a supported compiler. Install gcc44AUR from the AUR.

Then edit ${MATLAB}/bin/mexopts.sh and replace all occurances of CC='gcc' with CC='gcc-4.4' and CXX='g++' with CXX='g++-4.4'. Afterwards run

mex -setup

in Matlab and select the mexopts.sh file.

Troubleshooting

As one installs Matlab, it might complain that it cannot find a package, for the most part just look at the package name and then install it with Pacman, or in the case of x86_64 there are some libraries only in AUR.

Install-Time Library Errors

  • Make sure that the symlink bin/glnx64/libstdc++.so.6 is pointing to the correct version of libstdc++.so.xx (which is also in the same directory and has numbers where 'xx' is). By default, it may be pointing to an older (and nonexistent) version (different value for 'xx').
  • Make sure the device you're installing from is not mounted as noexec
  • If you downloaded the files from Mathworks' website, make sure they are not on an NTFS or FAT partition, because that can mess up the symlinks. Ext4 or Ext3 should work.

License: invalid machine id

The installer may complain about an invalid machine id, because it is looking for a network interface named eth0 to get a MAC address for activation, while new Arch Linux setups do not have a network interface called eth0 (systemd uses Predictable Network Interface Names).

The optimal solution is to create a dummy network interface named eth0 with the MAC address of the network device in use (wireless or wired) when you activated MATLAB. First, get that MAC address using ip link Next, create the following file:

/etc/systemd/system/matlab.licensing.service
[Unit]
Description=Dummy network interface for MATLAB
Requires=systemd-modules-load.service

[Service]
Type=oneshot
ExecStart=/sbin/ip link set dev dummy0 name eth0
ExecStart=/sbin/ip link set dev eth0 address 00:00:00:00:00:00

[Install]
WantedBy=multi-user.target

Replace 00:00:00:00:00:00 with your MAC address.

Then make the script run on boot:

# systemctl enable matlab.licensing

Finally, set the dummy module to load on boot by creating the following file:

/etc/modules-load.d/dummy.conf
dummy

Rename Interfaces

A less preferable option is to change the name of the interface.

The machine id should now be different than 000000000000 and you should be able to install and activate MATLAB without problems.

Resolving start warnings/errors

  • Even if all needed libraries are installed, Matlab when starting can still report some missing libraries. This is resolved by symbolic linking of needed libraries to directories that Matlab checks at start-up. For example, if Matlab triggers error/warning about missing /lib64/libc.so.6 library, this can be resolved by:
# ln -s /lib/libc.so.6 /lib64
  • Matlab R2011b with an up-to-date Arch Linux (as of March 12, 2012) fails on startup with the familiar "Failure loading desktop class." A solution is to point Matlab to the system JVM (confirmed to work with the jdk7-openjdk package):
export MATLAB_JAVA=/usr/lib/jvm/java-7-openjdk/jre

MATLAB crashes when displaying graphics

To identify this error, start MATLAB with

LIBGL_DEBUG=verbose matlab

from the terminal and try to collect OpenGL information with opengl info from the MATLAB command prompt. If it crashes again and there is an output line like

libGL error: dlopen /usr/lib/xorg/modules/dri/swrast_dri.so failed 
(/usr/local/MATLAB/R2011b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: 
version `GLIBCXX_3.4.15' not found (required by /usr/lib/xorg/modules/dri/swrast_dri.so))

then the problem is that MATLAB uses its own GNU C++ library, which is an older version than the up-to-date version on your Archlinux system. Make MATLAB use the current C++ library for your system by

cd /usr/local/MATLAB/R(your release)/sys/os/glnxa64
sudo unlink libstdc++.so.6
sudo ln -s /usr/lib/libstdc++.so.6

Blank/grey UI when using DWM/Awesome

wmname LG3D

OpenGL Acceleration

Once Matlab is installed type the following in the interpreter:

>> opengl info

The output should be similar to the following:

Version         = 2.0 Mesa 7.8.2
Vendor          = Advanced Micro Devices, Inc.
Renderer        = Mesa DRI R600 (RV710 9552) 20090101 x86/MMX/SSE2 TCL DRI2
MaxTextureSize  = 4096
Visual          = 0xcb (TrueColor, depth 24, RGB mask 0xff0000 0xff00 0x00ff)
Software        = false
# of Extensions = 107

Driver Bug Workarounds:
OpenGLBitmapZbufferBug    = 0
OpenGLWobbleTesselatorBug = 0
OpenGLLineSmoothingBug    = 0
OpenGLClippedImageBug     = 0
OpenGLEraseModeBug        = 0

This will vary with card you are using, but the important part is "Software = false". If it's not "false" for you, then there is a problem with your hardware acceleration.

NVIDIA

With an NVIDIA card, the output should be similar to this:

>> opengl info
Version         = 2.1.2 NVIDIA 177.82
Vendor          = NVIDIA Corporation
Renderer        = Quadro NVS 140M/PCI/SSE2
MaxTextureSize  = 8192
Visual          = 0x21 (TrueColor, depth 16, RGB mask 0xf800 0x07e0 0x001f)
Software        = false
# of Extensions = 144

Driver Bug Workarounds:
OpenGLBitmapZbufferBug    = 0
OpenGLWobbleTesselatorBug = 0
OpenGLLineSmoothingBug    = 0
OpenGLClippedImageBug     = 1
OpenGLEraseModeBug        = 0

With the NVIDIA card all it required to start working was to copy the libGLU.so from the Matlab installed library ${MATLAB}/sys/opengl/lib/glnx86/libGLU.so to /usr/lib directory. Note that in x86_64 this might be a different directory.

Note: Although, not thoroughly tested, using lib32-nvidia-utils seems to work as well.