Virtuelle
Entwicklungsumgebungen mit
Vagrant
Markus Zapke-Gründemann
PyCon DE 2012
Slide 2
Slide 2 text
Übersicht
• Vorstellung
• Was ist Vagrant?
• Warum Vagrant?
• Installation
• Anwendung
• Weiterentwicklung
Slide 3
Slide 3 text
Markus
Zapke-Gründemann
• Softwareentwickler seit 2001
• Softwareentwicklung mit Python, Django
und Mercurial
• Selbstständig seit 2008
• Seit 2011 Geschäftsführer bei Inqbus
Slide 4
Slide 4 text
Was ist Vagrant?
Slide 5
Slide 5 text
Vagrant
• Verwaltung von Virtuellen Maschinen
• Basiert auf VirtualBox
• Geschrieben in Ruby
Visit me at
vagrantup.com
Slide 6
Slide 6 text
Warum Vagrant?
• Zu viele Programmiersprachen,
Bibliotheken, Datenbanken,
Message Queues, Frameworks, …
• Unterschiedliche Versionen oft schwer
kombinierbar
• Arbeit und Zeit sparen - Wissen anderer
nutzen
Slide 7
Slide 7 text
Vagrant installieren
1. VirtualBox installieren
2. Vagrant Pakete für OS X, Windows,
Debian, RedHat und Arch Linux verfügbar
oder
$ gem install vagrant
Slide 8
Slide 8 text
Vagrant nutzen I
Slide 9
Slide 9 text
Vagrant nutzen I
$ vagrant box add lucid32
http://files.vagrantup.com/lucid32.box
Vagrant nutzen I
$ vagrant box add lucid32
http://files.vagrantup.com/lucid32.box
$ vagrant init lucid32
$ vagrant up
Slide 12
Slide 12 text
Vagrant nutzen I
$ vagrant box add lucid32
http://files.vagrantup.com/lucid32.box
$ vagrant init lucid32
$ vagrant up
$ ls -A
.vagrant Vagrantfile
Slide 13
Slide 13 text
Vagrantfile I
$ cat Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
end
Slide 14
Slide 14 text
Vagrantfile II
$ cat Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
# Port forwarding for Django
config.vm.forward_port 8000, 8000
end
Slide 15
Slide 15 text
Vagrant nutzen II
Slide 16
Slide 16 text
Vagrant nutzen II
$ vagrant ssh
Slide 17
Slide 17 text
Vagrant nutzen II
$ vagrant ssh
vagrant@vagrant-lucid32:~$ ls -A /vagrant
.vagrant Vagrantfile
Slide 18
Slide 18 text
Vagrant nutzen II
$ vagrant ssh
vagrant@vagrant-lucid32:~$ ls -A /vagrant
.vagrant Vagrantfile
vagrant@vagrant-lucid32:~$ logout
Slide 19
Slide 19 text
Vagrant nutzen II
$ vagrant ssh
vagrant@vagrant-lucid32:~$ ls -A /vagrant
.vagrant Vagrantfile
vagrant@vagrant-lucid32:~$ logout
$ vagrant halt
Slide 20
Slide 20 text
Vagrant nutzen II
$ vagrant ssh
vagrant@vagrant-lucid32:~$ ls -A /vagrant
.vagrant Vagrantfile
vagrant@vagrant-lucid32:~$ logout
$ vagrant halt
$ vagrant destroy
Slide 21
Slide 21 text
Vagrant Box
Slide 22
Slide 22 text
Vagrant Box
$ vagrant box list
lucid32
Slide 23
Slide 23 text
Vagrant Box
$ vagrant box list
lucid32
$ ls ~/.vagrant.d/boxes
lucid32
Slide 24
Slide 24 text
Vagrant Box
$ vagrant box list
lucid32
$ ls ~/.vagrant.d/boxes
lucid32
$ ls ~/.vagrant.d/boxes/lucid32
Vagrantfile box-disk1.vmdk box.ovf
Slide 25
Slide 25 text
Vagrant Box
$ vagrant box list
lucid32
$ ls ~/.vagrant.d/boxes
lucid32
$ ls ~/.vagrant.d/boxes/lucid32
Vagrantfile box-disk1.vmdk box.ovf
$ vagrant box remove lucid32
Slide 26
Slide 26 text
Provisioning
• Chef Solo
• Chef Server
• Puppet Standalone
• Puppet Server
• Shell
Slide 27
Slide 27 text
Provisioning: Puppet I
$ cat Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
config.vm.provision :puppet
end
Provisioning: Chef I
$ cat Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "cookbooks"
chef.add_recipe "basesetup"
end
end
Slide 30
Slide 30 text
Provisioning: Chef II
$ cat cookbooks/basesetup/recipes/default.rb
execute "apt-get-update" do
command "apt-get update"
ignore_failure true
end
%w(vim sqlite3).each do |pkg|
package(pkg) do
action :install
end
end
Slide 31
Slide 31 text
Woher eine
Box bekommen?
www.vagrantbox.es
Slide 32
Slide 32 text
Eigene Box mit
VeeWee erstellen I
• VeeWee: https://github.com/jedi4ever/veewee
• Box erstellen für
• Vagrant
• VMWare
• KVM
$ gem install veewee
Slide 33
Slide 33 text
Eigene Box mit
VeeWee erstellen II
Slide 34
Slide 34 text
Eigene Box mit
VeeWee erstellen II
$ vagrant basebox templates|grep debian
vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot'
vagrant basebox define '' 'Debian-6.0.1a-i386-netboot'
Slide 35
Slide 35 text
Eigene Box mit
VeeWee erstellen II
$ vagrant basebox templates|grep debian
vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot'
vagrant basebox define '' 'Debian-6.0.1a-i386-netboot'
$ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot'
Slide 36
Slide 36 text
Eigene Box mit
VeeWee erstellen II
$ vagrant basebox templates|grep debian
vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot'
vagrant basebox define '' 'Debian-6.0.1a-i386-netboot'
$ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot'
$ ls definitions/debian-60
definition.rb
postinstall.sh
preseed.cfg
Slide 37
Slide 37 text
Eigene Box mit
VeeWee erstellen II
$ vagrant basebox templates|grep debian
vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot'
vagrant basebox define '' 'Debian-6.0.1a-i386-netboot'
$ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot'
$ ls definitions/debian-60
definition.rb
postinstall.sh
preseed.cfg
$ vagrant basebox build 'debian-60'
branch
machine-abstraction
Merge mit master am 19.8.2012:
Möglichkeit Plugins für neue „Provider“ zu schreiben.
https://github.com/mitchellh/vagrant/commit/
391dc392675c73518ebf04252d824fe916e8860b
Slide 43
Slide 43 text
Danksagung
• Mitchell Hashimoto // @mitchellh
für Vagrant
• Mathias Lafeldt // @mlafeldt
für die Chef Beispiele