FreeSWITCH for Debian ===================== Introduction ------------ Because FreeSWITCH has so many modules it was necessary to create a system to autogenerate the majority of the packaging. This in done mostly in the file debian/bootstrap.sh. This bootstrap needs to run before any other step of the packaging, though we do try to autogenerate it when possible. Getting the FreeSWITCH sources ------------------------------ Everything that follows will assume that you're in the base directory of a FreeSWITCH git repository. You can achieve this with: aptitude update && aptitude install -y git mkdir -p /usr/src/freeswitch git clone https://github.com/signalwire/freeswitch.git /usr/src/freeswitch/src cd /usr/src/freeswitch/src Ensuring you have a clean build directory ----------------------------------------- Every time you start over, you should make sure your build directory is perfectly clean and clear of untracked files. You can accomplish this with: git clean -fdx && git reset --hard origin/master Using the packaging to do a normal build ---------------------------------------- Let's say you don't want to build the Debian packages; you just want to build FS. You'll need certain dependencies installed on your system to do this. And you probably want to configure FS in the same way we do for the packaging. You can let the packaging files do this work for you so you don't have to manually keep track of which dependencies are required to build FS. Build as follows: aptitude update && aptitude install -y devscripts equivs build-essential my_release=$(awk '/deb .*\/debian/{print $3; exit}' /etc/apt/sources.list) (cd debian && ./bootstrap.sh -c $my_release) sed -i debian/control -e '/^#/d' && sed -i debian/control -e '/^$/N;/^\n$/D' mk-build-deps -i make -f debian/rules .stamp-configure && make The debian/modules.conf file ---------------------------- If the file debian/modules.conf is present, we read that file and only build and package the files listed there. Otherwise, we build every module except the ones that either should not be packaged, or for which we don't yet have good packaging. The format of debian/modules.conf is: ## comments should start with two hash characters / Building the Debian packaging ----------------------------- If you want actually Debian binary or source packages to upload to your own repository, you'll need to build them as described here. We have some fancy automatic tools to accomplish this. The tools allow you to start from a very bare Debian image and generate working packages. Building in this manner is only supported on Debian jessie, though it will generate packages for all supported Debian releases. Simply run as root: echo "USENETWORK=yes" >$HOME/.pbuilderrc ./debian/util.sh build-all -ibn -z9 -aamd64 -cjessie Building on Ubuntu ------------------ Building on supported Ubuntu releases requires the main and universe APT components in the pbuilder chroot. You should enable the universe component in your system's APT sources.list and use the -t option to use your system sources in the chroot: ./debian/util.sh build-all -ibn -z9 -t Building only some modules -------------------------- If you don't need all the modules to build, create a modules.conf file outside of your source tree and pass the -f option to build-all. e.g.: echo "applications/mod_commands" > /tmp/modules.conf ./debian/util.sh build-all -ibn -z9 -f /tmp/modules.conf Testing a particular module under packaging ------------------------------------------- If you need to build a small set of modules for compile testing in the pbuilder environment, you can run: ./debian/util.sh build-all -dni -z1 -a amd64 -c sid -l "applications/mod_commands" Getting help with debian/util.sh -------------------------------- The debian/util.sh has many options. You can see the documentation for these options by running: ./debian/util.sh -h The debian/control-modules file ------------------------------- The build dependencies, runtime dependencies, and other details about modules can be configured in the debian/control-modules file. Even though this file looks a bit like a debian control file and has a similar format, we are parsing this file ourselves so the format is a bit more restricted. debian/control-modules currently supports the following fields: # lines that begin with the hash character are comments # # every block must start with a Module field Module: / Description: # empty lines with "."s are not yet supported Build-Depends: Depends: Recommends: Suggests: Distro-Conflicts: # not yet implemented During bootstrap we build a file control-modules.gen. If the control-modules file is properly formatted, this generated file should be identical. This is a sanity check mechanism for our parsing, as well as a way to automatically reorganize the file. Building Debian packages without util.sh ---------------------------------------- Building the packages without util.sh is not recommended as util.sh takes care of many non-trivial details. If needed, however, the packages can be built: distro=sid ver="$(cat build/next-release.txt | sed -e 's/-/~/g')~n$(date +%Y%m%dT%H%M%SZ)-1~${distro}+1" git clean -fdx && git reset --hard origin/master ./build/set-fs-version.sh "$ver" git add configure.ac && git commit -m "bump to custom v$ver" (cd debian && ./bootstrap.sh -c $distro) dch -b -m -v "$ver" --force-distribution -D "unstable" "Custom build." dpkg-buildpackage -b -us -uc -Zxz -z9 git reset --hard HEAD^ To build for a stable branch, do this: distro=sid # update as needed stable_ver="1.2.1" # update as needed ver="$(echo "$stable_ver" | sed -e 's/-/~/g')~n$(date +%Y%m%dT%H%M%SZ)-1~${distro}+1" git clean -fdx && git reset --hard refs/tags/v${stable_ver} ./build/set-fs-version.sh "$ver" git add configure.ac && git commit -m "bump to custom v$ver" (cd debian && ./bootstrap.sh -c $distro) dch -b -m -v "$ver" --force-distribution -D "unstable" "Custom build." dpkg-buildpackage -b -us -uc -Zxz -z9 git reset --hard origin/master Building the freeswitch-sounds and freeswitch-music packages ------------------------------------------------------------ The source packages for sounds and music on hold are maintained in a separate repository. Each set of sounds has a separate version number and the processing of the sounds is quite different from what we're doing here, so trying to maintain a merged debian/ between FreeSWITCH and the sounds and music would be a mess. To build the Debian packages for freeswitch-sounds-* and freeswitch-music-*: git clone https://github.com/traviscross/freeswitch-sounds.git cd freeswitch-sounds && cat debian/README.source -- Travis Cross , Wed, 19 Mar 2014 19:07:23 +0000