Vagrantfile 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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 || brew update
  48. brew outdated openssl || brew upgrade openssl
  49. brew outdated pyenv || brew upgrade pyenv
  50. brew install lz4
  51. brew install osxfuse
  52. pyenv install 3.4.3
  53. pyenv global 3.4.3
  54. pyenv rehash
  55. python -m pip install --user virtualenv
  56. EOF
  57. end
  58. def prepare_user(boxname)
  59. return <<-EOF
  60. echo export 'PATH=/usr/local/bin:$PATH' >> ~/.profile
  61. . ~/.profile
  62. cd /vagrant/borg
  63. virtualenv --python=python3 borg-env
  64. . borg-env/bin/activate
  65. cd borg
  66. pip install -U pip setuptools
  67. pip install 'llfuse<0.41' # 0.41 does not install due to UnicodeDecodeError
  68. pip install -r requirements.d/development.txt
  69. pip install -e .
  70. echo
  71. echo "Run:"
  72. echo " vagrant rsync #{boxname}"
  73. echo " vagrant ssh #{boxname} -c 'cd project/path; ...'"
  74. EOF
  75. end
  76. def fix_perms
  77. return <<-EOF
  78. chown -R vagrant /vagrant/borg
  79. EOF
  80. end
  81. Vagrant.configure(2) do |config|
  82. # use rsync to copy content to the folder
  83. config.vm.synced_folder ".", "/vagrant/borg/borg", :type => "rsync"
  84. # do not let the VM access . on the host machine via the default shared folder!
  85. config.vm.synced_folder ".", "/vagrant", disabled: true
  86. # fix permissions on synced folder
  87. config.vm.provision "fix perms", :type => :shell, :inline => fix_perms
  88. config.vm.provider :virtualbox do |v|
  89. v.gui = false
  90. v.cpus = 2
  91. end
  92. config.vm.define "trusty64" do |b|
  93. b.vm.box = "ubuntu/trusty64"
  94. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  95. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("trusty64")
  96. end
  97. config.vm.define "precise32" do |b|
  98. b.vm.box = "ubuntu/precise32"
  99. b.vm.provision "packages prepare precise", :type => :shell, :inline => packages_prepare_precise
  100. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  101. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("precise32")
  102. end
  103. config.vm.define "jessie64" do |b|
  104. b.vm.box = "debian/jessie64"
  105. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  106. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("jessie64")
  107. end
  108. config.vm.define "wheezy32" do |b|
  109. b.vm.box = "puppetlabs/debian-7.8-32-nocm"
  110. b.vm.provision "packages prepare wheezy", :type => :shell, :inline => packages_prepare_wheezy
  111. b.vm.provision "packages debianoid", :type => :shell, :inline => packages_debianoid
  112. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("wheezy32")
  113. end
  114. # BSD
  115. config.vm.define "freebsd" do |b|
  116. b.vm.box = "geoffgarside/freebsd-10.2"
  117. b.vm.provision "packages freebsd", :type => :shell, :inline => packages_freebsd
  118. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("freebsd")
  119. end
  120. # OS X - TODO: make rsync/ssh work
  121. config.vm.define "darwin" do |b|
  122. b.vm.box = "jhcook/yosemite-clitools"
  123. b.vm.provision "packages darwin", :type => :shell, :privileged => false, :inline => packages_darwin
  124. b.vm.provision "prepare user", :type => :shell, :privileged => false, :inline => prepare_user("darwin")
  125. end
  126. end