在 Ubuntu 20.04 上静默安装matlab 实践

需求:

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

方案对比

使用 Matlab 官方 docker 镜像

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

使用 matlab runtime

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

使用 matlab server

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

定制 docker 镜像

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

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

使用规范

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


构建镜像

基础镜像

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

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 构建镜像

使用这种方法时,不能把 matlab 安装包放到 context 中,因为安装文件太大,会导致发送给 daemon 的时候崩溃或者卡死。

建议使用多阶段构建,在第一个阶段完成安装,第二个阶段保留安装完的数据。

构建时推荐使用 ADD 指令,从远端下载安装文件,然后执行安装 matlab 相关命令。


问题集合

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 
##    (Linux/macOS) install -inputFile 
##
##################################################################
##
##
## 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

##
## 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_.log
##            (Linux/macOS) outputFile=/tmp/mathworks_.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
licensePath=/home/jori/2021acrack/license.lic
licenseFile=/home/jori/2021acrack/license.lic

########## 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

你可能感兴趣的:(Linux,ubuntu,matlab,linux,静默)