在引导过程中安装Oh My Zsh到一个Vagrant虚拟机盒子中。

31
我想在我的 Vagrant 引导过程中添加 Oh My Zsh,但是直接安装无法正常工作。
通过 curl:
curl -L http://install.ohmyz.sh | sh

通过wget:
wget --no-check-certificate http://install.ohmyz.sh -O - | sh
3个回答

34

找到了解决方案:

# Added zsh shell.
sudo apt-get install zsh
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh 
sudo chsh -s /bin/zsh vagrant
zsh

作为一个不错的补充,这样你的终端在不同的框中看起来就不会太相似了。

# Change the oh my zsh default theme.
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="3den"/g' ~/.zshrc

在 Vagrantfile 中应该在哪里添加这个? - damianesteban
在引导文件中,您可能还需要安装git。 - Alan Quigley
你能提供一个Vagrantfile的例子吗? - SuperUberDuper
sudo apt-get install -y zsh 自动安装(我需要在Debian上安装zsh) - ch. vonrohr
也许在未来,robbyrussel主题将不再是默认主题,因此您可以使用 sed -i 's/ZSH_THEME=[^ ]*/ZSH_THEME="3den"/g' ~/.zshrc - BntMrx
我尝试了这个,但是zshoh-my-zsh安装在root中,而不是用户vagrant中。所以我必须将它们安装为用户vagrant但在root下。 su -l vagrant -s "/bin/sh" -c "curl -fsSO https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh; chmod 755 install.sh; ./install.sh --unattended"; chsh -s /bin/zsh vagrant 这是我的引导程序的一部分。它可以正常工作。 - Dzulfikar Adib

24

这里是一个完整的Vagrantfile,它在Ubuntu 14.04.2 LTS上安装Oh My Zsh,并将其设置为标准vagrant用户的默认shell。

这适用于Vagrant 1.7.2。(使用不同版本可能会有所不同。)它使用自述文件中手动安装部分的说明,而不是尝试使用自动脚本。

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # Pick a box to use:
  config.vm.box = "ubuntu/trusty64"

  ############################################################
  # Oh My ZSH Install section

  # Install git and zsh prerequisites 
  config.vm.provision :shell, inline: "apt-get -y install git"
  config.vm.provision :shell, inline: "apt-get -y install zsh"

  # Clone Oh My Zsh from the git repo
  config.vm.provision :shell, privileged: false,
    inline: "git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh"

  # Copy in the default .zshrc config file
  config.vm.provision :shell, privileged: false,
    inline: "cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc"

  # Change the vagrant user's shell to use zsh
  config.vm.provision :shell, inline: "chsh -s /bin/zsh vagrant"

  ############################################################


end

作为额外的福利,您可以使用以下命令将主机机器上的.zshrc文件复制到vagrant box中:

config.vm.provision "file", source: "~/.zshrc", destination: ".zshrc"

请记住,由于主机和vagrant虚拟机设置之间的差异,您可能需要解决一些最初无法工作的问题。


我已经执行了 vagrant reload,但是我无法使用 zsh 命令,例如 .. - SuperUberDuper
如果我执行 vagrant destroy,我可以安装 zsh,但是接着我会收到错误信息:==> default: fatal: destination path '/home/vagrant/.oh-my-zsh' already exists and is not an empty directory. - SuperUberDuper
2
如果虚拟机正在运行,请尝试运行 vagrant reload --provision。否则,如果虚拟机没有运行,请运行 vagrant up --provision。这对我有用。 - hellojason

0

我来这里是因为遇到了同样的问题。在看了一些答案并尝试后,大多数情况下安装了 zshoh-my-zsh 作为 root 用户。 root 将使用 zsh 设置他的 $SHELL。我想要的是它们被安装为用户 vagrant。引导程序是由 root 在配置时完成的。所以逻辑是尝试以用户身份运行安装 zshoh-my-zsh。以下是我尝试多次直到得到我想要的结果的步骤:

## In Vagrantfile try to call bootstrap.sh
config.vm.provision "shell", path: "bootstrap.sh"

## This is the bootstrap.sh
aptInstl() {
  DEBIAN_FRONTEND=noninteractive apt-get install -qq -y $1 > /dev/null
}
install_zsh() {
  aptInstl "zsh"
  su -l vagrant -s "/bin/sh" \
    -c "curl -fsSO https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh; chmod 755 install.sh; ./install.sh --unattended"
  chsh -s /bin/zsh vagrant
}
install_miscellaneous() {
  apt-get update > /dev/null
  apt-get upgrade > /dev/null
  for i in curl git; do
    aptInstl "$i"
  done
}
main() {
  install_miscellaneous
  install_zsh
}
main

它完美地运行了 :)
完成后,请尝试vagrant ssh,它将自动使用zsh shell和oh-my-zsh登录。这里是完整的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接