| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608 |
- $Id$
- ===========================================
- SIP Express Router (ser) Installation Notes
- http://www.iptel.org/ser/
- ===========================================
- This memo gives you hints how to set up SER quickly. To
- understand how SER works and how to configure it properly,
- read admin's guide available from SER website. We also
- urge you to read latest ISSUES (available from SER website
- too) and check for potential problems in this release.
- Users of previous releases are encouraged to read NEWS to
- learn how to move to this new SER version.
-
- TOC
- 1. Supported Architectures and Requirements
- 2. Howto Build ser From Source Distribution
- 3. Quick-Start Installation Guide
- A) Getting Help
- B) Disclaimers
- C) Quick Start
- D) ser with Persistent Data Storage
- 4. Troubleshooting
- 1. Supported Architectures and Requirements
- -------------------------------------------
- Supported operating systems: Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Darwin
- Partially supported: Windows+Cygwin (core + static modules only, no IPv6,
- no TCP, no dynamic modules)
- Supported architectures: i386, x86_64 (amd64), armv4l, sparc64, powerpc,
- powerpc64
- Experimental architectures: mips1, mips2, sparc32, alpha
- (for other architectures the Makefiles might need to be edited)
- There are various configuration options defined in the Makefile.
- Requirements:
- - gcc or icc : gcc >= 2.9x; 3.[12] recommended (it will work with older version
- but it might require some options tweaking for best performance)
- - bison or yacc (Berkley yacc)
- - flex
- - GNU make (on Linux this is the standard "make", on *BSD and Solaris is
- called "gmake") version >= 3.79.
- - sed and tr (used in the makefiles)
- - GNU tar ("gtar" on Solaris) and gzip if you want "make tar" to work
- - GNU install, BSD install or Solaris install if you want "make
- install", "make bin", "make sunpkg" to work
- - libmysqlclient & libz (zlib) if you want mysql support (the mysql module)
- - libexpat if you want the jabber gateway support (the jabber module)
- - libxml2 if you want to compile the cpl-c (CPL support) or pa (presence)
- modules
- - libradiusclient-ng (> 5.0) if you need radius support (the auth_radius,
- group_radius, uri_radius and avp_radius modules)
- - libpq if you need postgres support (the postgres module)
- OS Notes:
- FreeBSD/OpenBSD/NetBSD: make sure gmake, bison or yacc & flex are installed.
-
- FreeBSD 5.4:
-
- If you want to compile all the modules, you will need the following packages:
- - mysql-client-* (any version, install one of the mysql*-client ports) for
- libmysqlclient
- - postgresql-libpqxx-2.4.2_1 (/usr/ports/databases/postgresql-libpqxx) for
- libpq
- - expat-1.95.8 (/usr/ports/textproc/expat2) for libexpat
- - libxml2-2.6.18 (/usr/ports/textproc/libxml2) for libxml2
- - radiusclient-0.4.7 (/usr/ports/net/radiusclient) for libradiusclient-ng
- NOTE: you'll need to add radiusclient_ng=4 to the gmake command line if you
- use the 0.4.* version.
-
- Compile example (all the modules and ser in a tar.gz):
- gmake bin radiusclient_ng=4 include_modules="mysql jabber cpl-c auth_radius group_radius uri_radius postgres pa"
- OpenBSD 3.7
- - mysql-client-4.0.23 (/usr/ports/databases/mysql) for libmysqlclient
- - expat-1.95.6 (/usr/ports/textproc/expat) for libexpat
- - libxml-2.6.16p0 (/usr/ports/textproc/libxml) for libxml2
- - radiusclient-ng-0.5.1 from
- http://download.berlios.de/radiusclient-ng/radiusclient-ng-0.5.1.tar.gz
- (you need to download and install it, since there is no "official"
- openbsd port for it) for libradiusclient-ng
- Compile example (all the modules and ser in a tar.gz):
- gmake bin include_modules="mysql jabber cpl-c auth_radius group_radius uri_radius pa"
- NetBSD 2.0
- - mysql-client-4.1.12 (/usr/pkgsrc/databases/mysql4-client) for libmysqlclient
- - expat-1.95.8nb2 (/usr/pkgsrc/textproc/expat) for libexpat
- - libxml2-2.6.19 (/usr/pkgsrc/textproc/libxml2) for libxml2
- - radiusclient-ng-0.5.1 (see OpenBSD)
-
- Compile example (all the modules and ser in a tar.gz):
- gmake bin include_modules="mysql jabber cpl-c auth_radius group_radius uri_radius pa"
- Solaris 10
-
- As above; you can use Solaris's yacc instead of bison. You might
- need also gtar and ginstall. If you don't have ginstall you can use Solaris
- install, just make sure it's in the PATH (it's usually in /usr/sbin) and
- add INSTALL=install either to the environment or to the make command line
- (e.g.: gmake INSTALL=install all).
-
- Needed packages:
- [TODO]
-
- Compile example (all the modules and ser in a tar.gz):
- gmake bin INSTALL=install include_modules="mysql jabber cpl-c auth_radius group_radius uri_radius postgres pa"
- Linux
- Needed packages for compiling all the modules:
- Debian:
- - libmysqlclient-dev for libmysqlclient
- - libpq-dev for libpq
- - libexpat1-dev for libexpat
- - libxml2-dev for libxml2
- - libradiusclient-ng-dev for libradiusclient (you can download the
- package from http://apt.sip-router.org/debian/dists/unstable/main/binary-i386/libradiusclient-ng-dev_0.5.1-0.5_i386.deb ).
- NOTE: you can get up-to-date ser packages or libradiusclient packages
- from http://apt.sip-router.org: add to your /etc/apt/sources.list the
- following lines:
- deb http://apt.sip-router.org/debian testing main contrib non-free
- deb http://apt.sip-router.org/debian unstable main contrib non-free
- and then: apt-get update; apt-get install libradiusclient-ng-dev
- (or, if you want to use the pre-built modules:
- apt-get install ser ser-cpl-module ser-jabber-module ser-mysq-module ser-pa-module ser-postgres-module ser-radius-modules )
- Cygwin (alpha state, partial support)
- make sure make, bison, flex, minires and minires-devel (needed for the resolver functions) are installed.
-
- Only building ser's core and some static modules is supported for now.
- Stuff known not to work:
- - IPv6 (cygwin doesn't support it yet)
- - TCP (the tcp code heavily depends on file descriptor passing
- between processes, which is not yet supported by cygwin)
- - dynamic modules (non statically linked -- not supported because
- backlinking doesn't work in windows by design)
- Compile example (all the modules and ser in a tar.gz):
- make bin include_modules="mysql jabber cpl-c auth_radius group_radius uri_radius postgres pa"
- 2. Howto Build ser From Source Distribution
- -------------------------------------------
- (NOTE: if make doesn't work try gmake instead)
- SER is split in four main parts: The core, the modules, the utilties, and scripts/examples
- When you build, you can decide to build only the core, the modules, both, or all.
- Compile SER core only:
- make #builds only ser core, equivalent to make ser
- Compile modules except some explicitly excepted (see below)
- make modules
- Compile all:
- make all
- Explicitly excepted modules (default in <=0.9.x):
- By default make all will not build modules that require external libraries or
- that are considered to be "experimental". The modules that have external
- dependencies are: mysql, jabber, cpl-c, auth_radius, group_radius, uri_radius,
- avp_radius, postgres, pa.
- Including groups of modules (available in >0.9.x):
- Instead of compiling the default modules only, you can specify groups of
- modules to include, according to their status:
- standard - Modules in this group are considered a standard part of SER (due to widespread usage)
- but they have no dependencies (note that some of these interplay with external systems.
- However, they don't have compile or link dependencies).
- standard-dep - Modules in this group are considered a standard part of SER (due to widespread usage)
- but they have dependencies that most be satisfied for compilation.
- NOTE! All presence modules (dialog, pa, presence_b2b, rls, xcap) have been included in this
- group due to interdependencies
- stable - Modules in this group satisfy specific or niche applications, but are considered
- stable for production use. They may or may not have dependencies
- experimental - Modules in this group are either not complete, untested, or without enough reports
- of usage to allow the module into the stable group. They may or may not have dependencies.
- To compile core with standard modules:
- make group_include="standard" all
- To compile all modules (provided you have all the required libraries installed) use:
- make group_include="standard standard-dep stable experimental" all
- There are also in addition some "convenience" groups:
- mysql - Include all modules dependent on mysql
- radius - Include all modules on radiusclient
- presence - Include all the presence modules
- Ex. to make a standard installation with mysql, use:
- make group_include="standard mysql" all
- In addition to group_include (or instead), you can use
- include_modules="modA modB"
- to specify exactly the modules you want to include, ex.
- make include_modules="mymodule" modules
- You can also explicitly skip modules using skip_modules. Let's say you want all the standard
- and standard-dep modules except domain:
- make group_include="standard standard-dep" skip_modules="domain" all
- NOTE!!! As this mechanism is very powerful, you may be uncertain which modules wwill be included.
- Just replace all (or modules) with print-modules and you will see which modules will be included
- and excluded, ex:
- make print-modules
- will show which modules are excluded by default.
- If you want to install or to build a binary package (a tar.gz with ser and
- the modules), substitute "all" in the above command with "install" or "bin".
- More compile examples:
- - compile with profiling
- make PROFILE=-pg all
- -compile debug mode version
- make mode=debug all
- -compile debug version with profiling
- make mode=debug PROFILE=-pg all
- -compile only the print module
- make modules=modules/print modules
- - compile by default only the print module, in debuging mode and with
- profiling:
- make cfg modules=modules/print mode=debug PROFILE=-pg
- make all
- - compile by default all the usual modules + mysql and postgres, optimized
- for pentium-m and for space
- make cfg include_modules="mysql postgres" CPU=pentium-m CC_EXTRA_OPTS=-Os
- make all
- -compile all the "default" modules except textops and vm
- make skip_modules="textops vm" modules
- - save the above option in the make config, so that all make commands
- will use it by default:
- make cfg skip_modules="textops vm"
- -compile all default modules and include uri_radius (not compiled by default):
- make include_modules="uri_radius" modules
- -compile all the modules from the modules subdirectory (even the one excluded
- by default):
- make exclude_modules="" modules
- -compile all the modules from the modules subdirectory excluding vm:
- make exclude_modules=vm modules
- or
- make exclude_modules="" skip_modules=vm modules
- -compile with the "tm" module statically linked and with profiling
- make static_modules=tm PROFILE=-pg all
- -compile with gcc-3.2 instead of gcc
- make CC=gcc-3.2 all
- or
- CC=gcc-3.2 make all
- Make targets:
- Configure:
- make cfg or make config (force config regeneration and store it in config.mak)
- Example: make cfg include_modules=mysql mode=debug (all future make
- invocations will include the mysql module and will build in debug mode)
- Note: if config.mak doesn't exist (e.g. initial checkout or after a make
- proper) or if Makefile.defs was changed, the config will be re-generated
- automatically by the first make command. For example:
- make cfg include_modules=mysql; make all is equivalent to
- rm config.mak; make include_modules=mysql.
- Clean:
- make clean (clean the modules too)
- make proper (clean also the dependencies and the config)
- make distclean (the same as proper)
- make mantainer-clean (clean everything, including auto generated files,
- tags, *.dbg a.s.o)
- Compile:
- make proper
- optional: make cfg <various cfg. options that should be saved>
- make
- (or gmake on non-Linux systems)
- make modules
- or make modules exclude_modules="CVS print" etc.
- Make tags:
- make TAGS
- Create a tar.gz with the sources (in ../):
- make tar
- Create a tar.gz with the binary distribution (in ../):
- make bin
- Create a gzipped solaris package (in ../):
- make sunpkg
- Create debian packages (in ../):
- make deb
- or
- dpkg-buildpackage
- Documentation:
- make README
- Regenerates the README for all the "default" modules (include_modules,
- skip_modules a.s.o can be used to alter the module list).
- make man
- Generates a manpage for all the modules that support it (.xml file in the
- module directory).
- Install:
- make prefix=/usr/local install
- Note: If you use prefix parameter in make install then you also need
- to use this parameter in previous make commands, i.e. make, make modules,
- or make all. If you fail to do this then SER will look for the default
- configuration file in a wrong directory, because the directory of the
- default configuration file is hard coded into ser during compile time.
- When you use a different prefix parameter when installing then the
- directory hard coded in ser and the directory in which the file will be
- installed by make install will not match. (You can specify exact location
- of the configuration file using -f parameter of ser).
- For example, if you do the following:
- make all
- make prefix=/ install
- Then the installation will put the default configuration file into
- /etc/ser/ser.cfg (because prefix is /), but ser will look for the file
- in /usr/local/etc/ser/ser.cfg (because there was no prefix parameter
- in make all and /usr/local is the default value of prefix).
- Workaround is trivial, use the same parameters in all make commands:
- make prefix=/ all
- make prefix=/ install
- or save the desired prefix in the make config (e.g.: make cfg prefix=/).
- That applies to other make parameters as well (for example parameters
- "modules" or "excluded_modules").
- 3. Quick-Start Installation Guide
- ----------------------------------------------
- A) Getting Help
- This guide gives you instructions on how to set up the SIP Express
- Router (ser) on your box quickly. In case the default configuration
- does not fly, check documentation at ser site
- http://www.iptel.org/ser/
- to learn how to configure SER for your site.
- If the documentation does not resolve your problem you may try contacting
- our user forum by E-mail at [email protected] -- that is the mailing list
- of ser community. To participate in the mailing list, subscribe at the
- following web address:
- http://mail.iptel.org/mailman/listinfo/serusers
- To participate in our commercial support program, contact [email protected].
- The support program will provide you with most timely and accurate help
- for configuration, integration, development and any other technical
- activity.
- B) Disclaimers
-
- Note well the default "quick-start" configuration is very simple in order
- to be easily installable. It provides minimum features. Particularly,
- authentication is by default disabled, which means anyone can register using
- any name with the server. (This is on purpose to avoid installation
- dependencies on MySQL which is needed for storing user credentials.)
- C) Quick Start
- The following step-by step guide gives you instructions how to install the
- sql-free distribution of ser. If you need persistence and authentication,
- then you have to install additional MySql support -- proceed to section D)
- after you are finished with C).
- 1) Download an RPM or debian package from our site
- http://www.iptel.org/ser
- If you don't use an rpm or debian based distribution, try our tar.gz'ed binaries
- (ser-$(version)_$(os)_$(arch).tar.gz, e.g: ser-0.8.8_linux_i386.tar.gz).
- If you use Solaris 8 you can try our solaris package.
- If you use Gentoo Linux you do not have to download a package.
- 2) install the package
- RPM:
- rpm -i <package_name>
- debian:
- dpkg -i <package_name>
- gentoo:
- emerge ser
- (or if use only stable packets:
- ACCEPT_KEYWORDS="~x86" emerge ser)
- tar.gz:
- cd /; tar zxvf <package_name>_os_arch.tar.gz
- (it will install in /usr/local/, and the configuration file in
- /usr/local/etc/ser/ser.cfg)
- Solaris:
- gunzip <package_name>.gz ; pkgadd -d <package_name>
- *BSD:
- pkg_add package_name
-
- 3) start the server
- RPM + gentoo:
- /etc/init.d/ser start
- debian:
- ser is started automatically after the install
- (in case something fails you can start it with /etc/init.d/ser start)
- tar.gz:
- the tar.gz does not include an init.d script, you'll have to create one of
- your own or adapt one from the source distribution (debian/init.d,
- rpm/ser.init.*, gentoo/ser.init)
- You can start ser directly with /usr/local/sbin/ser.
- Solaris:
- see tar.gz.
-
- 4) optionally, watch server's health using the
- serctl utility
- - to do so, first set the environment variable SIP_DOMAIN to your domain
- name, e.g., in Bourne shell, call
- export SIP_DOMAIN="myserver.foobar.com"
- - if you are using other than 'localhost' mysql server for maintaining
- subscriber database, change the variable 'SQL_HOST' to the proper
- host name in the serctl script
- - run the serctl utility
- /usr/sbin/serctl moni
- or
- /usr/local/sbin/serctl moni (if you installed from a tar.gz or solaris
- package)
- 5) Register with the server using your favorite
- SIP User Agent. You may want to look at configuration
- hints for use of iptel.org site at
- http://www.iptel.org/phpBB/viewforum.php?forum=1&8
- For example, users of Windows Messenger need to set
- in Tools->Options->Accounts the following values:
- Sign-in Name: <username>@<your_server_address>
- Advanced->Configure Settings (on)
- Advanced->Server: <your_server_address>
- Connect Using: UDP
- D) ser with Persistent Data Storage
- The default configuration is very simple and features many simplifications.
- In particular, it does not authenticate users and loses User Location database
- on reboot. To provide persistence, keep user credentials and remember users'
- locations across reboots, ser can be configured to use MySQL. Before you proceed,
- you need to make sure MySQL is installed on your box. Your MySQL server must be
- configured to deal with a large number of connection. To increase it, set the
- following line in [mysqld] section of your configuration file:
- set-variable = max_connections=500
- 1) Download the package containing mysql support for ser from:
- http://www.iptel.org/ser/
- (rpm and deb provided, most of the binary tar.gz distributions and the
- solaris package include it; if it is not present you'll have to rebuild
- from the source).
- For gentoo please include 'mysql' to your USE variable in /etc/make.conf
- or give it as variable to the emerge command.
- 2) install the package
- rpm -i <package_name>
- or
- dpkg -i <package_name>
- or
- emerge ser
- (if do not want to put 'mysql' into your USE variable you can type:
- USE="mysql" emerge ser)
- 3) create MySQL tables
- - if you have a previously installed SER on your system, use
- /usr/sbin/ser_mysql.sh reinstall
- to convert your SER database into new structures
- - otherwise, if this is your very first installation, use
- /usr/sbin/ser_mysql.sh create
- to create SER database structures
- (you will be prompted for password of MySql "root" user)
- 4) configure ser to use SQL
- uncomment all lines in configuration file ser.cfg which are related to
- authentication:
- - loadmodule "/usr/lib/ser/modules/mysql.so"
- - loadmodule "/usr/lib/ser/modules/auth.so"
- - loadmodule "/usr/lib/ser/modules/auth_db.so"
- - modparam("usrloc", "db_mode", 2)
- - modparam("auth", "calculate_ha1", yes)
- - modparam("auth_db", "password_column", "password")
- - if (!www_authorize("iptel.org", "subscriber")) {
- www_challenge("iptel.org", "0");
- break;
- };
- 5) be sure to replace realm, the first parameter in www_* actions,
- with name of your server; some broken UAC implementations don't
- authenticate otherwise; the authentication command in your
- configuration script should look then like this:
- if (!www_authorize("myserver.foobar.com", "subscriber")) {
- www_challenge("myserver.foobar.com", "0");
- break;
- }
- 6) restart the server
- /etc/init.d/ser restart
- 7) you can now start managing the server using the serctl utility;
- you need to first set the environment variable SIP_DOMAIN to your
- local SIP realm, e.g.,
- export SIP_DOMAIN="myserver.foobar.com"
- a) watch the server status using 'serctl moni'
- b) try to login with your SIP client as user 'admin' with password 'heslo'
- c) try adding new users using
- 'serctl add <name> <password> <email>'
- 4. Troubleshooting
- ------------------
- Q: Windows Messenger authentication fails.
- A: The most likely reason for this problem is a bug in Windows Messenger.
- WM only authenticates if server name in request URI equals authentication
- realm. After a challenge is sent by SIP server, WM does not resubmit the
- challenged request at all and pops up authentication window again. If you
- want to authenticate WM, you need to set up your realm value to equal server
- name. If your server has no name, IP address can be used as realm too.
- Q: SIP requests are replied by ser with "483 Too Many Hops" or
- "513 Message Too Large"
- A: In both cases, the reason is probably an error in request routing script
- which caused an infinite loop. You can easily verify whether this happens
- by watching SIP traffic on loopback interface. A typical reason for misrouting
- is a failure to match local domain correctly. If a server fails to recognize
- a request for itself, it will try to forward it to current URI in believe it
- would forward them to a foreign domain. Alas, it forwards the request to itself
- again. This continues to happen until value of max_forwards header field reaches
- zero or the request grows too big. Solutions is easy: make sure that domain matching
- is correctly configured. A quick way to achieve that is to introduce a config
- option to ser.cfg: alias=domainname, where domainname shall be replaced with
- name of domain, which you wish to server and which appears in request-URIs.
|