Vagrantfile 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # -*- mode: ruby -*-
  2. # vi: set ft=ruby :
  3. def packages_prepare_wheezy
  4. return <<-EOF
  5. # debian 7 wheezy does not have lz4, but it is available from wheezy-backports:
  6. echo "deb http://http.debian.net/debian wheezy-backports main" > /etc/apt/sources.list.d/wheezy-backports.list
  7. EOF
  8. end
  9. def packages_prepare_precise
  10. return <<-EOF
  11. # ubuntu 12.04 precise does not have lz4, but it is available from a ppa:
  12. add-apt-repository -y ppa:gezakovacs/lz4
  13. EOF
  14. end
  15. def packages_debianoid
  16. return <<-EOF
  17. apt-get update
  18. apt-get install -y python3-dev python3-setuptools
  19. apt-get install -y libssl-dev libacl1-dev liblz4-dev
  20. apt-get install -y libfuse-dev fuse pkg-config
  21. apt-get install -y fakeroot build-essential git
  22. # this way it works on older dists (like ubuntu 12.04) also:
  23. easy_install3 pip
  24. pip3 install virtualenv
  25. EOF
  26. end
  27. def packages_freebsd
  28. return <<-EOF
  29. pkg install -y python34 py34-setuptools34
  30. ln -s /usr/local/bin/python3.4 /usr/local/bin/python3
  31. pkg install -y openssl liblz4
  32. pkg install -y fusefs-libs pkgconf
  33. pkg install -y fakeroot git
  34. easy_install-3.4 pip
  35. pip3 install virtualenv
  36. # make FUSE work
  37. echo 'fuse_load="YES"' >> /boot/loader.conf
  38. echo 'vfs.usermount=1' >> /etc/sysctl.conf
  39. kldload fuse
  40. sysctl vfs.usermount=1
  41. pw groupmod operator -M vagrant
  42. EOF
  43. end
  44. def packages_darwin
  45. return <<-EOF
  46. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  47. brew update
  48. # this installs osxfuse 2.8.0 (which is based on libfuse 2.7.3).
  49. # llfuse later complains about needing (libfuse) 2.8.0 at least.
  50. #brew install caskroom/cask/brew-cask
  51. #brew cask install osxfuse # needs cask install because of apple's unsigned kext ban
  52. # get osxfuse 3.0.x pre-release code from github:
  53. curl https://github.com/osxfuse/osxfuse/releases/download/osxfuse-3.0.5/osxfuse-3.0.5.dmg -L >osxfuse.dmg
  54. MOUNTDIR=$(echo `hdiutil mount osxfuse.dmg | tail -1 | awk '{$1="" ; print $0}'` | xargs -0 echo) \
  55. && sudo installer -pkg "${MOUNTDIR}/Extras/FUSE for OS X 3.0.5.pkg" -target /
  56. brew install openssl
  57. brew install lz4
  58. # looks dirty, is there a better way without root?:
  59. mkdir -p /usr/local/opt/lz4
  60. ln -s /usr/local/Cellar/lz4/r*/include /usr/local/opt/lz4/
  61. ln -s /usr/local/Cellar/lz4/r*/lib /usr/local/opt/lz4/
  62. brew install fakeroot
  63. brew install pyenv
  64. if which pyenv > /dev/null; then
  65. eval "$(pyenv init -)"
  66. fi
  67. pyenv install 3.4.3
  68. pyenv global 3.4.3
  69. pyenv rehash
  70. python -m pip install --user virtualenv
  71. EOF
  72. end
  73. def prepare_user(boxname)
  74. return <<-EOF
  75. echo export 'PATH=/usr/local/bin:$PATH' >> ~/.profile
  76. . ~/.profile
  77. # initialize python on darwin
  78. if which pyenv > /dev/null; then
  79. eval "$(pyenv init -)"
  80. fi
  81. cd /vagrant/borg
  82. python -m virtualenv --python=python3 borg-env
  83. . borg-env/bin/activate
  84. cd borg
  85. pip install -U pip setuptools
  86. pip install 'llfuse<0.41' # 0.41 does not install due to UnicodeDecodeError
  87. pip install -r requirements.d/development.txt
  88. pip install -e .
  89. echo
  90. echo "Run:"
  91. echo " vagrant rsync #{boxname}"
  92. echo " vagrant ssh #{boxname} -c 'cd project/path; ...'"
  93. EOF
  94. end
  95. def fix_perms
  96. return <<-EOF
  97. chown -R vagrant /vagrant/borg
  98. EOF
  99. end
  100. Vagrant.configure(2) do |config|
  101. # use rsync to copy content to the folder
  102. config.vm.synced_folder ".", "/vagrant/borg/borg", :type => "rsync"
  103. # do not let the VM access . on the host machine via the default shared folder!
  104. config.vm.synced_folder ".", "/vagrant", disabled: true
  105. # fix permissions on synced folder
  106. config.vm.provision "fix perms", :type => :shell, :inline => fix_perms
  107. config.vm.provider :virtualbox do |v|
  108. #v.gui = true
  109. v.cpus = 2
  110. end
  111. config.vm.define "trusty64" do |b|
  112. b.vm.box = "ubuntu/trusty64"
  113. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  114. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("trusty64")
  115. end
  116. config.vm.define "precise32" do |b|
  117. b.vm.box = "ubuntu/precise32"
  118. b.vm.provision "packages prepare precise", :type => :shell, :inline => packages_prepare_precise
  119. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  120. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("precise32")
  121. end
  122. config.vm.define "jessie64" do |b|
  123. b.vm.box = "debian/jessie64"
  124. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  125. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("jessie64")
  126. end
  127. config.vm.define "wheezy32" do |b|
  128. b.vm.box = "puppetlabs/debian-7.8-32-nocm"
  129. b.vm.provision "packages prepare wheezy", :type => :shell, :inline => packages_prepare_wheezy
  130. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  131. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("wheezy32")
  132. end
  133. # BSD
  134. config.vm.define "freebsd" do |b|
  135. b.vm.box = "geoffgarside/freebsd-10.2"
  136. b.vm.provision "packages freebsd", :type => :shell, :inline => packages_freebsd
  137. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("freebsd")
  138. end
  139. # OS X
  140. config.vm.define "darwin" do |b|
  141. b.vm.box = "jhcook/yosemite-clitools"
  142. b.vm.provision "packages darwin", :type => :shell, :privileged => false, :inline => packages_darwin
  143. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("darwin")
  144. end
  145. end