Setting up Subversion for Snort_inline
A reason for the slow development of Snort_inline is that we still weren’t using a version control system. Being sick of this, I decided to setup a private Subversion server to see how we could best use it. One thing that complicates the use of such a system is the fact that we maintain a patch on top of source code not maintained by ourselves. So the system must be able to deal with upstream sourcecode updates.
In the excellent book Practical Subversion, Garrett Rooney suggests the use of so called vendor branches. In this setup the vanilla sources of the upstream Snort would be in the svn repository as well. I’ve decided to experiment with this, and this is how I found it to work.
There are two branches in the svn:
vendor/ trunk/
In vendor, the vanilla source is imported, with tags to the specific releases. So for Snort you will have:
vendor/current vendor/2.6.0.2
The trunk is first initialized as a copy of vendor/current, after which the Snort_inline specific code is added to the trunk. All modifications to our Snort_inline patch will be done in trunk/.
Where this approach shines is when there is a new upstream version. The procedure is this:
- checkout vendor/current
- update your working copy to the new version
- commit
- create a new tag for the new version.
For going to 2.6.1.2, this also meant removing a few files. After this, you have:
vendor/current vendor/2.6.0.2 vendor/2.6.1.2
After this, checkout the trunk, and do a merge of the two vanilla trees (2.6.0.2 and 2.6.1.2) into the trunk. This will update our Snort_inline code with the new ‘vendor’ version. This will create a number of conflicts that will have to be resolved manually (because of our changes in Snort_inline), but resolving this turns out to be a lot simpler and less time comsuming than our old method of just copy-pasting the Snort_inline code into the new Snort release.
Anyway, since Will and I were happy about this approach, we have decided to move to the SourceForge.net SVN server, which now contains a trunk with Snort_inline code, soon to be released as Snort_inline 2.6.1.2 BETA 1. But don’t wait for us, you can also checkout your own copy from:
https://snort-inline.svn.sourceforge.net/svnroot/snort-inline/trunk/
Check it out! :)