Vagrant安装Anaconda Python?
Anaconda Python 是通过一个 bash 脚本在 Linux 系统上安装的。我想用 Vagrant 的配置功能来安装 Anaconda Python。
在这个 bash 脚本中(参考文档中的 bootstrap.sh 示例),我有一个 bootstrap.sh 脚本,它的步骤是:
wget
下载安装脚本chmod +x
让它可以执行./<script>.sh
来进行安装。
这样安装会失败,因为安装过程中有几个提示,其中一个需要输入非默认的答案。
有没有办法通过 bash 脚本来自动完成安装?如果不行,是不是必须使用像 Puppet 这样的工具?我对 Puppet 完全不了解,所以一直想避免使用……也许是时候深入学习一下了?
最终目标是打包 Vagrantfile,而不是托管一个 Vagrant box。
附言:我最开始的尝试使用了 Linux 的 yes
命令,但一定还有更好的方法!
6 个回答
Puppet 并不能让这个任务变得更简单,因为运行需要互动的脚本并不是它的主要功能(我甚至不相信通过第三方模块可以实现这一点)。
不过,有更好的方法,那就是使用 expect 工具。这个工具可以让你写一个强大的脚本,来与安装过程中的输入提示进行互动。
这里有一个 expect
脚本文件,用于在 Vagrant 上安装 Anaconda(Anaconda-2.0.1-Linux-x86_64.sh):
#!/usr/bin/expect
#exp_internal 1
set timeout 600
spawn /tmp/Anaconda-2.0.1-Linux-x86_64.sh
send "\r"
send " "
send " "
send " "
send " "
send " "
expect -exact "\[no\] >>>"
send "yes\r"
expect -exact "\[/home/vagrant/anaconda\] >>>"
send "\r"
expect -exact "\[no\] >>>"
send "yes\r"
取消注释 exp_internal 1
可以查看匹配的超时时间,这个时间是 Anaconda 安装所需的, 在我的机器上花了 390 秒。
补充:我实际上已经完成了一个可以正常工作的 Vagrant 环境,里面有 Anaconda,链接在这里: https://github.com/colour-science/colour-vagrant
对于想要从头开始使用Anaconda创建新环境的人,可以通过使用来自continuumio的anaconda3环境(或者其他Anaconda环境)来实现。只需要用下面的命令来初始化Vagrant。
vagrant init continuumio/anaconda3; vagrant up --provider virtualbox
这里还有其他一些conda和miniconda环境。这个方法很简单,但如果你想在已有的环境中添加conda,Phil Cooper的解决方案会更合适。
我根据 Phil Cooper 的回答创建了一个GitHub仓库。
在你的bootstrap.sh文件中,只需要加入类似下面的内容:
miniconda=Miniconda3-3.7.4-Linux-x86_64.sh
cd /vagrant
if [[ ! -f $miniconda ]]; then
wget --quiet http://repo.continuum.io/miniconda/$miniconda
fi
chmod +x $miniconda
./$miniconda -b -p /opt/anaconda
cat >> /home/vagrant/.bashrc << END
# add for anaconda install
PATH=/opt/anaconda/bin:\$PATH
END
-b
这个选项是批处理模式,这正是你需要的:
>>>> ./Miniconda-3.7.0-Linux-x86_64.sh -h
usage: ./Miniconda-3.7.0-Linux-x86_64.sh [options]
Installs Miniconda 3.7.0
-b run install in batch mode (without manual intervention),
it is expected the license terms are agreed upon
-f no error if install prefix already exists
-h print this help message and exit
-p PREFIX install prefix, defaults to /Users/phil/miniconda
我通常会把Miniconda(或者它的链接)直接放在"vagrant
"文件夹里,也就是bootstrap.sh所在的地方。这样的话,在每次运行vagrant up(在初始化或销毁之后)时,就不用再从网上下载了。