aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2019-07-16 09:20:34 +0100
committerskullydazed <skullydazed@users.noreply.github.com>2019-07-16 01:20:34 -0700
commit29e9caa82bdfe898dd7fca82fcecf0cae2374859 (patch)
treead65f691513580f926465959b5a1169365c77959
parenta32f7e1a25a8a200d838aa8256ffe39708fbd723 (diff)
downloadqmk_firmware-29e9caa82bdfe898dd7fca82fcecf0cae2374859.tar.gz
qmk_firmware-29e9caa82bdfe898dd7fca82fcecf0cae2374859.zip
Configure Vagrant to use qmk_base_container (#6194)
* Initial conversion of vagrant to use qmkfm/base_container * Fix vagrant when using docker provider * Workaround for VirtualBox VM restarts * Generalise Vagrant docs slightly and add FAQ
-rw-r--r--Vagrantfile31
-rw-r--r--docs/getting_started_vagrant.md46
-rw-r--r--util/vagrant/Dockerfile33
-rw-r--r--util/vagrant/readme.md12
4 files changed, 107 insertions, 15 deletions
diff --git a/Vagrantfile b/Vagrantfile
index 552711d63..dae4e0d53 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -52,26 +52,37 @@ Vagrant.configure(2) do |config|
52 end 52 end
53 53
54 # Docker provider pulls from hub.docker.com respecting docker.image if 54 # Docker provider pulls from hub.docker.com respecting docker.image if
55 # config.vm.box is nil. Note that this bind-mounts from the current dir to 55 # config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
56 # Note that this bind-mounts from the current dir to
56 # /vagrant in the guest, so unless your UID is 1000 to match vagrant in the 57 # /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
57 # image, you'll need to: chmod -R a+rw . 58 # image, you'll need to: chmod -R a+rw .
58 config.vm.provider "docker" do |docker, override| 59 config.vm.provider "docker" do |docker, override|
59 override.vm.box = nil 60 override.vm.box = nil
60 docker.image = "jesselang/debian-vagrant:stretch" 61 docker.build_dir = "util/vagrant"
61 docker.has_ssh = true 62 docker.has_ssh = true
62 end 63 end
63 64
64 # This script ensures the required packages for AVR programming are installed 65 # Unless we are running the docker container directly
65 # It also ensures the system always gets the latest updates when powered on 66 # 1. run container detached on vm
66 # If this causes issues you can run a 'vagrant destroy' and then 67 # 2. attach on 'vagrant ssh'
67 # add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working 68 ["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
68 # non-updated box and then attempt to troubleshoot or open a Github issue 69 config.vm.provider type do |virt, override|
69 config.vm.provision "shell", inline: "/vagrant/util/qmk_install.sh", run: "always" 70 override.vm.provision "docker" do |d|
71 d.run "qmkfm/base_container",
72 cmd: "tail -f /dev/null",
73 args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
74 end
75
76 override.vm.provision "shell", inline: <<-SHELL
77 echo 'docker restart qmkfm-base_container && exec docker exec -it qmkfm-base_container /bin/bash -l' >> ~vagrant/.bashrc
78 SHELL
79 end
80 end
70 81
71 config.vm.post_up_message = <<-EOT 82 config.vm.post_up_message = <<-EOT
72 83
73 Log into the VM using 'vagrant ssh'. QMK directory synchronized with host is 84 Log into the environment using 'vagrant ssh'. QMK directory synchronized with
74 located at /vagrant 85 host is located at /vagrant
75 To compile the .hex files use make command inside this directory, e.g. 86 To compile the .hex files use make command inside this directory, e.g.
76 cd /vagrant 87 cd /vagrant
77 make <keyboard>:default 88 make <keyboard>:default
diff --git a/docs/getting_started_vagrant.md b/docs/getting_started_vagrant.md
index 848a43a1f..b62524271 100644
--- a/docs/getting_started_vagrant.md
+++ b/docs/getting_started_vagrant.md
@@ -1,16 +1,20 @@
1# Vagrant Quick Start 1# Vagrant Quick Start
2 2
3This project includes a Vagrantfile that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter. 3This project includes a `Vagrantfile` that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
4 4
5## Requirements 5## Requirements
6 6
7Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion). 7Using the `Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as a supported provider installed:
8 8
9*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest` 9* [VirtualBox](https://www.virtualbox.org/) (Version at least 5.0.12)
10 * Sold as 'the most accessible platform to use Vagrant'
11* [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware)
12 * The (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion
13* [Docker](https://www.docker.com/)
10 14
11Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below. 15Other than having Vagrant, a suitable provider installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start an environment (either a virtual machine or container) that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
12 16
13# Flashing the Firmware 17## Flashing the Firmware
14 18
15The "easy" way to flash the firmware is using a tool from your host OS: 19The "easy" way to flash the firmware is using a tool from your host OS:
16 20
@@ -19,3 +23,35 @@ The "easy" way to flash the firmware is using a tool from your host OS:
19* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx) 23* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx)
20 24
21If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version. 25If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
26
27## Vagrantfile Overview
28The development environment is configured to run the QMK Docker image, `qmkfm/base_container`. This not only ensures predictability between systems, it also mirrors the CI environment.
29
30## FAQ
31
32### Why am I seeing issues under Virtualbox?
33Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:**
34
35```console
36vagrant plugin install vagrant-vbguest
37```
38
39### How do I remove an existing environment?
40Finished with your environment? From anywhere inside the folder where you checked out this project, Execute:
41
42```console
43vagrant destory
44```
45
46### What if I want to use Docker directly?
47Want to benefit from the Vagrant workflow without a virtual machine? The Vagrantfile is configured to bypass running a virtual machine, and run the container directly. Execute the following when bringing up the environment to force the use of Docker:
48```console
49vagrant up --provider=docker
50```
51
52### How do I access the virtual machine instead of the Docker container?
53Execute the following to bypass the `vagrant` user booting directly to the official qmk builder image:
54
55```console
56vagrant ssh -c 'sudo -i'
57``` \ No newline at end of file
diff --git a/util/vagrant/Dockerfile b/util/vagrant/Dockerfile
new file mode 100644
index 000000000..1936ee023
--- /dev/null
+++ b/util/vagrant/Dockerfile
@@ -0,0 +1,33 @@
1FROM qmkfm/base_container
2
3# Basic upgrades; install sudo and SSH.
4RUN apt-get update && apt-get install --no-install-recommends -y \
5 sudo \
6 openssh-server \
7 && rm -rf /var/lib/apt/lists/*
8RUN mkdir /var/run/sshd
9RUN sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
10RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
11
12# Remove the policy file once we're finished installing software.
13# This allows invoke-rc.d and friends to work as expected.
14RUN rm /usr/sbin/policy-rc.d
15
16# Add the Vagrant user and necessary passwords.
17RUN groupadd vagrant
18RUN useradd -c "Vagrant" -g vagrant -d /home/vagrant -m -s /bin/bash vagrant
19RUN echo 'root:vagrant' | chpasswd
20RUN echo 'vagrant:vagrant' | chpasswd
21
22# Allow the vagrant user to use sudo without a password.
23RUN echo 'vagrant ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/vagrant
24
25# Install Vagrant's insecure public key so provisioning and 'vagrant ssh' work.
26RUN mkdir /home/vagrant/.ssh
27ADD https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub /home/vagrant/.ssh/authorized_keys
28RUN chmod 0600 /home/vagrant/.ssh/authorized_keys
29RUN chown -R vagrant:vagrant /home/vagrant/.ssh
30RUN chmod 0700 /home/vagrant/.ssh
31
32EXPOSE 22
33CMD ["/usr/sbin/sshd", "-D"]
diff --git a/util/vagrant/readme.md b/util/vagrant/readme.md
new file mode 100644
index 000000000..e4b870a64
--- /dev/null
+++ b/util/vagrant/readme.md
@@ -0,0 +1,12 @@
1# QMK Vagrant Utilities
2
3## Dockerfile
4Vagrant-friendly `qmkfm/base_container`.
5
6In order for the Docker provider and `vagrant ssh` to function the container has a few extra requirements.
7
8* vagrant user
9* ssh server
10 * configured with expected public key
11* sudo
12 * passwordless for vagrant user