Corona is a library for building and controlling virtual machines. It's essentially a clone of Vagrant, with the advantage that it's written in pure Common Lisp, and can be installed simply from Quicklisp.
Corona uses Vagrant Cloud as a source of base images for the virtual machines, so you can get started with any system in minutes.
Corona just manages the machines. To access them through SSH, consider the trivial-ssh
library.
Corona can be used to create isolated, reproducible development environments so you and your team can work on the same system.
No more 'works on my machine', no more difference between development and production.
If you have a library that uses an external tool, like a database server or something equally large, you can use Corona to set up a virtual machine and install whatever dependencies you need, so the user doesn't actually have to run anything on their computer.
Additionally, since you can set up multiple virtual machines with different systems, you can use Corona to ensure your library works on most operating systems. This is especially useful for testing compilers and similar applications where portability is critical.
You can use Corona as a build server: Fire up virtual machines of the operating system you want to build on, set them up with everything you need, and run the builds.
(defmachine my-machine)
Machines are defined with the defmachine
macro. The first argument to
defmachine
is a symbol, which will be the machine's name (Including the
package). The other arguments are:
system
memory
512
.cpu-count
ip
Examples:
(defmachine my-app:db-server
:system (:debian :7.4 :32)
:memory 2048
:ip "192.128.65.20")
(defmachine my-app:web-server
:system (:freebsd :10.0 :64)
:memory 512
:cpu-count 2)
The following six functions can be used to control the state of the virtual machines:
start
, stop
pause
, resume
reboot
poweroff
Examples:
(start my-app:web-server)
;; Do some work
(pause my-app:web-server)
;; Come back to work next morning
(resume my-app:web-server)
;; Shut it down
(stop my-app:web-server)
The advantage over Vagrant is simply that it's written in Common Lisp and, as such, available in Quicklisp without any external commands. This way, the library can be included as a dependency and used without anyone having to set up an external tool other than VirtualBox.
Everything is stored in specific subdirectories under
~/.config/corona/
. Vagrant Cloud images are stored, in their extracted form,
in ~/.config/corona/files/vagrant-cloud/
. The disk images of virtual machines
are stored in ~/.config/corona/files/virtual-machines
.
Virtual machines are identified by a name, which is a Common Lisp symbol. Inside the VM directory, all the data for a virtual machine is stored inside a folder for the package and another folder for the symbol name. For example:
virtual-machines/
COMMON-LISP/
TEST-VM/
UBUNTU-PERSONAL/
MY-APP/
TESTING/
STAGING/
The names of your virtual machines are restricted by the limitations of your
filesystem (Allowed characters, pathname length, etc.). Rather than add specific
checks for meaningless edge cases, I'll just warn you not to name your virtual
machines myapp:My/Test\<<VM>>
.