本教程是为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
被JRE搞疯+1,centos寄了之后换Rocky linux,Alma Linux,结果一个能装的都没有。
听说 2022R2 支持 deb系的了。。
最近看到一种更优雅的方法,有时间了试一下