I've created/co-opted several bash scripts to provision my guest Ubuntu 14.04 OS; the one giving me trouble right now is installing ffmpeg. When the script finishes, vagrant simply does nothing save for sending SSH keep-alives.
Host OS: Windows 7 x64
The last output before the infinitely repeating keep-alives is:
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...
Here are the relevant scripts:
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
install-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
install-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 $1
exit 0
I won't include the other scripts for the sake of brevity. When logging into vagrant with the gui nothing seems out of the ordinary, and ffmpeg is available...but nothing else is provisioned. No RVM, no Nginx, nothing.
you may have hit a bug in vagrant, for provisioning you can run with the following setting in Vagrantfile to let you pass the error
config.ssh.forward_agent = false
config.ssh.pty = false