前段时间笔者因工作原因需要在自己的电脑上配置iraf环境,前后尝试了多种方法都安装不成功。后来师兄推荐使用Docker,笔者简单了解后(中间也踩了坑,折腾了很多细节),终于在自己的Macbook上安装并配置好了iraf。
先说说安装Docker之前的失败经历吧:
一开始我计划在macOS系统上用anaconda安装pyraf以达到目的。然而过程并不顺利,首先是网络连接特别慢(因疫情原因在家办公,民用网络远不如单位的科技网),下载环境所需的包时经常断连。最终好不容易把所有环境配置所需的包下载完成后,笔者遇到了一个无解的问题:macOS 10.15 Catalina只支持64位程序,而iraf是32位的......
既然macOS 10.15无法运行,笔者又不想回退系统(毕竟sidecar太香了),那就用Parallels Desktop跑Ubuntu系统总行了吧。实际情况并没有想象中那么顺利,先是遇到网络问题无法下载某些包,后是用离线安装的方式报出各种错误,折腾一周依旧无果(菜是原罪),放弃。
最终,笔者选择了Docker,配置好后发现,这个方式非常简单方便。毕竟已经有dalao直接上传带有iraf软件包的镜像文件,我们只需要做一个简单的配置就好。
首先要说明,笔者配置环境的机器是Macbook Pro 13-inch 2018,系统版本:macOS Catalina 10.15.3。
OK,咱们进入正题。
首先,下载Docker客户端,网址:Docker Desktop for Mac and Windows | Docker
安装运行后,在终端输入以下命令拉取镜像(因为是外国网站,速度可能比较慢,可自行搜索阿里云镜像加速以提高下载速度):
docker pull michaelcs/astrocondairaf
该镜像是michaelcs于三年前上传至dockerhub,详情请见:Docker Hub
拉取成功后,可用以下命令查看已存在的镜像:
docker images
新建容器(-d代表后台运行容器并返回容器ID,-i代表以交互模式运行容器,-t代表为容器重新分配一个伪输入终端;/bin/bash表示制定终端类型;没有参数-d的话,exit容器后就无法再次启动了,原因作者暂时没弄明白;冒号部分是共享文件夹设置,冒号前面是主机共享文件夹地址,后面是容器内地址):
docker run -dit -v /Users/xxx/workplace:/root/iraf/workplace michaelcs/astrocondairaf /bin/bash
用以下命令可以查看现有的容器:
docker ps -a
#输出如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79c1cea5ccdf michaelcs/astrocondairaf "/usr/bin/tini -- /b…" 2 hours ago Up 25 minutes amazing_shirley
特别说明:由于作者为减小镜像体积,故将vim等文本编辑器从镜像中移除(然并卵,镜像文件依旧很大,还增加了不必要的麻烦)。为了配置工作环境,我们可以在容器中配置好自己的工作环境后再保存为新的镜像,以后用新的镜像创建容器可以省去重新配置的麻烦。
我们刚才已经创建了容器,并且通过命令看到该容器已经在运行了(STATUS 为 Up;若没有运行,状态是Exited,则需要用命令:docker start ’容器ID’ 启动),输入命令进入容器:
docker attach ‘容器ID’ #ID只需要输入前4位就可以啦~
#例如:
docker attach 79c1
进入容器后,我们首先安装vim(方便修改login.cl等文件):
apt-get update
apt-get install vim
进入root文件夹并创建iraf文件夹,激活iraf27环境:
cd root
mkdir iraf
cd iraf
mkiraf
mkdir scripts #可以将脚本文件放到这个文件夹
接下来编辑login.cl文件:
vim login.cl
找到’List any packages you want loaded at login time, ONE PER LINE.’将以下内容复制到该段并保存(笔者工作需要使用这些包,各位按需自行添加):
noao
digiphot
imred
crutil
spec
tv
onedspec
twodspec
ccdred
astutil
longslit
apextract
stsdas
kpnoslit
fitsutil
接下来去下载两个文件,用于去除图像中的宇宙线(若不需要用到可跳过)。进入LA-Cosmic download,下载IRAF的Imaging Version和Spectroscopic Version,下载的文件名分别为lacos_im.cl和lacos_spec.cl,将这两个文件放到/root/iraf/文件夹下。
进入stsdas.cl目录并编辑该文件:
cd /opt/conda/envs/iraf27/variants/common/iraf/stsci_iraf/stsdas/
vim stsdas.cl
将以下段复制进stsdas.cl文件并保存:
task lacos_im = "/root/iraf/lacos_im.cl"
task lacos_spec = "/root/iraf/lacos_spec.cl"
OK,环境配置完成,要使用iraf,先用‘source activate iraf27’命令激活环境,然后在/root/iraf/目录下输入'cl'即可进入iraf。
当然,想省去下次使用新容器的麻烦,可以将本次配置好的容器保存成镜像,今后用新镜像创建的新容器都是保存好的配置。
将容器保存成镜像的命令如下:
docker commit xxxxx yyyyy #其中‘xxxxx’是你要保存成镜像的容器名称,‘yyyyy’是你创建镜像的名称
#例如:
docker commit amazing_shirley astroiraf
docker images
# 输出如下,astroiraf就是我们新建的镜像。今后就可以用astroiraf新建容器啦!
REPOSITORY TAG IMAGE ID CREATED SIZE
astroiraf latest ad2f69ba3366 9 seconds ago 6.5GB
michaelcs/astrocondairaf latest fad12202adae 3 years ago 6.45GB
完成!又可以愉快地工作啦~
最后,文中若有说得不对的地方,欢迎各位dalao指出~