[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Jumpstarting a GNUstep development environment using vagrant
From: |
Niels Grewe |
Subject: |
Jumpstarting a GNUstep development environment using vagrant |
Date: |
Mon, 4 Jan 2016 09:03:47 +0000 |
HI guys,
some of you might have heard about vagrant [0], which is a tool for managing
virtual machines. It’s quite useful especially if you are juggling multiple
projects because it allows you to keep dependencies and build environments
isolated in VMs while you can still use your familiar VCS/editor configuration
on the host for coding via a directory that is shared between the host and the
VM.
Additionally, vagrant has the notion of a ‘box’: a pre-made virtual environment
for a specific task. Using vagrant boxes, you can get up and running with a
wordpress installation, an elasticsearch node, a CoreOS cluster, etc. within a
matter of minutes because all you have to do is point vagrant at the box you
want to use and have it download and launch it for you. That massively reduces
the barrier of entry because you can just dip your toe in without learning the
intricacies of a new build system and all that stuff.
For that reason, I made it my holiday project to create a vagrant box that
provides a GNUstep development environment and that has now actually reached a
working state. So for the impatient: if you have vagrant, a supported
hypervisor (currently that would be VirtualBox or VMware Fusion/Workstation),
and an X server, you can get Gorm on your screen by just doing the following in
an empty directory:
> vagrant init ngrewe/gnustep-gui
> vagrant up
> vagrant ssh -- -Y Gorm
(or just `vagrant ssh` to get a shell in the VM)
To provide a bit more detail, you will get the following with the box:
* a Debian 8.2 (jessie) base system
* clang 3.7
* libobjc2
* libdispatch
* gnustep-make
* gnustep-base
* gnustep-gui
* gnustep-back
* gorm
It’s configured to support all the modern Objective-C features (declared
properties, non-fragile ABI, blocks, ARC). There is also a variant of the box
called ngrewe/gnustep-headless that omits the GUI parts if you are looking to
do some server side Objective-C development. I really hope that this is helpful
for people who want to try out GNUstep.
The boxes themselves are built using packer [1] and I maintain the repository
with the provisioning templates on github [2] if you want to have a closer look
at how it works. The process of building the boxes is mostly automated, so I
will do my best to update them on a regular basis.
There are a few things I’m looking at for the future:
* Slimming down the box: Currently the compressed boxes are close to 700MB, and
about 2.3GB uncompressed, so I’m looking for things to remove to get he size
down.
* Support for Parallels Desktop: The boxes already support both VirtualBox and
VMware so most people should be able to use them, but at least as far as Mac OS
hosts go, Parallels seems to be the third major desktop virtualisation
provider. Both packer and vagrant support Parallels, so I would really like to
add support for that as well. Unfortunately, I don’t have a license for the
software, so I’m hoping that somebody might volunteer to add this provider…
* Additional layers/components: I’ve kept the list of things in the image
fairly minimal for now. It might make sense to ship things like CoreFoundation,
Opal, or DBusKit, though.
I’m also not really sure about the deployment story. I think vagrant boxes
provide a pretty nice and consistent experience for developers, but for end
users providing proper packages are probably much more useful. Still, packer
provides a way to build docker images from the template as well, so I’m
wondering how difficult it would be to containerize GNUstep apps for easy
deployment?
Anyways, I encourage y’all to check this out, see how it fits your workflow,
and report bugs and suggestions for improvements to me.
Cheers,
Niels
--
[0] https://www.vagrantup.com
[1] https://www.packer.io
[2] https://github.com/ngrewe/gnustep-boxes
- Jumpstarting a GNUstep development environment using vagrant,
Niels Grewe <=