 Okay, since the door is closed, I think I'm going to start the talk about Vagrant. So Vagrant is a tool to create software environments based on virtual machines. Just a short question in the beginning as already people who is using already Vagrant here. Okay, so I'm going to start from the beginning, how it's actually working Vagrant, very basic stuff, and then after I will show how do we use it in a Proxmox company, which are working at the moment. So some words about me. So I'm a French guy. I'm living in Austria. I speak three languages. Yes, French guy, three language. I'm a Debian contributor since five years before I was doing games packaging. I was a long time sysadmin. I got bored of creating user accounts and I am a software developer, which enjoy more. So Vagrant, what do you need to start? So if you are on Linux, you just need to install a virtual box and a Vagrant from a package manager, because it's already packaged in Debian, and Vagrant is using for its virtualization need virtual box in the background. Windows OS 6, you have to go to the two URLs, click a lot of next, next, next, and then you're done. Plus on Windows, if you want one, it's interesting to have an SSH client. So we're going to start with some examples so you can see that what Vagrant can do for you. So suppose, for instance, you will need a Debian environment where you want to do stuff, you want to break stuff, you want to be very aggressive. With these three commands, you have a brand new, suppose you have installed before Vagrant and VirtualBox, you have a brand new Debian environment on which you can do stuff. Vagrant in it, which will download from the Vagrant cloud background, some kind of preconfigured disk image. Vagrant up will start that in VirtualBox and Vagrant is a Sage and you're already inside and you can do stuff. So now, as Vagrant and VirtualBox, both are multi-platforms. You can do this, of course, on Linux. You can do this on OSX and you can do this on Vagrant on Windows with the same set of commands. Always is Vagrant in it, Vagrant up, Vagrant SSH. So it's actually a very fast way to get a Debian system installed on Windows. So it virtualized, but still it's very fast. Now some more examples to start. So this guy who has written this book, Data Science, the common line where he explained how to use R and a lot of data science tools. Actually, I don't know really how they're working, but to get the stuff quickly installed for everyone, he packaged all the stuff into a Vagrant image. So you can install that very quickly and do your Data Science common line. So again, it's the same workflow. This Vagrant in it will download this prepackaged VirtualBox image for Vagrant from the Vagrant cloud. Vagrant up will start it up and with the Sage SSH, you already can start to work with your statistical tool like this statistical language. Now some more examples. That's something I packaged a little bit for myself. So this is guy who released the GCC cross compiler for the Atari ST, so 16-bit computer for the 1980s. But writing a cross compiler and packaging does some work, but it's only available for Ubuntu. So I'm on Linux. I'm on Debian. I don't have Ubuntu. I can install the package directly, but if I do this Vagrant in it, I download VirtualBox prepackaged Vagrant, Vagrant up Vagrant SSH, and I can already use that very quickly. Actually, a lot of organizations are shipping their SDK as a Vagrant-based box. So they put everything you need, like version of compiler on PHP, library, whatever you can need into a Vagrant box. You download that and you can start to develop on all these three platforms where Vagrant and VirtualBox are supported. So Media Wiki is doing that. Atlassian is doing that. Laravel Framework, which is a PHP framework, is also doing that. It was actually the beginning, the main reason for Vagrant. I think it was written from an OS 6 developer who wants to have an environment, development environment similar to the server, which he could use on his workstation. So now we're going to see a little bit how it's working on the background, because there has been a lot of magic and downloading stuff for the internet and whatever. So this Vagrant init command that we have seen in the beginning actually calls in the background this Vagrant box command. So the Vagrant box command will download from the Vagrant cloud server or any HTTP server what's Vagrant called the base box, which is basically a VirtualBox disk image with some specific customization, like for instance there has to be a Vagrant user with esudo. So as you see it just downloads that from the internet, but it could be also a file image if you want to share that with your co-worker or it could be for instance any HTTP server you own. So the Vagrant init command will now copy this base box that you have downloaded to the current directory and create here a new environment. What is a new environment is simply a directory where you have this Vagrant file, which basically is just something like this. It will create here a new environment based on this disk image and after you can add here all kinds of customizations. Now Vagrant app will start a virtual machine in the background using your Vagrant file and Vagrant SSH will log you as a Vagrant user in the virtual machine. So all networking stuff is automatically handled in the background. You don't have if you need for instance a new environment in a new virtual machine, you don't need to care about which IP address do I have to do. You don't have to create users. You don't have to think about why I'm doing some kind of what kind of port forwarding do I need to do SSH. Everything is taken care in the background. So Vagrant has some extra capabilities besides creating these basic virtual machines. So for instance you can create multiple environments based on the original base box. So suppose for instance you need to have more than one DBN environment when you want to break stuff. You don't need to do the download every time because it will recreate it. It will recreate a new environment. It's time you call the Vagrant in it based on what you downloaded before. So out of the box you have also pre-configured shape shareholders. So it means that this directory where you create the Vagrant file is automatically exported in the virtual machine. So for instance you can hack on your host workstation and everything is synchronized into the virtual machine and you can start here for instance a Python server or Ruby server and you're actually running your software inside the virtual machine but you're developing on your local workstation. You can add extra port forwarding. For instance if you want to access a web server which is running inside the virtual machine and also Vagrant has very interesting plugins that you can directly add from the command line and also actually also from your package manager because I've just heard that this Vagrant LXA plugin which allows to use Vagrant with LXA container has been packaged by Antonio. Antonio if you're here kudos. So you can also customize your virtual machine with provisionals. So which means for instance you have this basic Debian environment in a Vagrant based box and you want to for instance recreate the production environment you have on your server. So you could add of course all the package you need with Apetiteget, re-export that as a base box and share it to your co-worker. But also if you want to do this in a reproducible way, a way you can reproduce I mean, you got that. So Vagrant supports five big configuration stuff. So for instance you can call an unseeable playbook and he will play that inside the Vagrant machine to set up for instance a whole server automatically in your virtual box environment. Vagrant has unfortunately some limitations that we're going to see there. So first of all there's a question of trust from this Vagrant based box that you download from the internet from the Vagrant cloud. So I'm going to read that quote from the Vagrant cloud authors. Here are some things to note when you're choosing a box, the username of the user. If it's chess or canonical you can likely trust the more than any most user. So basically I created the Vagrant cloud an account called Debian, but everybody could have done this. There's no kind of signature, there's no kind of validations. But it's a work in progress to do official base box for Vagrant. Now like Ubuntu is doing that already and we have at the moment in the Vagrant cloud Vagrant based box, but they're not official yet because they are not part of the Debian infrastructure. So virtual box is not that fast. When you start a Vagrant environment you need to do all this of BIOS, initialization, and hardware initialization, and you basically don't need that. And also which is what I found particularly annoying in the work I'm doing because I'm working on virtualization. Virtual box does not support nested virtualization. So for instance you cannot start Vagrant inside a KVM or you cannot inside a Vagrant start a KVM and this is annoying actually because for instance it means if you have any kind of using any kind of cloud provider where you have a virtual machine you cannot start really with Vagrant and virtual box inside. So you have to switch to another provider like Vagrant Elixir, but you lose a multi-platform aspect. So now I'm going to give some example of how I use Vagrant at work. So I work for this guy, Proxmox, and we're going to see how we use Vagrant there. We will start from a Debian base box. We'll create two network cards. We will create an internal private network on one of these network cards and we will install a web application. So some words about Proxmox. So it's a seven years old platform for managing virtual machines. It's basically a per library on top on KVM, Elixir, ZFS, Safe, and also storage technology which exposes the REST API. The REST API is consumed by the web interface and a common line tool for managing virtual machine. It's based on Debian's table. It's 8GPL and for the level of complexity it's somewhere between raw QME management and OpenStack. So you can start with one server on which you install Proxmox V with a CD and you can already create a virtual machine and after you can bring that into a cluster. I think the sweet spot for Proxmox is like if you have between one and 16 servers. So it looks like this. You have a common line interface and you have an interface for creating virtual machine. And why did we use Vagrant? The thing is we have two ways of installing our software. One of them is just a normal ISO that you use like for bare metal installer. And the other one is also possible actually by adding a special repository and some package to install Proxmox on top of Debian and we didn't have any way of automating this. And the nice tool is like after we have created this Vagrant environment with Proxmox at the end we have also this new virtual box image that we can share with people in case for instance we want to provide a demo environment. So now they're going to be some terminal session where we're going to see all the steps I mentioned before. So there's a bit lazy and I don't want to show you all my tip failures. I recorded this in a video screencast. Hope it's fine for you. So we look now at the Vagrant file from the... Oh I think I missed something. I went too fast. Oh you don't see anything. Is it better? Okay. So it's a bit difficult. I agree. So we have here the Vagrant file with a lot of configuration stuff. At the end we will call an unseable playbook. So the unseable playbooks do a lot of things. You have to trust me now because you cannot read. So we add a Debian repository after we install a lot of package. And now we can start with a Vagrant app. So he got this basic base box from the internet. Now he had it already. Now we're starting the virtual box environment. So this is this time we take some time. So you see out of the box he does this port forwarding for SSH. Now I guess virtual box is doing this hardware initialization on starting the Debian boot sequence, system D. And now we're starting with provisioning. So he do all this step of installing Proxmox on top of the base system. So we set a new root password. We add an app repository. I think in this part of afterwards there is not so much right. So it should be readable. Now we install a Proxmox package. So these are all tasks for the unseable manifest. After we create, we install a new kernel and we reboot using key execs. So we don't have to do a full reboot. And that's it. The software has been completely and fully automatically installed on top of Debian. And at the end I have an environment that I can use to develop. That was it. Any questions? So can you hear me? Yeah. So you said that there's no real cryptographic verification of vagrant base boxes yet. But so why should I trust it at all? I mean, so there's a reason why, for example, Debian packages all are signed. So yeah, actually it's a reason why at the moment I'm working on GPG signing the base box that we have. So we have something we can trust for Debian because at the moment it's nothing like this. But it's not built in in vagrant. So one alternative, for instance, what he's doing Ubuntu is he hosts himself the vagrant base box and then you have MDSI to have some kind of checksumming. So yeah, they sign the checksum. But you don't have this. Also, actually there's some kind, it's possible to check some. There's some kind of checksum support inside vagrant, but you have no kind of GPG support. So you have to host the base box yourself and provide this if you want to gain more trust. You can also build yourself a base box. There is a tool in Debian to do that, which is called Bootstrap Viset. But I don't think the latest version, which is actually packaged, works with creating base box. Yeah. Another question. What's the state of the KVM and LXC support or those drivers provisioners? LXC works very well. So I think you need to put some, you need to add this one line of configurations to change. And KVM, it works through libvirtz and I didn't test it, but as far as I know, it's not working so good. And can I have a shared home here in all my vagrant boxes? So I have my use, my shell configuration and all the vagrant boxes. You can add, out of the box, you share the folder where you are, where you started the vagrant environment, but you can add also extra folders to share. You can share any folders you want. Last question. Can I cache the virtual machine after it has been set up so that it won't run the setup procedure every time I started? Actually, it does the setup procedure only the first time. And after, if you specify the option minus, minus provision, it will rerun the setup. But out of the box, it just does this the first time. Thank you. How does vagrant handle distributing the corresponding source code for a given base box? So actually, the vagrant people themselves don't distribute the base box. I don't know. Everybody is free to create your own base box. So what I did for Debian is just like it's inside a git repository and you can rebuild all your steps. You can rebuild all the base box yourself, of course, like we said before. But there's nothing done in this in the site. So if you build a Debian base box, you include the source code for all of the packages inside your git repository? No, no, no, no. Okay. If you use bootstrap vz, for instance, it will use a bootstrap, that bootstrap to fetch the packages, install everything again. You can also use Packer, which is another tool which works through the installer, the Debian installer, to create the base box, basically, if I'm not mistaken. Yeah, I'm using a tool which is called Packer to create the base box. Basically, it's called the Debian installer with a preset file. And at the end, it's just squeeze disk image and that's it you have. So it's a Debian installer, no more, no less. So how Vagrant compares to Docker? Because I've seen that you're using it kind of the same way. And if you want to use Alexi with Docker and Vagrant, then probably the same performance. It's a good question. I'm not a specialist of Docker. I think the different is like with Vagrant, you have a full virtualize. The aim of Vagrant is that you have a full operating system and Docker is meant only for a single application where you have a limited set of installed package. Oh, yeah. One of the main differences in the basic setup is that you use virtual box, which gives you portability. So in the time where you couldn't use Docker on Windows, for instance, it was no go. So with a single Vagrant file, which is close to the Docker file, you could have something portable for Mac, for Windows and so on. Now, another big difference is the layered file system or the onion file system. In Docker, if you have 10 virtual machines, it's 10 times the disk size. Whereas in Docker, of course, you save if you have minimize the difference between your machines. So that's, of course, there are options, extensions, plugins and stuff. So maybe what I'm saying is just the basic difference. And actually, to even add some confusion, you can start Docker environment with Vagrant. So, yes, because Vagrant has different kind of virtualization back end. The standard one is virtual box, but you can also start Docker environment. Yeah, with this boot to Docker. Hey, I want to only share a few notes on running Vagrant with KVM. And basically, it doesn't work at all. It doesn't work at all. Yeah. Okay. It's very hard. And with this LibVit plugin or with a different Vagrant plugin? I'm not quite sure which methods I tried, but I made several attempts and maybe spend a few days or maybe even more. It would be very great if it could be made to work with KVM. What about the packaging of Vagrant in DBN? Is it healthy? Because at some point in time, it got thrown out of testing probably because it was RC buggy. And I thought that upstream provides DBN packages too. So what's the situation? Are there any maintainers? Actually, I think the maintainer of Vagrant, if Antonio would be there, maybe he could answer. Antonio, are you here? No. But I think actually it's quite healthy in DBN because, okay, it's quite healthy in DBN because you have the latest version of Vagrant which is always packaged in a DBN which I checked the last six months ago. Last question? It's more of a comment. I just wanted to add that I have used Vagrant with LibVirt and KVM with kind of six or eight virtual machines. So with the version from Jesse and the LibVirt plugin. So it works. It's not as nice as this virtual box because the 9p file system stuff isn't integrated so well, but it basically works. Okay. Thank you. Okay. Thank you very much.