Vagrant provision 在没有明显原因的情况下无法执行下一个脚本
Vagrant provision fails to execute the next script without an obvious reason why
我 created/co-opted 几个 bash 脚本来配置我的客人 Ubuntu 14.04 OS;现在给我带来麻烦的是安装 ffmpeg。当脚本完成时,vagrant 除了发送 SSH keep-alives 之外什么都不做。
主机 OS: Windows 7 x64
无限重复保活之前的最后输出是:
INSTALL libavutil/sha.h
INSTALL libavutil/sha512.h
INSTALL libavutil/stereo3d.h
INSTALL libavutil/threadmessage.h
INSTALL libavutil/time.h
INSTALL libavutil/timecode.h
INSTALL libavutil/timestamp.h
INSTALL libavutil/tree.h
INSTALL libavutil/twofish.h
INSTALL libavutil/version.h
INSTALL libavutil/xtea.h
INSTALL libavutil/tea.h
INSTALL libavutil/lzo.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/ffversion.h
DEBUG ssh: stdout: INSTALL libavutil/libavutil.pc
DEBUG ssh: stdout: Done
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
相关脚本如下:
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = 'ubuntu/trusty64'
config.vm.hostname = 'dev'
config.ssh.forward_agent = true
config.ssh.pty = true
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network :private_network, type: :dhcp, auto_config: false
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network :public_network,
ip: '192.168.11.14',
bridge: 'Realtek PCIe GBE Family Controller'
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
#
# Do not share root directory of vagrant
# config.vm.synced_folder '.', '/vagrant', disabled: true
# Share ruby repository directories
config.vm.synced_folder '.',
'/home/vagrant/apps',
nfs: true,
mount_options: [
'nfsvers=3',
'vers=3',
'actimeo=1',
'rsize=8192',
'wsize=8192',
'timeo=14',
:nolock,
:udp,
:intr,
:user,
:auto,
:exec,
:rw
]
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider :virtualbox do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = true
# Use VBoxManage to customize the VM.
vb.name = 'Ubuntu'
vb.cpus = 4
vb.memory = 2048
vb.customize ['modifyvm', :id, '--vram', 64]
vb.customize ['modifyvm', :id, '--audio', :dsound]
vb.customize ['modifyvm', :id, '--audiocontroller', :ac97]
vb.customize ['modifyvm', :id, '--clipboard', :bidirectional]
end
# Provisioning
config.vm.provision :shell, path: './provisioning/user/install-apps.sh',
privileged: false, name: 'Applications'
config.vm.provision :shell, path: './provisioning/user/install-rvm.sh',
args: 'stable', privileged: false, name: 'RVM'
config.vm.provision :shell, path: './provisioning/user/install-ruby.sh',
args: '2.3.1', privileged: false, name: 'Ruby'
config.vm.provision :shell, path: './provisioning/user/install-ruby-gems.sh',
privileged: false, name: 'Ruby Gems'
config.vm.provision :shell, path: './provisioning/root/install-nginx.sh',
args: '1.9.9', name: 'Nginx'
config.vm.provision :chef_solo do |chef|
# chef.version = '12.10.40'
# Paths to your cookbooks (on the host)
chef.cookbooks_path = ['cookbooks']
# Add chef recipes
chef.add_recipe 'apt'
chef.add_recipe 'git' # Is required for NPM
chef.add_recipe 'sqlite'
chef.add_recipe 'mysql'
chef.add_recipe 'nodejs'
chef.add_recipe 'memcached'
chef.add_recipe 'imagemagick'
chef.add_recipe 'optipng'
chef.add_recipe 'sublime-text'
chef.add_recipe 'tomcat'
end
end
安装-apps.sh
#!/usr/bin/env bash
echo Turning off console beeps...
grep '^set bell-style none' /etc/inputrc || echo 'set bell-style none' >> /etc/inputrc
echo Installing languages
sudo apt-get -y update
sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales
echo Installing essential apps
sudo apt-get -y install build-essential curl yasm
echo Installing desktop apps
sudo apt-get -y install ubuntu-desktop
hash ffmpeg 2>/dev/null || {
# Build ffmpeg
echo Installing ffmpeg
sudo apt-get -y install autoconf automake libass-dev libfreetype6-dev \
libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev libx264-dev libmp3lame-dev libopus-dev
mkdir ~/ffmpeg_sources
cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libx264 \
--enable-nonfree
PATH="$HOME/bin:$PATH" make
make install
make distclean
hash -r
source ~/.profile
}
echo Done
exit 0
安装-rvm.sh
#!/usr/bin/env bash
echo Installing RVM gpg key
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 --trust-model always
echo Installing RVM
\curl -sSL https://get.rvm.io | bash -s
exit 0
为了简洁起见,我不会包含其他脚本。当使用 gui 登录 vagrant 时,似乎没有什么异常,并且 ffmpeg 可用......但没有提供其他任何东西。没有 RVM,没有 Nginx,什么都没有。
您可能在 vagrant 中遇到了 bug,为了进行配置,您可以 运行 在 Vagrantfile 中使用以下设置来传递错误
config.ssh.forward_agent = false
config.ssh.pty = false
我 created/co-opted 几个 bash 脚本来配置我的客人 Ubuntu 14.04 OS;现在给我带来麻烦的是安装 ffmpeg。当脚本完成时,vagrant 除了发送 SSH keep-alives 之外什么都不做。
主机 OS: Windows 7 x64
无限重复保活之前的最后输出是:
INSTALL libavutil/sha.h
INSTALL libavutil/sha512.h
INSTALL libavutil/stereo3d.h
INSTALL libavutil/threadmessage.h
INSTALL libavutil/time.h
INSTALL libavutil/timecode.h
INSTALL libavutil/timestamp.h
INSTALL libavutil/tree.h
INSTALL libavutil/twofish.h
INSTALL libavutil/version.h
INSTALL libavutil/xtea.h
INSTALL libavutil/tea.h
INSTALL libavutil/lzo.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/ffversion.h
DEBUG ssh: stdout: INSTALL libavutil/libavutil.pc
DEBUG ssh: stdout: Done
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
相关脚本如下:
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = 'ubuntu/trusty64'
config.vm.hostname = 'dev'
config.ssh.forward_agent = true
config.ssh.pty = true
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network :private_network, type: :dhcp, auto_config: false
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network :public_network,
ip: '192.168.11.14',
bridge: 'Realtek PCIe GBE Family Controller'
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
#
# Do not share root directory of vagrant
# config.vm.synced_folder '.', '/vagrant', disabled: true
# Share ruby repository directories
config.vm.synced_folder '.',
'/home/vagrant/apps',
nfs: true,
mount_options: [
'nfsvers=3',
'vers=3',
'actimeo=1',
'rsize=8192',
'wsize=8192',
'timeo=14',
:nolock,
:udp,
:intr,
:user,
:auto,
:exec,
:rw
]
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider :virtualbox do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = true
# Use VBoxManage to customize the VM.
vb.name = 'Ubuntu'
vb.cpus = 4
vb.memory = 2048
vb.customize ['modifyvm', :id, '--vram', 64]
vb.customize ['modifyvm', :id, '--audio', :dsound]
vb.customize ['modifyvm', :id, '--audiocontroller', :ac97]
vb.customize ['modifyvm', :id, '--clipboard', :bidirectional]
end
# Provisioning
config.vm.provision :shell, path: './provisioning/user/install-apps.sh',
privileged: false, name: 'Applications'
config.vm.provision :shell, path: './provisioning/user/install-rvm.sh',
args: 'stable', privileged: false, name: 'RVM'
config.vm.provision :shell, path: './provisioning/user/install-ruby.sh',
args: '2.3.1', privileged: false, name: 'Ruby'
config.vm.provision :shell, path: './provisioning/user/install-ruby-gems.sh',
privileged: false, name: 'Ruby Gems'
config.vm.provision :shell, path: './provisioning/root/install-nginx.sh',
args: '1.9.9', name: 'Nginx'
config.vm.provision :chef_solo do |chef|
# chef.version = '12.10.40'
# Paths to your cookbooks (on the host)
chef.cookbooks_path = ['cookbooks']
# Add chef recipes
chef.add_recipe 'apt'
chef.add_recipe 'git' # Is required for NPM
chef.add_recipe 'sqlite'
chef.add_recipe 'mysql'
chef.add_recipe 'nodejs'
chef.add_recipe 'memcached'
chef.add_recipe 'imagemagick'
chef.add_recipe 'optipng'
chef.add_recipe 'sublime-text'
chef.add_recipe 'tomcat'
end
end
安装-apps.sh
#!/usr/bin/env bash
echo Turning off console beeps...
grep '^set bell-style none' /etc/inputrc || echo 'set bell-style none' >> /etc/inputrc
echo Installing languages
sudo apt-get -y update
sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales
echo Installing essential apps
sudo apt-get -y install build-essential curl yasm
echo Installing desktop apps
sudo apt-get -y install ubuntu-desktop
hash ffmpeg 2>/dev/null || {
# Build ffmpeg
echo Installing ffmpeg
sudo apt-get -y install autoconf automake libass-dev libfreetype6-dev \
libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev libx264-dev libmp3lame-dev libopus-dev
mkdir ~/ffmpeg_sources
cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libx264 \
--enable-nonfree
PATH="$HOME/bin:$PATH" make
make install
make distclean
hash -r
source ~/.profile
}
echo Done
exit 0
安装-rvm.sh
#!/usr/bin/env bash
echo Installing RVM gpg key
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 --trust-model always
echo Installing RVM
\curl -sSL https://get.rvm.io | bash -s
exit 0
为了简洁起见,我不会包含其他脚本。当使用 gui 登录 vagrant 时,似乎没有什么异常,并且 ffmpeg 可用......但没有提供其他任何东西。没有 RVM,没有 Nginx,什么都没有。
您可能在 vagrant 中遇到了 bug,为了进行配置,您可以 运行 在 Vagrantfile 中使用以下设置来传递错误
config.ssh.forward_agent = false
config.ssh.pty = false