<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> <article> <!--$Id$--> <articleinfo> <title>Building Shorewall from Git</title> <authorgroup> <author> <firstname>Tom</firstname> <surname>Eastep</surname> </author> </authorgroup> <pubdate><?dbtimestamp format="Y/m/d"?></pubdate> <copyright> <year>2009</year> <year>2010</year> <year>2012</year> <holder>Thomas M. Eastep</holder> </copyright> <legalnotice> <para>Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover, and with no Back-Cover Texts. A copy of the license is included in the section entitled <quote><ulink url="GnuCopyright.htm">GNU Free Documentation License</ulink></quote>.</para> </legalnotice> </articleinfo> <note> <para>This information is provided primarily for Shorewall developers. Users are expected to install from pre-built tarballs or packages.</para> </note> <section> <title>Git Taxonomy</title> <para>The Shorewall Git tree at Sourceforge serves as the master repository for Shorewall 4.4 and later versions. It is not possible to simply export a directory from Git and run the <command>install.sh</command> script in that directory. A build step is required to produce a directory that is suitable for the <command>install.sh</command> script to run in.</para> <section> <title>trunk</title> <para>The development branch of each product is kept here.</para> <itemizedlist> <listitem> <para>Shorewall-core.</para> </listitem> <listitem> <para>Shorewall</para> </listitem> <listitem> <para>Shorewall6</para> </listitem> <listitem> <para>Shorewall-lite</para> </listitem> <listitem> <para>Shorewall6-lite</para> </listitem> <listitem> <para>Shorewall-init</para> </listitem> </itemizedlist> <para>There are also several other directories which are described in the following sub-sections.</para> <section> <title>trunk/docs</title> <para>The stable release XML documents. Depending on the point in the release cycle, these documents may also apply to the current development version.</para> </section> </section> <section> <title>tools</title> <para>This is where the release and build tools are kept. There are two subordinate directories:</para> <variablelist> <varlistentry> <term>trunk/tools/build</term> <listitem> <para>Tools for building and uploading new releases.</para> </listitem> </varlistentry> <varlistentry> <term>trunk/tools/web</term> <listitem> <para>Tools for publishing web content</para> </listitem> </varlistentry> </variablelist> </section> <section> <title>web</title> <para>The files from the web site that are maintained in HTML format. are kept in this directory.</para> </section> <section> <title>release</title> <para>Added in Shorewall 4.4.22, this directory contains the files that contain release-dependent information (change.txt, releasenotes.txt, .spec files, etc). This is actually a symbolic link to ../release which has it's own Git repository.</para> </section> </section> <section> <title>Build Tools</title> <para>As described above, the build tools are kept in <filename class="directory">trunk/tools/build.</filename> They are described in the following sections.</para> <section> <title>setversion</title> <para>The <command>setversion</command> script updates the version number in a directory. The script is run with the current working directory being <filename class="directory">release</filename>.</para> <blockquote> <para><command>setversion</command> <replaceable>version</replaceable></para> </blockquote> <para>The <replaceable>version</replaceable> may either be a minor version or a patch version.</para> </section> <section> <title>build</title> <para>This is the script that builds Shorewall 4.4 packages from Git.</para> <para>The script copies content from Git using the <command>git archive</command> command. It then uses that content to build the packages. In addition to the usual Gnu utilities, the following software is required:</para> <variablelist> <varlistentry> <term>rpmbuild</term> <listitem> <para>Required to build the RPM packages.</para> </listitem> </varlistentry> <varlistentry> <term>xsltproc (libxslt)</term> <listitem> <para>Required to convert the XML documents to other formats.</para> </listitem> </varlistentry> <varlistentry> <term>Docbook XSL Stylesheets</term> <listitem> <para>Required to convert the XML documents to other formats.</para> </listitem> </varlistentry> <varlistentry> <term>Perl</term> <listitem> <para>Required to massage some of the config files.</para> </listitem> </varlistentry> <varlistentry> <term>xmlto</term> <listitem> <para>Required to convert the XML manpages to manpages. Be sure that you have a recent version; I use 0.0.23.</para> </listitem> </varlistentry> </variablelist> <para>You should ensure that you have the latest scripts. The scripts change periodically as we move through the release cycles.</para> <para>The build44 script may need to be modified to fit your particular environment. There are a number of variables that are set near the top of the file:</para> <variablelist> <varlistentry> <term>STYLESHEET</term> <listitem> <para>Must point to the XHTML docbook.xsl stylesheet from your Docbook XSL Stylesheets installation.</para> </listitem> </varlistentry> <varlistentry> <term>LOGDIR</term> <listitem> <para>Directory where you want the build log placed. Defaults to the current working directory.</para> </listitem> </varlistentry> <varlistentry> <term>RPMDIR</term> <listitem> <para>Points to your RPM directory .</para> </listitem> </varlistentry> <varlistentry> <term>DIR</term> <listitem> <para>Directory where you want the release to be built. Defaults to the current working directory.</para> </listitem> </varlistentry> <varlistentry> <term>GIT</term> <listitem> <para>Shorewall GIT repository.</para> </listitem> </varlistentry> </variablelist> <para>The scripts assume that there will be a separate <firstterm>build directory</firstterm> per major release. To build a release, you cd to the appropriate directory and run the build script.</para> <para>The general form of the build command is:</para> <blockquote> <para><command>build</command> [ -<replaceable>options</replaceable> ] <replaceable>release</replaceable> [ <replaceable>prior release</replaceable> ]</para> </blockquote> <para>where</para> <variablelist> <varlistentry> <term>opt<emphasis>i</emphasis>ons</term> <listitem> <para>are one or more of the following. If no options are given then all options are assumed</para> <variablelist> <varlistentry> <term>t</term> <listitem> <para>build tar files</para> </listitem> </varlistentry> <varlistentry> <term>r</term> <listitem> <para>build RPMs</para> </listitem> </varlistentry> <varlistentry> <term>c</term> <listitem> <para>Build the shorewall package.</para> </listitem> </varlistentry> <varlistentry> <term>i</term> <listitem> <para>Build the shorewall-init package.</para> </listitem> </varlistentry> <varlistentry> <term>l</term> <listitem> <para>Build the shorewall-lite package.</para> </listitem> </varlistentry> <varlistentry> <term>6</term> <listitem> <para>Build the shorewall6 package.</para> </listitem> </varlistentry> <varlistentry> <term>L</term> <listitem> <para>Build the shorewall6-lite package.</para> </listitem> </varlistentry> <varlistentry> <term>h</term> <listitem> <para>Build the html document package.</para> </listitem> </varlistentry> <varlistentry> <term>x</term> <listitem> <para>Build the xml document package.</para> </listitem> </varlistentry> </variablelist> </listitem> </varlistentry> <varlistentry> <term><emphasis>release</emphasis></term> <listitem> <para>The release version to build. Must match the version in the associated Git path.</para> </listitem> </varlistentry> <varlistentry> <term><emphasis>prior release</emphasis></term> <listitem> <para>The release to be used to generate patch files.</para> </listitem> </varlistentry> </variablelist> <para>Example 1 - Build Shorewall 4.4.7 and generate patches against 4.4.6:</para> <blockquote> <para><command>build 4.4.7 4.4.6</command></para> </blockquote> <para>Example 2 - Build Shorewall 4.2.7.1 Shorewall and generate patches against 4.4.7:</para> <blockquote> <para><command>build -trc 4.4.7.1 4.4.7</command></para> </blockquote> </section> <section> <title>build45</title> <para>This is the script that builds Shorewall 4.5 packages from Git.</para> <para>The script copies content from Git using the <command>git archive</command> command. It then uses that content to build the packages. In addition to the usual Gnu utilities, the following software is required:</para> <variablelist> <varlistentry> <term>rpmbuild</term> <listitem> <para>Required to build the RPM packages.</para> </listitem> </varlistentry> <varlistentry> <term>xsltproc (libxslt)</term> <listitem> <para>Required to convert the XML documents to other formats.</para> </listitem> </varlistentry> <varlistentry> <term>Docbook XSL Stylesheets</term> <listitem> <para>Required to convert the XML documents to other formats.</para> </listitem> </varlistentry> <varlistentry> <term>Perl</term> <listitem> <para>Required to massage some of the config files.</para> </listitem> </varlistentry> <varlistentry> <term>xmlto</term> <listitem> <para>Required to convert the XML manpages to manpages. Be sure that you have a recent version; I use 0.0.23.</para> </listitem> </varlistentry> </variablelist> <para>You should ensure that you have the latest scripts. The scripts change periodically as we move through the release cycles.</para> <para>The build44 script may need to be modified to fit your particular environment. There are a number of variables that are set near the top of the file:</para> <variablelist> <varlistentry> <term>STYLESHEET</term> <listitem> <para>Must point to the XHTML docbook.xsl stylesheet from your Docbook XSL Stylesheets installation.</para> </listitem> </varlistentry> <varlistentry> <term>LOGDIR</term> <listitem> <para>Directory where you want the build log placed. Defaults to the current working directory.</para> </listitem> </varlistentry> <varlistentry> <term>RPMDIR</term> <listitem> <para>Points to your RPM directory .</para> </listitem> </varlistentry> <varlistentry> <term>DIR</term> <listitem> <para>Directory where you want the release to be built. Defaults to the current working directory.</para> </listitem> </varlistentry> <varlistentry> <term>GIT</term> <listitem> <para>Shorewall GIT repository.</para> </listitem> </varlistentry> </variablelist> <para>The scripts assume that there will be a separate <firstterm>build directory</firstterm> per major release. To build a release, you cd to the appropriate directory and run the build script.</para> <para>The general form of the build command is:</para> <blockquote> <para><command>build</command> [ -<replaceable>options</replaceable> ] <replaceable>release</replaceable> [ <replaceable>prior release</replaceable> ]</para> </blockquote> <para>where</para> <variablelist> <varlistentry> <term>opt<emphasis>i</emphasis>ons</term> <listitem> <para>are one or more of the following. If no options are given then all options are assumed</para> <variablelist> <varlistentry> <term>t</term> <listitem> <para>build tar files</para> </listitem> </varlistentry> <varlistentry> <term>r</term> <listitem> <para>build RPMs</para> </listitem> </varlistentry> <varlistentry> <term>c</term> <listitem> <para>Build the shorewall-core package.</para> </listitem> </varlistentry> <varlistentry> <term>i</term> <listitem> <para>Build the shorewall-init package.</para> </listitem> </varlistentry> <varlistentry> <term>l</term> <listitem> <para>Build the shorewall-lite package.</para> </listitem> </varlistentry> <varlistentry> <term>6</term> <listitem> <para>Build the shorewall6 package.</para> </listitem> </varlistentry> <varlistentry> <term>L</term> <listitem> <para>Build the shorewall6-lite package.</para> </listitem> </varlistentry> <varlistentry> <term>h</term> <listitem> <para>Build the html document package.</para> </listitem> </varlistentry> <varlistentry> <term>s</term> <listitem> <para>Build the shorewall package.</para> </listitem> </varlistentry> <varlistentry> <term>x</term> <listitem> <para>Build the xml document package.</para> </listitem> </varlistentry> </variablelist> </listitem> </varlistentry> <varlistentry> <term><emphasis>release</emphasis></term> <listitem> <para>The release version to build. Must match the version in the associated Git path.</para> </listitem> </varlistentry> <varlistentry> <term><emphasis>prior release</emphasis></term> <listitem> <para>The release to be used to generate patch files.</para> </listitem> </varlistentry> </variablelist> <para>Example 1 - Build Shorewall 4.3.7 and generate patches against 4.3.6:</para> <blockquote> <para><command>build45 4.5.7 4.5.6</command></para> </blockquote> <para>Example 2 - Build Shorewall 4.5.7.1 Shorewall-core and generate patches against 4.5.7:</para> <blockquote> <para><command>build45 -trc 4.5.7.1 4.5.7</command></para> </blockquote> </section> <section> <title>upload</title> <para>This script is used to upload a release to www1.shorewall.net. The command is run in the build directory for the minor release of the product.</para> <blockquote> <para><command>upload</command> [ -<replaceable>products</replaceable> ] <replaceable>release</replaceable></para> </blockquote> <para>where</para> <variablelist> <varlistentry> <term><emphasis>products</emphasis></term> <listitem> <para>specifes the products to upload. If not given, all products are uploaded. This option is generally given only when uploading a patch release.</para> <variablelist> <varlistentry> <term>c</term> <listitem> <para>Upload the shorewall-core package.</para> </listitem> </varlistentry> <varlistentry> <term>l</term> <listitem> <para>Upload the shorewall-lite package.</para> </listitem> </varlistentry> <varlistentry> <term>i</term> <listitem> <para>Upload the shorewall-init package.</para> </listitem> </varlistentry> <varlistentry> <term>s</term> <listitem> <para>Upload the shorewall package.</para> </listitem> </varlistentry> <varlistentry> <term>6</term> <listitem> <para>Upload the shorewall6 package.</para> </listitem> </varlistentry> <varlistentry> <term>L</term> <listitem> <para>Upload the shorewall6-lite package.</para> </listitem> </varlistentry> </variablelist> </listitem> </varlistentry> <varlistentry> <term><emphasis>release</emphasis></term> <listitem> <para>The version number of the release to upload.</para> </listitem> </varlistentry> </variablelist> <para>Example 1 - Upload release 4.3.7:</para> <blockquote> <para><command>upload 4.3.7</command></para> </blockquote> <para>Example 2 - Upload shorewall-4.3.7.3:</para> <blockquote> <para><command>upload -c 4.3.7.3</command></para> </blockquote> </section> <section> <title>install.sh files</title> <para>Each product includes an install script (<filename>install.sh</filename>) that may be used to install the product on a machine or into a directory.</para> <para>By default, the scripts install the corresponding product into "/'; you can direct them to install into an empty existing directory by setting an environmental variable:</para> <itemizedlist> <listitem> <para>DESTDIR (release 4.4.10 and later)</para> </listitem> <listitem> <para>PREFIX (all releases)</para> </listitem> </itemizedlist> <para>There are a number of other environmental variables that you can set to cause the directory to be populated for a particular target environment:</para> <itemizedlist> <listitem> <para>DEBIAN - Debian-based systems (Debian, Ubuntu, etc.)</para> </listitem> <listitem> <para>SUSE - SEL and OpenSuSE</para> </listitem> <listitem> <para>REDHAT - RHEL, CentOS, Foobar, etc.</para> </listitem> <listitem> <para>MAC - Apple MacIntosh (Shorewall and Shorewall6 packages only)</para> </listitem> <listitem> <para>CYGWIN - Cygwin under Windows (Shorewall and Shorewall6 packages only)</para> </listitem> </itemizedlist> </section> </section> </article>