summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2019-07-16 09:20:34 +0100
committerFlorian Didron <fdidron@users.noreply.github.com>2019-07-19 10:17:17 +0900
commit3acf64b70881bbb3b165251118555c568bc62700 (patch)
treea0bdbd5d876494f4839e569aaf1d00048c56af2f
parent408356533460cb12adad96f65e4c8a8494afa4b7 (diff)
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--util/vagrant/Dockerfile33
-rw-r--r--util/vagrant/readme.md12
3 files changed, 66 insertions, 10 deletions
diff --git a/Vagrantfile b/Vagrantfile
index 2235d9c2ec..3e08188e75 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -50,26 +50,37 @@ Vagrant.configure(2) do |config|
end
# Docker provider pulls from hub.docker.com respecting docker.image if
- # config.vm.box is nil. Note that this bind-mounts from the current dir to
+ # config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
+ # Note that this bind-mounts from the current dir to
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
# image, you'll need to: chmod -R a+rw .
config.vm.provider "docker" do |docker, override|
override.vm.box = nil
- docker.image = "jesselang/debian-vagrant:stretch"
+ docker.build_dir = "util/vagrant"
docker.has_ssh = true
end
- # This script ensures the required packages for AVR programming are installed
- # It also ensures the system always gets the latest updates when powered on
- # If this causes issues you can run a 'vagrant destroy' and then
- # add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working
- # non-updated box and then attempt to troubleshoot or open a Github issue
- config.vm.provision "shell", inline: "/bin/sh -c 'yes | /vagrant/util/qmk_install.sh'", run: "always"
+ # Unless we are running the docker container directly
+ # 1. run container detached on vm
+ # 2. attach on 'vagrant ssh'
+ ["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
+ config.vm.provider type do |virt, override|
+ override.vm.provision "docker" do |d|
+ d.run "qmkfm/base_container",
+ cmd: "tail -f /dev/null",
+ args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
+ end
+
+ override.vm.provision "shell", inline: <<-SHELL
+ echo 'docker restart qmkfm-base_container && exec docker exec -it qmkfm-base_container /bin/bash -l' >> ~vagrant/.bashrc
+ SHELL
+ end
+ end
config.vm.post_up_message = <<-EOT
- Log into the VM using 'vagrant ssh'. QMK directory synchronized with host is
- located at /vagrant
+ Log into the environment using 'vagrant ssh'. QMK directory synchronized with
+ host is located at /vagrant
To compile the .hex files use make command inside this directory, e.g.
cd /vagrant
make <keyboard>:default
diff --git a/util/vagrant/Dockerfile b/util/vagrant/Dockerfile
new file mode 100644
index 0000000000..1936ee023a
--- /dev/null
+++ b/util/vagrant/Dockerfile
@@ -0,0 +1,33 @@
+FROM qmkfm/base_container
+
+# Basic upgrades; install sudo and SSH.
+RUN apt-get update && apt-get install --no-install-recommends -y \
+ sudo \
+ openssh-server \
+ && rm -rf /var/lib/apt/lists/*
+RUN mkdir /var/run/sshd
+RUN sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
+RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
+
+# Remove the policy file once we're finished installing software.
+# This allows invoke-rc.d and friends to work as expected.
+RUN rm /usr/sbin/policy-rc.d
+
+# Add the Vagrant user and necessary passwords.
+RUN groupadd vagrant
+RUN useradd -c "Vagrant" -g vagrant -d /home/vagrant -m -s /bin/bash vagrant
+RUN echo 'root:vagrant' | chpasswd
+RUN echo 'vagrant:vagrant' | chpasswd
+
+# Allow the vagrant user to use sudo without a password.
+RUN echo 'vagrant ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/vagrant
+
+# Install Vagrant's insecure public key so provisioning and 'vagrant ssh' work.
+RUN mkdir /home/vagrant/.ssh
+ADD https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub /home/vagrant/.ssh/authorized_keys
+RUN chmod 0600 /home/vagrant/.ssh/authorized_keys
+RUN chown -R vagrant:vagrant /home/vagrant/.ssh
+RUN chmod 0700 /home/vagrant/.ssh
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/util/vagrant/readme.md b/util/vagrant/readme.md
new file mode 100644
index 0000000000..e4b870a642
--- /dev/null
+++ b/util/vagrant/readme.md
@@ -0,0 +1,12 @@
+# QMK Vagrant Utilities
+
+## Dockerfile
+Vagrant-friendly `qmkfm/base_container`.
+
+In order for the Docker provider and `vagrant ssh` to function the container has a few extra requirements.
+
+* vagrant user
+* ssh server
+ * configured with expected public key
+* sudo
+ * passwordless for vagrant user