== XMPP/Chat Client Setup To configure XMPP/BOSH in Noosfero you need: * REST Client - http://github.com/archiloque/rest-client * SystemTimer - http://ph7spot.com/musings/system-timer * Pidgin data files - http://www.pidgin.im/ If you use Debian Lenny: # apt-get install librestclient-ruby (from backports) # apt-get install pidgin-data # apt-get install ruby1.8-dev # gem install SystemTimer Take a look at util/chat directory to see samples of config file to configure a XMPP/BOSH server with ejabberd, postgresql and apache2. == XMPP/Chat Server Setup This is a step-by-step guide to get a XMPP service working, in a Debian system. 1. Install the required packages # apt-get -t lenny-backports install ejabberd # apt-get install odbc-postgresql 2. Ejabberd configuration All the following changes must be done in config file: /etc/ejabberd/ejabberd.cfg 2.1. Set the default admin user { acl, admin, { user, "john", "www.example.com" } }. { acl, admin, { user, "bart", "www.example.com" } }. 2.2. Set the default host { hosts, [ "www.example.com" ] }. 2.3. Http-Bind activation { 5280, ejabberd_http, [ http_bind, web_admin ] } (...) { modules, [ {mod_http_bind, []}, ... ] }. Ejabberd creates semi-anonymous rooms by default, but Noosfero's Jabber client needs non-anonymous room, then we need to change default params of creation rooms in ejabberd to create non-anonymous rooms. In non-anonymous rooms the jabber service sends the new occupant's full JID to all occupants in the room[1]. Add option "{default_room_options, [{anonymous, false}]}" to /etc/ejabberd/ejabberd.cfg in mod_muc session. See below: { mod_muc, [ %%{host, "conference.@HOST@"}, {access, muc}, {access_create, muc}, {access_persistent, muc}, {access_admin, muc_admin}, {max_users, 500}, {default_room_options, [{anonymous, false}]} ]}, [1] - http://xmpp.org/extensions/xep-0045.html#enter-nonanon 2.4. Authentication method To use Postgresql through ODBC, the following modifications must be done: * Disable the default method: {auth_method, internal}. * Enable autheticantion through ODBC: {auth_method, odbc}. * Set database server name {odbc_server, "DSN=PostgreSQLEjabberdNoosfero"}. 2.5. Increase the shaper traffic limit { shaper, normal, { maxrate, 10000000 } }. 2.6. Disable unused modules Unused modules can be disabled, for example: * s2s * web_admin * mod_pubsub * mod_irc * mod_offine * mod_admin_extra * mod_register 2.7. Enable ODBC modules * mod_privacy -> mod_privacy_odbc * mod_private -> mod_private_odbc * mod_roster -> mod_roster_odbc 3. Configuring Postgresql Login as noosfero user, and execute: $ psql noosfero < /path/to/noosfero/util/chat/postgresql/ejabberd.sql Where 'noosfero' may need to be replace by the name of the database used for Noosfero. This will create a new schema inside the noosfero database, called 'ejabberd'. Note 'noosfero' user should have permission to create Postgresql schemas. Also, there should be at least one domain with 'is_default = true' in 'domains' table, otherwise people couldn't see your friends online. 4. ODBC configuration The following files must be created: * /etc/odbc.ini [PostgreSQLEjabberdNoosfero] Description = PostgreSQL Noosfero ejabberd database Driver = PostgreSQL Unicode Trace = No TraceFile = /tmp/psqlodbc.log Database = noosfero Servername = localhost UserName = Password = Port = ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings = SET search_path TO ejabberd * /etc/odbcinst.ini [PostgreSQL Unicode] Description = PostgreSQL ODBC driver (Unicode version) Driver = /usr/lib/odbc/psqlodbcw.so Setup = /usr/lib/odbc/libodbcpsqlS.so Debug = 0 CommLog = 1 UsageCount = 3 * testing all: # isql 'PostgreSQLEjabberdNoosfero' DBUSER 5. Enabling kernel polling and SMP in /etc/default/ejabberd POLL=true SMP=auto 6. Increase the file descriptors limit for user ejabberd 6.1. Uncomment this line in file /etc/pam.d/su: session required pam_limits.so 6.2. Add this lines to file /etc/security/limits.conf: ejabberd hard nofile 65536 ejabberd soft nofile 65536 Now, test the configuration: # cat /proc//limits 7. Apache Configuration Apache server must be configurated as follow: * /etc/apache2/sites-enabled/noosfero RewriteEngine On Include /usr/share/noosfero/util/chat/apache/xmpp.conf * /etc/apache2/apache2.conf: StartServers 8 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 128 ThreadsPerChild 128 MaxClients 2048 MaxRequestsPerChild 0 Note: module proxy_http must be enabled: # a2enmod proxy_http 8. DNS configuration * /etc/bind/db.colivre: _xmpp-client._tcp SRV 5 100 5222 master (...) conference CNAME master _xmpp-client._tcp.conference SRV 5 100 5222 master 9. Testing this Setup Adjust shell limits to proceed with some benchmarks and load tests: # ulimit −s 256 # ulimit −n 8192 # echo 10 > /proc/sys/net/ipv4/tcp_syn_retries To measure the bandwidth between server and client: * at server side: # iperf −s * at client side: # iperf −c server_ip For heavy load tests, clone and use this software: git clone http://git.holoscopio.com/git/metal/tester.git