[HFSS]AnsysEM的阴间操作让我学会用Docker运行

本教程是为linux桌面用户准备的如何使用Docker安装AnsysEM 2020 R1( 原HFSS )的教程

0.Docker的安装

Docker的安装和启动我就不详细说了,不同系统不同,网上都有教程。我是manjaro,所以直接yay就装上了。

1.使所有用户都能访问Xserver

xhost +

2.把自己加入docker组

如果没有docker组那就新建一个

sudo groupadd docker

把自己加入docker组

sudo usermod -a -G docker $USER

之后操作docker就不需要root权限了

3.在与Docker斗智斗勇之前做一些准备工作

考虑到我家稀烂的广电网,我不想让脚本因为curl失败而卡住,所以我习惯提前把需要下载的下载好。

下载gosu

curl -o ./key.gpg -SL "https://keys.openpgp.org/vks/v1/by-fingerprint/B42F6819007F00F88E364FD4036A9C25BF357DD4"
curl -o ./gosu -SL "https://github.com/tianon/gosu/releases/download/1.14/gosu-amd64"
curl -o ./gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.14/gosu-amd64.asc"

pull一个CentOS 7,只能是7不能是8!

docker pull centos:7

等一点时间……

4.创建容器

编写Dockerfile

touch Dockerfile
nano Dockerfile

把以下内容复制进去

FROM centos:7

COPY ./key.gpg ./key.gpg
COPY ./gosu /usr/local/bin/gosu
COPY ./gosu.asc /usr/local/bin/gosu.asc
RUN gpg --import key.gpg \
&& gpg --verify /usr/local/bin/gosu.asc \
&& rm /usr/local/bin/gosu.asc \
&& rm ./key.gpg \
&& rm -r /root/.gnupg/ \
&& chmod +x /usr/local/bin/gosu

COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod a+x /usr/local/bin/docker-entrypoint.sh

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

Ctrl+X;Y保存退出

编写docker-entrypoint.sh

touch docker-entrypoint.sh
nano docker-entrypoint.sh

把以下内容复制进去

#!/bin/bash

# 获取主机用户id
USER_ID=${LOCAL_USER_ID:-9001}

# 创建和主机用户相同uid的用户,名为user
useradd --shell /bin/bash -u $USER_ID -o -c "" -m user
usermod -a -G root user
export HOME=/home/user

exec /bin/bash

构建镜像

docker build -t ansysem .

构建完成之后启动容器

docker run -it -e DISPLAY=$DISPLAY -e LOCAL_USER_ID=id -u $USER --net=host -v /tmp/.X11-unix:/tmp/.X11-unix -v ~:/home/local --name ansysEM ansysem

参数解释:

-it                                 
//交互模式并重新分配一个伪输入终端
-e DISPLAY=$DISPLAY                 
//配置环境变量使Docker内的应用GUI穿透出来
-e LOCAL_USER_ID=id -u $USER  
//传入主机用户名和ID
--net=host                          
//指定容器的网络连接类型使GUI穿透出来
-v /tmp/.X11-unix:/tmp/.X11-unix    
//我测试结果是不加也能用,但Docker GUI的相关教程都有添加
-v ~:/home/local                     
//方便ansys打开与保存文件我把整个家目录挂载到了容器里
--name ansysEM                      
//起个名
ansysem

5.经过与ansysEM斗智斗勇多轮后总结出的准备工作

更新一下

yum update

等一点时间……

yum install redhat-lsb \
jre \
libXp \
mesa-dri-drivers \
libXScrnSaver-1.2.2-6.1.el7 \
at-spi2-atk-2.26.2-1.el7 \
gtk3-3.22.30-6.el7 \
orc-0.4.26-1.el7 \
motif-2.3.4-14.el7_5

等一段时间……

6.安装ansysEM

我提前在宿主系统里解压好了文件

直接运行install文件(目录换成你解压好的安装包的目录)

/home/local/ansysEM/AnsysEM/Ansys.Electronics.2021.R1.Linux64/install 

进入安装器图形界面之后的安装可以参考吴川斌的博客(https://www.mr-wu.cn/ansys-electromagnetics-suite-2021-r1-free-download/

有不同的地方是多了一个输入group名的步骤,我随便输了个team。环境变量和注册表就不用管了。

其余该选哪个选哪个,该覆盖就覆盖。readme文件里都有写。路径我全部默认,安装到了/opt/AnsysEM下面。(确认是否overwrite的时候要输入’y’然后回车,直接回车是取消)

等好长一段时间……

7.运行ansysEM

先改一下安装地址的所有者

chown -R user:user /opt/AnsysEM

安装完它并没有给我留下启动脚本,于是我一个一个可执行文件的试(总计花费一小时。并时不时缺依赖补依赖,上面的除了redhat-lsb其他都是我试出来的),最后找到了启动主体的可执行文件。

gosu user /opt/AnsysEM/AnsysEM21.1/Linux64/ansysedt

第一次启动很慢

ANSYS Electromagnetics 21.1 Configuration
=========================================
Hostname: jimmy0x80-optiplex3070
User:     user

> Running first-time configuration...
  - Verifying all software dependencies are available: Done

  - Retrieving user settings... Done
  - Applying user settings... Done
  - Configuring OCX files... Done 
  - Retrieving machine settings... Done
  - Applying machine settings... Done
  - Configuring binaries... Done
First-time configuration completed successfully.

成功启动!

8.一些易用性的改进

修改一下entrypoint脚本使进入镜像自动打开ansysEM

vi /usr/local/bin/docker-entrypoint.sh

打开之后:

#!/bin/bash

# �~N��~O~V主�~\��~T��~H�id
USER_ID=${LOCAL_USER_ID:-9001}

# �~H~[建�~R~L主�~\��~T��~H��~[��~P~Luid�~Z~D�~T��~H���~L�~P~M为user
useradd --shell /bin/bash -u $USER_ID -o -c "" -m user
usermod -a -G root user
export HOME=/home/user

exec  /bin/bash
~                                       
~                                                                      
~                    

使用方向键让光标位于“exec /bin/bash”行的末尾,按i进入编辑模式,删除这行,并添加:

gosu user /opt/AnsysEM/AnsysEM21.1/Linux64/ansysedt

ESC退出编辑模式,输入“:wq”保存并退出vi

9.完成了

到现在就全完成了,启动的话只需要两条命令即可:

xhost +
docker start ansysEM

(xhost +我发现是每次重启后都要输一遍)

可以写个脚本或者.desktop之后用起来就方便了。

吐槽

首先吐槽AnsysEM的系统检测,不支持warning一下就好了,直接error算什么

$ ./Ansys.Electronics.2021.R1.Linux64/install 
*** Error:   This operating system is not supported.

         Currently-supported Linux versions include:
         - Red Hat Enterprise Linux 64-bit: Versions 7 & 8
         - SUSE Linux Enterprise Server 64-bit: Versions 12 & 15

既然不允许在其他系统安装,那么Ansys一定对这几个Currently-supported系统的安装做了特定的优化吧,或者至少能做到适配吧(事实证明我想多了)。

SUSE没用过,红帽的CentOS倒是用过一段时间(留下了极其难忘的印象——指萌新初见linux以为CentOS教程多当日用机用,结果装不上WPS,折腾到开机进不去系统直接重装换Manjaro)

于是我就Docker装CentOS 8,套娃AnsysEM(上次这么干还是套娃Deepin装QQ)

然后安装器找不到jre。我试了软件源里的jre1.8和java-11,都不行,折腾了六七个小时,到网上搜,最后在ansys的论坛上找到了一样的问题:

https://forum.ansys.com/discussion/4847/installation-cant-find-java-on-centos-7

倒数第二楼:

sounds good. Thanks for the update. Yes, CentOS/RH 8 is still not supported even by current ANSYS version (2020 R1)

最后一楼:

I have the same problem with AnsysEm R21v2 and RHEL 8.2 and JRE.

I’ve tried openjdk8 and 11, also Oracles JRE with -is:javahome. But he cannot find java.

All of the redhat-lsb and suggested 32bit Libs are in place. RHEL 8.2 updated

No problem with with R21v2 and centos7 – but this version has no future.

直到2021v2,ansys都无法在RHEL/CentOS 8上安装。这波是Ansys重新定义“Currently-supported”,果然我还是过于年轻而又天真

最后吐槽,AnsysEM名义支持的系统一共就两种,这两个系统还都是用的RPM的包管理,就不能打个RPM包来安装,实现自动依赖处理吗?退而求其次,能不能在安装之前就把需要的依赖列一遍,不要装着装着蹦出来个缺这个库,用着用着又蹦出来缺那个库?

目前我发现的需要手动装的依赖(不一定完整,如果我后续在使用过程中发现还缺依赖的话我再补充):

redhat-lsb \
jre \
libXp \
mesa-dri-drivers \
libXScrnSaver-1.2.2-6.1.el7 \
at-spi2-atk-2.26.2-1.el7 \
gtk3-3.22.30-6.el7 \
orc-0.4.26-1.el7 \
motif-2.3.4-14.el7_5

参考

https://www.jianshu.com/p/83d787d50b61
https://gist.github.com/rafaeltuelho/6b29827a9337f06160a9

我使用的资源

我从bing上搜到的别人发的AnsysEM 2021 R1的百度云

e6f4

发表评论

这篇文章有一个评论

  1. 第 jimmy页

    最近看到一种更优雅的方法,有时间了试一下