I am attempting to do “Matlab in the cloud with Dynare”. I’m not a Dynare expert, but quite comfortable with Linux systems and Docker.
Installing in cloud instances (CodeOcean-provided Matlab and Matlab-provided images) fails. There are two issues, outlined below, and I sketch out possible solutions, but they would need to be implemented by the package maintainers (Sebastien?)
References:
Common to both
In both cases, the base OS is Ubuntu 20.04.
Installation of Matlab is not necessary - each image has Matlab pre-installed. However, the Matlab-provided image requires a login to a Mathworks account to actually run matlab
, even when running with a network license (not sure if this matters). The account is prompted when launching matlab
, interactively.
In both cases, installation happens via apt-get
in the Dockerfile. (see follow-up message for details) Installing dynare
DEB package works (version is 4.6.0). It is the dynare-matlab
package that fails.
Issue one: non-interactive building fails, because the package interactively prompts for inputs (such as the Matlab location).
Possible solution: pass answers to those questions in via environment variables.
Issue two: when interactively installing (apt-get dynare-matlab
), answers are prompted, but installation fails with error message. See next message.
Help would be appreciated, because this would be quite convenient to have working!
Dockerfile (working)
FROM mathworks/matlab:r2021a
ARG DEBIAN_FRONTEND=noninteractive
ARG MLM_LICENSE_FILE
USER root
RUN apt-get update \
&& apt-get install -y \
dynare=4.6.0+dfsg-2 \
&& rm -rf /var/lib/apt/lists/*
USER matlab
Installation (interactive, not working)
docker run -it -p 8888:8888 --shm-size=512M myself/matlab2021a:2022-11-23 /bin/bash
then, as user matlab
:
sudo apt-get update
sudo apt-get install -y dynare-matlab
Prompt 1:
Location of MATLAB installation(s): /opt/matlab/R2021a/
Prompt 2:
Authorized user for MATLAB:
(left blank)
Prompt 3:
Rename MATLAB's GCC libraries? [yes/no]
answer: yes
Prompt 1 is repeated:
Setting up matlab-support (0.0.21.1) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
MATLAB interface configuration
------------------------------
The MATLAB interface needs to know where MATLAB is installed on this system. This can be specified as a single directory or, in case of multiple MATLAB installations, as a glob expression (any
expression supported by bash, including extended pattern matching operators).
If, for example, the MATLAB executable is installed in /opt/matlab76/bin/matlab, please enter "/opt/matlab76". If there are multiple MATLAB versions installed, you can enter "/opt/matlab*" or a similar
expression. Only matches that really contain a MATLAB executable will be considered. Therefore, a glob expression may match more than just MATLAB installation directories without negative side effects.
Location of MATLAB installation(s):
with same answer as before.
This leads to failure:
Setting up dynare-matlab (4.6.0+dfsg-2) ...
Building Matlab extensions (logfile at /tmp/dynare-matlab-mexbuild-1669224388.a98qMX7)
configure: error: MATLAB cannot be found
dpkg: error processing package dynare-matlab (--configure):
installed dynare-matlab package post-installation script subprocess returned error exit status 1
Not sure how to address this. One fix that was tried (no success)
ln -s /usr/local/bin/matlab /usr/local/bin/MATLAB
Logfile
sudo cat /tmp/dynare-matlab-mexbuild-1669224534.4xLVQdb
debian-matlab-mexhelper 0.0.21.1
Copyright (C) 2010-2011 Michael Hanke <michael.hanke@gmail.com>
Licensed under GNU General Public License version 3 or later.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Michael Hanke.
Attempt to build Matlab extensions
Package name: dynare-matlab
Source directory: /usr/src/matlab/dynare-matlab
MEX dir: /usr/lib/matlab/site/dynare-matlab
M dir: /usr/share/matlab/site/m/dynare-matlab
Build user (if any):
Build command: cd mex/build/matlab && ./configure --with-matlab=$(dirname $(dirname $(readlink -f `which matlab`))) MATLAB_VERSION=$(echo version | matlab -nodesktop -nodisplay -nosplash 2>/dev/null | sed -En "/ans\ =/!d;n;n;s/^[^0-9]*([0-9]+\.[0-9]+).*$/\1/;p") && make
Install command: mkdir -p /usr/lib/dynare/mex/matlab && install -m644 /usr/src/matlab/dynare-matlab/mex/matlab/* /usr/lib/dynare/mex/matlab
Clean command: cd mex/build/matlab && make distclean && rmdir /usr/src/matlab/dynare-matlab/mex/build/matlab/*/.deps && rmdir /usr/src/matlab/dynare-matlab/mex/matlab
Attempt to build Matlab extensions:
cd mex/build/matlab && ./configure --with-matlab=$(dirname $(dirname $(readlink -f `which matlab`))) MATLAB_VERSION=$(echo version | matlab -nodesktop -nodisplay -nosplash 2>/dev/null | sed -En "/ans\ =/!d;n;n;s/^[^0-9]*([0-9]+\.[0-9]+).*$//;p") && make
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for MATLAB prefix... /opt/matlab/R2021a
checking whether to enable MATLAB support... yes
checking for MATLAB version... unknown
checking for MEX-file suffix... mexa64
setting MEX-file suffix to .mexa64
checking for MATLAB machine architecture... glnxa64
checking for a sed that does not truncate output... /usr/bin/sed
checking for options to compile MEX for MATLAB... ok
I’m installing from source, but ran into problem there.
Most likely it’s because you’re running a too recent MATLAB version compared to the Dynare version (which is quite old). You should either upgrade to Dynare 5.3 or downgrade to MATLAB R2019b.