123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- 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
- <category>/<module_name>
- 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: <category>/<module_name>
- Description: <short description>
- <long description> # empty lines with "."s are not yet supported
- Build-Depends: <build deps for this module>
- Depends: <runtime deps for this module>
- Recommends: <recommended packages>
- Suggests: <suggested packages>
- Distro-Conflicts: <distributions on which this module should not be built> # 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 <tc@traviscross.com>, Wed, 19 Mar 2014 19:07:23 +0000
|