在 Ubuntu 20.04 上静默安装matlab 实践

文章介绍了如何使用Docker进行MATLAB的自动化部署,包括使用官方镜像的局限性、使用matlabruntime的复杂性和潜在问题,以及定制docker镜像的步骤。提到了通过pcode混淆代码以增强安全性,并提供了基于Ubuntu的Dockerfile示例。此外,还讨论了磁盘空间不足的解决办法和图形化安装MATLAB的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

  1. 某服务端业务需要调用 matlab
  2. 为方便迭代发布,需要支持基于 docker 的自动化部署(CD)

方案对比

使用 Matlab 官方 docker 镜像

  • 一键安装,使用方便
  • 官方镜像仅支持网络验证
  • 官方镜像仅支持基础功能版、深度学习版两个版本,功能不全

使用 matlab runtime

  • 需要将编写好的 matlab 程序打包成对应框架(如:python、c++ 等)SDK。存在兼容性问题,同时操作较为复杂

使用 matlab server

  • 没有用过
  • 看文档,貌似用起来成本较大

定制 docker 镜像

使用 ubuntu:20.04 作为基础镜像,在容器中安装 matlab

  • 操作简单。需求方仅需要把 matlab 代码交付给开发人员,就可以使用
  • 灵活性强。可以根据具体业务安装对应模块
  • 兼容性好。理论上,服务端的执行效果和开发时的运行效果一致

使用规范

matlab 代码使用 pcode 工具混淆后部署到服务端


构建镜像

基础镜像

目的:加快实验速度,同时作为后续部署的基础镜像

基础镜像安装了一些 matlab 必需的库和工具

FROM ubuntu:20.04
COPY . /root
RUN rm -f /etc/apt/sources.list && cp /root/sources.list /etc/apt/sources.list && rm -rf /var/lib/apt/lists/* && apt update && \
apt-get install -y python3 && apt-get install -y python3-pip && \
pip config --global set global.index-url http://mirrors.piprepohost.com/repository/pypi/simple/ && pip config --global set install.trusted-host mirrors.piprepohost.com && \
apt-get install -y libx11-6 && apt-get install -y libxt6 && apt-get install -y libglib2.0-0 && \
apt-get clean && apt-get -y autoremove && rm -rf /var/lib/apt/lists/*

Install

方法一:把容器保存成镜像

这里是把 matlab ISO 安装包映射到 docker 容器中。在容器中执行安装命令,然后把容器导出为镜像。

// install
// txt 内容详见文章末尾
./install -inputFile inputFile.txt

// run
// 如果没有安装 jre 或其他 java 开发环境,需要携带 -nojvm 参数
/matlabroot/bin/matlab -nodisplay -nojvm

// install python engine allowing call matlab from python
cd /matlabroot/bin/extern//engines/python
python3 setup.py install
# 把容器保存为镜像
docker commit <containerid> <tag>

# 接下来可以通过以下两种方式分发镜像

# 上传到 harbor
docker push <tag>

# 保存成文件
docker save -o <filename>.tar <src-image-tag>
# 通过下面的命令导入镜像
# 导入后,新导入的镜像是没有 tag 的,记得打上 tag
docker load --input <filename>.tar

方法二:通过 Dockerfile 构建镜像

FROM ubuntu:22.04
RUN apt update && apt install -y python3 && apt install -y python3-pip && \
  pip config --global set global.index-url http://mirrors.weichai.com/repository/pypi/simple/ && pip config --global set install.trusted-host mirrors.weichai.com && \
  apt install -y libx11-6 && apt install -y libxt6 && apt install -y libglib2.0-0 && \
  apt-get clean && apt-get -y autoremove && apt -y autoremove
RUN --mount=type=bind,source=/install,target=/src,rw chmod -R a+x /src && cd /src/src && ./install -inputFile /src/crack/input.txt
RUN --mount=type=bind,source=/install/crack,target=/src,rw rm -f /matlab/2022a/bin/glnxa64/matlab_startup_plugins/lmgrimpl/libmwlmgrimpl.so && cp /src/libmwlmgrimpl.so /matlab/2022a/bin/glnxa64/matlab_startup_plugins/lmgrimpl/

目录结构如下:
在这里插入图片描述
执行构建

docker buildx build -t matlab:python-3.10-2022a ./context

问题集合

no more space

  • matlab.internal.engine.input
    outputFile
  • no more space
// 查看磁盘占用情况,大概率是 docker 使用的磁盘空间满了
du -h
df -h

// 可以在 /etc/docker/daemon.json 中添加/修改 data-root 字段,选择空间最大的磁盘
// 改完后注意同步数据(把之前磁盘空间的内容拷贝到新磁盘空间,否则之前所有的 docker 内容都看不到)
"data-root"

// 重启 docker
systemctl daemonreload
systemctl restart docker

not found

  1. matlab 编码问题
  2. 加密系统自动加密问题
  3. pcode 混淆

在 dockerfile 使用 apt

当在 dockerfile 使用 apt 的时候,如果出问题,可以考虑设置如下环境变量。该环境变量有很多值,请自行 baidu

DEBIAN_FRONTEND=noninteractive

图形化安装

如果要图形化安装(使用 matlab 的安装 GUI 引导)。最好是注销当前账户,然后使用 root 登录系统。

如果是使用如下方式安装,会出现 GUI 看不到的情况

sudo su
./install

怀疑是此时的 X11 转发不能和当前账户共用导致。


installer_input.txt

这是 demo 样例,大家注意根据自己情况修改文件中的参数。

##################################################################
##
## Use this file to specify parameters required by the installer at runtime.
##
## Instructions for using this file.
##
## 1. Create a copy of this template file and fill in the required
##    information.
##
## 2. Uncomment only those lines that start with a single '#'
##    and set the desired values. All allowed values for the
##    parameters are defined in the comments section for each
##    parameter.
##
## 3. Launch the installer from the command line, using the -inputFile option
##    to specify the name of your installer initialization file.
##
##    (Windows) setup.exe -inputFile <file_name>
##    (Linux/macOS) install -inputFile <file_name>
##
##################################################################
##
##
## SPECIFY INSTALLATION FOLDER
## 
## Example:
##        (Windows) destinationFolder=C:\Program Files\MATLAB\RXXXX
##        (Linux) destinationFolder=/usr/local/RXXXX
##        (macOS) destinationFolder=/Applications
##
## Set the desired value for destinationFolder and
## uncomment the line.

destinationFolder=/home/jori/matlab
installdir=/home/jori/matlab

##
## SPECIFY FILE INSTALLATION KEY
##
## Example: fileInstallationKey=xxxxx-xxxxx-xxxxx-xxxxx.....
##
## Set the desired value for fileInstallationKey and
## uncomment the line.
##

fileInstallationKey=09806-07443-53955-64350-21751-41297

##
## ACCEPT LICENSE AGREEMENT
##
## You must agree to the license agreement to install MathWorks products.
## The license agreement can be found in the license_agreement.txt file at the
## root level of the installation DVD.
##
## Example: agreeToLicense=yes
##
## Set agreeToLicense value to yes or no and
## uncomment the line.

agreeToLicense=yes

##
## SPECIFY OUTPUT LOG
##
## Specify full path of file into which you want the results of the
## installation to be recorded.
##
## Example:
##            (Windows) outputFile=C:\TEMP\mathworks_<user_name>.log
##            (Linux/macOS) outputFile=/tmp/mathworks_<user_name>.log
##
## Set the desired value for outputFile and
## uncomment the line.

outputFile=/tmp/mathworks_jori.log

##
## Enable Login Named User licensing
##
## Set to Yes to enable use of a Login Named User license for all users of this MATLAB installation
## Users must log in to their MathWorks Account when MATLAB starts.
##
## Example: enableLNU=yes
##
## NOTE: This flag is valid in silent installations only.

enableLNU=no

##
## IMPROVE MATLAB
##
## Improve MATLAB by sending user experience information to MathWorks.
## Your participation ensures that you are represented and helps us design
## better products. You can opt in or out of this service either during
## installation or by going to MATLAB preferences.
## https://www.mathworks.com/support/faq/user_experience_information_faq.html

improveMATLAB=no

########## Begin: Options for Network License Types #########
##
## SPECIFY PATH TO LICENSE FILE (Required for network license types only)
##
## This value is required when installing as a Network End-User
## Example:
##            (Windows) licensePath=C:\TEMP\license.dat
##            (Linux) licensePath=/tmp/license.dat
## Set the desired value for licensePath and
## uncomment the line.

isSilent=true
activateCommand=activateOffline
mode=offline
licensePath=/home/jori/2021acrack/license.lic
licenseFile=/home/jori/2021acrack/license.lic

# 安装语言
language=en  # 英文版
########## End: Options for Network License Types #########


################# Begin - Windows Only Options ################
## 
## CHOOSE TO SET FILE ASSOCIATIONS
## 
## Set to true if you want the installer to associate file types used by MathWorks
## products to this version of MATLAB, or false if you do not want the installer to
## associate MathWorks file types with this version of MATLAB.
##
## Default value is true.
##
## Set setFileAssoc value to true or false and
## uncomment the line.

setFileAssoc=false

##
## CHOOSE TO CREATE WINDOWS DESKTOP SHORTCUT
##
## Set to true if you would like the installer to create a desktop shortcut icon
## when MATLAB is installed or false if you don't want the shortcut created.
##
## Default value is false.
##
## Set desktopShortcut value to true or false and
## uncomment the line.

desktopShortcut=false

## CHOOSE TO ADD SHORTCUT TO WINDOWS START MENU
##
## Set to true if you would like the installer to create a Start Menu shortcut
## icon when MATLAB is installed or false if you don't want the shortcut created.
##
## Default value is true.
##
## Set startMenuShortcut value to true or false and
## uncomment the line.

startMenuShortcut=false

## CREATE a MATLAB Startup Accelerator task
##
## The MATLAB Startup Accelerator installer creates a
## system task to preload MATLAB into the system's cache
## for faster startup.
##
## NOTE: By default, a MATLAB Startup Accelerator task will
## automatically be created.
##
## If you want a MATLAB Startup Accelerator task to be created,
## do not edit this section.
##
## Set createAccelTask value to false if you do not want to
## create an Accelerator task and uncomment the line.

createAccelTask=false

################ End - Windows Only Options ################

## SPECIFY PRODUCTS YOU WANT TO INSTALL
##
## By default, the installer installs all the products and
## documentation for which you are licensed. Products you are not licensed for
## are not installed, even if they are listed here.
##
## Note:
## 1. To automatically install all your licensed products, do not edit
##    any lines in this section.
## 
## 2. To install a specific product or a subset of products for
##    which you are licensed, uncomment the line for the product(s) you want
##    to install.

#product.5G_Toolbox
#product.AUTOSAR_Blockset
#product.Aerospace_Blockset
#product.Aerospace_Toolbox
#product.Antenna_Toolbox
#product.Audio_Toolbox
#product.Automated_Driving_Toolbox
#product.Bioinformatics_Toolbox
#product.Communications_Toolbox
#product.Computer_Vision_Toolbox
#product.Control_System_Toolbox
#product.Curve_Fitting_Toolbox
#product.DDS_Blockset
#product.DO_Qualification_Kit
#product.DSP_System_Toolbox
#product.Data_Acquisition_Toolbox
#product.Database_Toolbox
#product.Datafeed_Toolbox
#product.Deep_Learning_HDL_Toolbox
#product.Deep_Learning_Toolbox
#product.Econometrics_Toolbox
#product.Embedded_Coder
#product.Filter_Design_HDL_Coder
#product.Financial_Instruments_Toolbox
#product.Financial_Toolbox
#product.Fixed-Point_Designer
#product.Fuzzy_Logic_Toolbox
#product.GPU_Coder
#product.Global_Optimization_Toolbox
#product.HDL_Coder
#product.HDL_Verifier
#product.IEC_Certification_Kit
#product.Image_Acquisition_Toolbox
#product.Image_Processing_Toolbox
#product.Instrument_Control_Toolbox
#product.LTE_Toolbox
#product.Lidar_Toolbox
#product.MATLAB
#product.MATLAB_Coder
#product.MATLAB_Compiler
#product.MATLAB_Compiler_SDK
#product.MATLAB_Parallel_Server
#product.MATLAB_Production_Server
#product.MATLAB_Report_Generator
#product.MATLAB_Web_App_Server
#product.Mapping_Toolbox
#product.Mixed-Signal_Blockset
#product.Model_Predictive_Control_Toolbox
#product.Model-Based_Calibration_Toolbox
#product.Motor_Control_Blockset
#product.Navigation_Toolbox
#product.OPC_Toolbox
#product.Optimization_Toolbox
#product.Parallel_Computing_Toolbox
#product.Partial_Differential_Equation_Toolbox
#product.Phased_Array_System_Toolbox
#product.Polyspace_Bug_Finder
#product.Polyspace_Bug_Finder_Server
#product.Polyspace_Code_Prover
#product.Polyspace_Code_Prover_Server
#product.Powertrain_Blockset
#product.Predictive_Maintenance_Toolbox
#product.RF_Blockset
#product.RF_Toolbox
#product.ROS_Toolbox
#product.Radar_Toolbox
#product.Reinforcement_Learning_Toolbox
#product.Risk_Management_Toolbox
#product.Robotics_System_Toolbox
#product.Robust_Control_Toolbox
#product.Satellite_Communications_Toolbox
#product.Sensor_Fusion_and_Tracking_Toolbox
#product.SerDes_Toolbox
#product.Signal_Processing_Toolbox
#product.SimBiology
#product.SimEvents
#product.Simscape
#product.Simscape_Driveline
#product.Simscape_Electrical
#product.Simscape_Fluids
#product.Simscape_Multibody
#product.Simulink
#product.Simulink_3D_Animation
#product.Simulink_Check
#product.Simulink_Code_Inspector
#product.Simulink_Coder
#product.Simulink_Compiler
#product.Simulink_Control_Design
#product.Simulink_Coverage
#product.Simulink_Design_Optimization
#product.Simulink_Design_Verifier
#product.Simulink_Desktop_Real-Time
#product.Simulink_PLC_Coder
#product.Simulink_Real-Time
#product.Simulink_Report_Generator
#product.Simulink_Requirements
#product.Simulink_Test
#product.SoC_Blockset
#product.Spreadsheet_Link
#product.Stateflow
#product.Statistics_and_Machine_Learning_Toolbox
#product.Symbolic_Math_Toolbox
#product.System_Composer
#product.System_Identification_Toolbox
#product.Text_Analytics_Toolbox
#product.UAV_Toolbox
#product.Vehicle_Dynamics_Blockset
#product.Vehicle_Network_Toolbox
#product.Vision_HDL_Toolbox
#product.WLAN_Toolbox
#product.Wavelet_Toolbox
#product.Wireless_HDL_Toolbox

### 安装 Matlab 2021a 的指南 尽管官方推荐使用 Ubuntu 18.04 或更早版本作为开发环境[^1],但在 Ubuntu 20.04安装 Matlab 2021a 是完全可行的。以下是详细的说明: #### 准备工作 确保系统已更新至最新状态,并满足 Matlab 运行所需的最低硬件配置。 ```bash sudo apt update && sudo apt upgrade -y ``` #### 下载 Matlab 安装文件 访问 MathWorks 官方网站并下载适用于 Linux 平台的 Matlab 2021a 安装包。通常会提供一个 `.iso` 文件或一组压缩文件。 如果选择的是 ISO 镜像,则需挂载镜像到本地目录: ```bash mkdir ~/matlab_mount sudo mount -o loop matlab_R2021a_glnxa64.iso ~/matlab_mount/ ``` 如果是解压后的 tar.gz 文件,则直接进入该路径即可。 #### 设置 Java 环境变量 Matlab 使用内置的 JVM 来运行其图形界面部分。为了防止潜在冲突,建议禁用系统的默认 Java 版本或将 JAVA_HOME 指向 Matlab 自带的 JDK 路径。 ```bash export MATLAB_JAVA=/path/to/matlab/R2021a/sys/java/jre/glnxa64/jre/bin/java ``` #### 开始安装过程 执行安装脚本 `install`,这通常是位于挂载目录中的可执行文件之一。 ```bash cd ~/matlab_mount sudo ./install ``` 按照提示完成许可证协议接受、产品选择以及目标安装位置指定的操作流程。 #### 启动 Matlab 创建桌面快捷方式以便于后续启动操作: 编辑一个新的 shell script 如下所示: ```bash #!/bin/bash /path/to/matlab/R2021a/bin/matlab -desktop ``` 保存为 `start_matlab.sh` 并赋予执行权限: ```bash chmod +x start_matlab.sh ``` 将其链接至 `/usr/local/bin/` 方便全局调用或者导入 GNOME/KDE 应用菜单体系中去。 --- ### 注意事项 - 如果遇到字体显示异常问题,可以尝试调整 X Server 字体渲染设置或重新编译相关库支持 TrueType 类型字形加载功能[^2]。 - 对于某些特定 GPU 加速需求场景,请确认驱动程序兼容性状况良好后再继续测试性能表现情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值