<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>SparkSupport.com Blog</title>
	
	<link>http://www.sparksupport.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 29 Jul 2010 14:40:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/sparksupport" /><feedburner:info uri="sparksupport" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Puppet Configuration Management Tool</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/89siYbqbfPg/puppet-configuration-management-tool</link>
		<comments>http://www.sparksupport.com/blog/puppet-configuration-management-tool#comments</comments>
		<pubDate>Wed, 28 Jul 2010 16:11:08 +0000</pubDate>
		<dc:creator>Haridas N</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[Datacenter Administration Tool]]></category>
		<category><![CDATA[install and configure puppet']]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[puppet configurations]]></category>
		<category><![CDATA[Setup Puppet]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=741</guid>
		<description><![CDATA[Introduction
Puppet is a Ruby based Configuration Management System with client/server model and it was licensed under GPLv2 .It has one Master server puppetmasterd  and all other machines are configured as puppet clients . We set every configuration at the puppet server and then push them to all clients which are connected to the master. The [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>Puppet is a Ruby based Configuration Management System with client/server model and it was licensed under GPLv2 .It has one Master server puppetmasterd  and all other machines are configured as puppet clients . We set every configuration at the puppet server and then push them to all clients which are connected to the master. The client puppet correctly apply the corresponding configurations at the client regardless of their platform difference.</p>
<p>Puppet is a gift to the server administrators who need to manage large number of systems with different flavors of Gnu/Linux systems ,Mac, Solaris and other Unix Based systems.If we are managing it via remote administration then it would be a headache to the administrator and if the systems are different then the complexity will increase. Some accidental configuration changes may cause problems resulting in inconsistency working of the server. If we are using the puppet for the configuration management then it will be an one time implementation of these configurations only at puppet server, then we just duplicate it on different puppet clients with out any delay.</p>
<p>Another power of the puppet is, it using a Declarative Language to define configuration settings at the puppet master server. This language  includes all major high level language features like Functions, Conditional Statements, Inheritance and other OOPs concepts. This feature makes the Puppet configurations settings are more readable, reusable and consistent when we compared with other configuration management tools like Cfengine.</p>
<p><strong>Working</strong></p>
<p>Puppet master server hold all clients configurations, each client will contact the server via port 8140 (by default). The connection between server and client are encrypted. The client will generate a self signed key before it will connect to server and will submit this self signed key  to the master server and get the verified key back, here master server acts like a Certification Authority. After this process client will establish a encrypted session with server ,and get the configuration settings, compile and apply it on client system. The client will show an error if  there is any at the configuration definition when compiling. We can verify this at puppet server and client log file.</p>
<p><strong>Here is the outline of puppet server and client Architecture<br />
</strong></p>
<p style="text-align: center">
<div id="attachment_747" class="wp-caption aligncenter" style="width: 592px"><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/Puppet-Master-Server1.gif"><img class="size-full wp-image-747 " src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/Puppet-Master-Server1.gif" alt="Puppet Architecture " width="582" height="195" /></a><p class="wp-caption-text">Puppet Architecture </p></div>
<p><strong>Installation</strong></p>
<p>Before installing the puppet we need to setup some dependencies needed for puppet. First we need <strong>ruby </strong>with common library files(xml,ssl,etc.) installed, and <strong>facter</strong>, its an another ruby project to get all system informations, facter will be installed in all puppet clients. The puppet server get the client configuration settings and other system specific informations from the facter.</p>
<p>You can use the ruby&#8217;s inbuilt library management tool <strong>rubygem(rake)</strong> similar to CPAN for Perl to solve the dependency problems with libraries.</p>
<p><em><strong>facter installation :-</strong></em></p>
<p>Get latest version from www.reductivelabs.com</p>
<pre class="brush: bash;">

tar -zvf facter-&lt;version&gt;.tar.gz

cd facter

ruby install.rb

facter --version
</pre>
<p><em><strong>puppet installation :-</strong></em></p>
<p>If we are installing from the package manager there will be two packages, puppetd as the client and puppet-master as the puppet server, we need to install them both to setup client and server. If we are install form the source we can install both from the source code.</p>
<p>download latest package from the www.puppetlabs.com, then similar to facter installation,</p>
<pre class="brush: bash;">

tar -xzvf puppet-&lt;latest version&gt;;

cd puppet-&lt;latest-version&gt;;

ruby install.rb
</pre>
<p>This step will install the required packages for the puppet client and server. If you have any dependency problem then it will be most of the time due to the version mis match problem between ruby/puppet/facter, so select the version accordingly to avoid these types of errors.</p>
<p>By default the configuration files are listed under /etc/postfix and all others are at /var/lib/puppet  folder including log files.</p>
<p>Currently puppet support all major Unix like systems but not Windows.The latest versions of the puppet has introduced support to the windows systems too, by developing Windows specific facter tool to get Windows system informations and puppet.</p>
<p><strong>How to configure Puppet server :-</strong></p>
<p>After Successful installation of puppet master server and client, there will be set of daemons associated with this package, it also provide commands line utility to manage these daemons. They are,</p>
<pre class="brush: bash;">

puppetmasted   #Puppet Master Server

puppetd            #puppet Client.

puppetca           #Key management daemon

#and Set of other Utility commands.
</pre>
<p>The puppet server will work with out creating configuration files explicitly, they are already pre-configured with corresponding daemons. But to start the interaction with client we need to do some changes. Before that we can check the structure of the configuration file of the puppet.</p>
<p>It good practice using explicit configuration file,the latest versions of puppet using single configuration file to manage every daemons. By default configuration files are comes under <em>/etc/puppet</em>. The file /etc/puppet/puppet.conf is the file where we store all the configuration details major daemons, puppet.conf using special type of configuration structure to include all daemons configuration details. It holds following parts,</p>
<pre class="brush: plain;">

#Cat /etc/puppet/puppet.conf

[main]

Here We specify Set of configurations default to all daemons.

[puppetmasterd]

Here comes the puppet master servers specific configuration details.

[puppetd]

To include the Puppet client configuration.

[puppetca]

Configuration details of puppet key management tool.
</pre>
<p>To get all the parameters under each daemon and main section with its functional details, please refer <a href="http://www.reductivelabs.com/trac/puppet/wiki/ConfigurationReference" target="_blank">this page</a></p>
<p><strong>How to Configure Puppet Client With Puppet Server</strong></p>
<p>To setup a client we  just have to install the puppet client version or  every package in another system. Your master server is now capable to  work as a puppet client too. At the master server we need to specify the  set of configuration that we want enforce it with our puppet client.</p>
<p>Puppet server and client using Hostname to communicate with each other  and also used it with key generation and signing, so we need a stable  hostname resolution system (DNS or Local settings) in our network to  ensure the proper connection between client and server.Then after that  properly select the hostname to your server and clients like,</p>
<p><em>puppet-server.com</em> #For your Master Server</p>
<p><em>puppet-client1.com,puppet-client2.com,etc..</em><strong>.</strong> #Your clients.</p>
<p>After this correct hostname allocation we need to start the server and  client.Use command line options at first to know the correct interaction  between client and server.</p>
<p>To start master server :-</p>
<pre class="brush: bash;">
 puppetmasterd --no-daemonize --logdest console
</pre>
<p>Then Start the puppet Client, specify the server name</p>
<pre class="brush: bash;">

puppetd --server puppet-server.com --verbose --waitforcert 30
</pre>
<p>At the client side we will get following message with the information about the creation of self signed key and waiting for the verification from server.</p>
<pre class="brush: plain;">

&lt;em&gt;Creating a new SSL key for puppet-client.com
Creating a new SSL certificate request for puppet-client.com
Certificate Request fingerprint (md5): 37:89:4E:86:C0:A7:5B:24:1A:E2:9B:85:83:90:0F:CE
Did not receive certificate&lt;/em&gt;

&lt;em&gt;</pre>
<p><em> </em></p>
<p>At same time server side we will get the following message at the console.</p>
<pre class="brush: plain;">

notice: Starting Puppet master version 2.6.0
notice: puppet-client.com has a waiting certificate request
</pre>
<p>So at the server side we need to verify this key from the puppet-client.com. For that we can use the key management tool puppetca.</p>
<pre class="brush: bash;">

puppetca --list  #To list the unverified requests.

puppetca --sign puppet-client.com  # To complete the server verification.
</pre>
<p>Now If we are restarting the puppet client with following command, you can see the client will immediately apply the configurations. You can check this from the log file or from the console if you are running the client none daemonize mode.</p>
<pre class="brush: bash;">

puppetd --server puppet-server.com
</pre>
<p><strong>Note:-</strong> <em>If we are specify these settings at puppet.conf then you can just type the command without any parameter to start appropriate daemons.</em></p>
<p><strong>The Configuration Management</strong></p>
<p>Last and very powerful feature of the puppet is the creation of Client configuration specifications. For that puppet using one Language which support most of the high level language constructs like OOPs. So lets check for the one simple configuration which change the permission of /etc/passwd file of all the client connected with server to 640 and ensure the apache webserver.</p>
<p>These configurations specifications are defined under a file &#8220;<strong>/etc/puppet/manifests/site.pp</strong>&#8221; ,default file , we can split it in to several files then include them at sites.pp.</p>
<p>Here is the sample site.pp file.</p>
<pre class="brush: plain;">

file { &quot;password&quot;:
name =&gt; &quot;/etc/passwd&quot;,
 owner =&gt; &quot;root&quot;,
 group =&gt; &quot;bin&quot;,
 mode =&gt; 644,
}

class apache {

package {       httpd: ensure =&gt; installed  }

service { &quot;httpd&quot;:

name =&gt; $operatingsystem ? {
debian  =&gt; &quot;apache2&quot;,
redhat  =&gt; &quot;httpd&quot;,
default =&gt; &quot;apache&quot;,
CentOS  =&gt; &quot;httpd&quot;,
},
ensure =&gt; running,
require =&gt; Package[&quot;httpd&quot;],
}
}

node 'puppet-client.com' {
include apache
}
#All other nodes which are not defined and matched with any definitions ,will use the follwing node definition.

node default {
case $operatingsystem {
CentOS: {include apache }
default: {}
}
}
</pre>
<p>Above file is the Puppet configuration specification written in puppet declarative language.</p>
<p>Language have lot of constructs to define the resource and its properties &#8230;</p>
<p>more about it soon&#8230;.</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/89siYbqbfPg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/puppet-configuration-management-tool/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/puppet-configuration-management-tool</feedburner:origLink></item>
		<item>
		<title>Dynamic Agent Login in AsteriskNOW</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/Ez2X5oUoeK4/dynamic-agent-login-in-asterisknow</link>
		<comments>http://www.sparksupport.com/blog/dynamic-agent-login-in-asterisknow#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:24:53 +0000</pubDate>
		<dc:creator>Tino Thomas</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[asterisk dynamic agent]]></category>
		<category><![CDATA[asteriskNOW]]></category>
		<category><![CDATA[asterisknow dynamic agent]]></category>
		<category><![CDATA[asterisknow dynamic agent login]]></category>
		<category><![CDATA[dynamic agent]]></category>
		<category><![CDATA[dynamic agent login]]></category>
		<category><![CDATA[freepbx dynamic agent]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=708</guid>
		<description><![CDATA[This blog explains how an agent can login to a queue directly through an extension. In asterisk&#8217;s terms an agent is human and an extension is device. Here an agent will be able to login into the queue through an extension by dialing a queue login number and you do not need to make any [...]]]></description>
			<content:encoded><![CDATA[<p>This blog explains how an agent can login to a queue directly through an extension. In asterisk&#8217;s terms an agent is human and an extension is device. Here an agent will be able to login into the queue through an extension by dialing a queue login number and you do not need to make any configurations in agents.conf or queues.conf.  For this setup to work properly, you need to have the correct dialplans in corresponding  extension files.</p>
<p>In the case of asteriskNOW, extension_additional.conf contains dialplans to handle  queue login.</p>
<pre class="brush: bash;">
[ext-queues]
exten =&gt; 5000*,1,Macro(agent-add,5000,)
exten =&gt; 5000**,1,Macro(agent-del,5000,5000)
</pre>
<p>If [macro-agent-add] and [macro-agent-del] contexts are already present in extensions_additional.conf you need to put the dialplans for these contexts in /etc/asterisk/extensions_override_freepbx.conf otherwise you can add the dialplans in /etc/asterisk/extensions_custom.conf.</p>
<pre class="brush: bash;">
[macro-agent-add]
include =&gt; macro-agent-add-custom
exten =&gt; s,1,Wait(1)
exten =&gt; s,n,Macro(user-callerid,SKIPTTL)
exten =&gt; s,n,Set(CALLBACKNUM=${AMPUSER})
exten =&gt; s,n,AddQueueMember(${ARG1},Local/${CALLBACKNUM}@from-internal/n)
exten =&gt; s,n,UserEvent(Agentlogin,Agent: ${CALLBACKNUM})
exten =&gt; s,n,Wait(1)
exten =&gt; s,n,Playback(agent-loginok&amp;with&amp;extension)
exten =&gt; s,n,SayDigits(${CALLBACKNUM})
exten =&gt; s,n,Hangup
exten =&gt; s,n,MacroExit()
exten =&gt; s,n(invalid),Playback(pbx-invalid)
exten =&gt; s,n,Goto(a3)

; end of [macro-agent-add]
[macro-agent-del]
include =&gt; macro-agent-del-custom
exten =&gt; s,1,Wait(1)
exten =&gt; s,n,Macro(user-callerid,SKIPTTL)
exten =&gt; s,n,Set(CALLBACKNUM=${AMPUSER})
exten =&gt; s,n,ExecIf($[&quot;${CALLBACKNUM}&quot; = &quot;&quot;],Set,CALLBACKNUM=${CALLERID(number)})
exten =&gt; s,n,RemoveQueueMember(${ARG1},Local/${CALLBACKNUM}@from-internal/n)
exten =&gt; s,n,UserEvent(RefreshQueue)
exten =&gt; s,n,Wait(1)
exten =&gt; s,n,Playback(agent-loggedoff&amp;with&amp;extension)
exten =&gt; s,n,SayDigits(${CALLBACKNUM})
exten =&gt; s,n,Hangup
; end of [macro-agent-del]
</pre>
<p>In this dialplan 5000 is the queue number. You can use any queue number instead of it. To login to queue dial 5000* from your phone (either a softphone like xlite or a hard phone like Linksys) and you will hear a login confirmation and to logout from the queue you need to dial 5000** as per the dial plan. The advantage of this method is that an agent can do a login or logout by just dialing the corresponding number. Once logged in we can check current members in the queue using the command.</p>
<pre class="brush: bash;">
From shell
#asterisk -rx &quot;queue show 5000&quot;   (5000 is the queue number)
From asterisk CLI
&gt; queue show 5000
</pre>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/Ez2X5oUoeK4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/dynamic-agent-login-in-asterisknow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/dynamic-agent-login-in-asterisknow</feedburner:origLink></item>
		<item>
		<title>How to customize call recording location in asteriskNOW</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/qUBh55bn3xM/how-to-customize-call-recording-location-in-asterisknow</link>
		<comments>http://www.sparksupport.com/blog/how-to-customize-call-recording-location-in-asterisknow#comments</comments>
		<pubDate>Tue, 20 Jul 2010 10:17:41 +0000</pubDate>
		<dc:creator>Tino Thomas</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[asterisk call recording]]></category>
		<category><![CDATA[asteriskNOW]]></category>
		<category><![CDATA[asteriskNOW call recording]]></category>
		<category><![CDATA[call recording location]]></category>
		<category><![CDATA[customize call recording]]></category>
		<category><![CDATA[freepbx]]></category>
		<category><![CDATA[freepbx call recording]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=698</guid>
		<description><![CDATA[Customize call recording location in asteriskNow.
By default  AsteriskNOW saves call recordings under the directory  /var/spool/asterisk/monitor. This way of call recording has got some  disadvantages since number of files can grow beyond a limit . You will find  it difficult to recognize call recordings related to a particular  extension. A solution [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Customize call recording location in asteriskNow.</strong></p>
<p>By default  AsteriskNOW saves call recordings under the directory  /var/spool/asterisk/monitor. This way of call recording has got some  disadvantages since number of files can grow beyond a limit . You will find  it difficult to recognize call recordings related to a particular  extension. A solution to this issue is to customize the call recording  location. You need to override the dialplan for the context  [macro-record-enable] present in  /etc/asterisk/extensions_additional.conf. To override these dialplans  you need to add new dialplan in a file called /etc/asterisk/extensions_override_freepbx.conf.  Following is the default dialplan for the context [macro-record-enable] present in /etc/asterisk/extensions_additional.conf.</p>
<pre class="brush: bash;">

[macro-record-enable]
include =&gt; macro-record-enable-custom
exten =&gt; s,1,GotoIf($[&quot;${BLINDTRANSFER}&quot; = &quot;&quot;]?check)
exten =&gt; s,n,ResetCDR(w)
exten =&gt; s,n,StopMixMonitor()
exten =&gt; s,n(check),AGI(recordingcheck,${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)},${UNIQUEID})
exten =&gt; s,n,MacroExit()
exten =&gt; s,1+998(record),MixMonitor(${MIXMON_DIR}${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})
; end of [macro-record-enable]
</pre>
<p>You need to add the following dialplan in /etc/asterisk/extensions_override_freepbx.conf, which will override the above dialplan to customize the call recording location.</p>
<pre class="brush: bash;">

[macro-record-enable]
include =&gt; macro-record-enable-custom
exten =&gt; s,1,GotoIf($[&quot;${BLINDTRANSFER}&quot; = &quot;&quot;]?check)
exten =&gt; s,n,ResetCDR(w)
exten =&gt; s,n,StopMixMonitor()
exten =&gt; s,n(check),AGI(recordingcheck,${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)},${UNIQUEID})
exten =&gt; s,n,MacroExit()
exten =&gt; s,n(record),System(/bin/mkdir -p /var/spool/asterisk/monitor/freepbx/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},
,%m)}/${STRFTIME(${EPOCH},,%d)}/${ARG1}/${UNIQUEID})
exten =&gt; s,n,MixMonitor(/var/spool/asterisk/monitor/freepbx/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME($
{EPOCH},,%d)}/${ARG1}/${UNIQUEID}/${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})
</pre>
<p>The changes made are</p>
<pre class="brush: bash;">
exten =&gt; s,n(record),System(/bin/mkdir -p /var/spool/asterisk/monitor/freepbx/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},
,%m)}/${STRFTIME(${EPOCH},,%d)}/${ARG1}/${UNIQUEID})
</pre>
<p>Here we are using &#8216;System&#8217; command to create directories during the call recording. Inside the system command we can execute the unix shell commands. Here we used &#8216;mkdir&#8217; command to create directories followed by a number of variables in asterisk. Here &#8216;STRFTIME&#8217; used to get the year, month &amp; date . ${ARG1} used to get the asterisk user extension ,who is participating in that call ;${UNIQUEID} to get the unique id of that call. UNIQUEID is assigned by asterisk and it is the unix time of orgination of that call.</p>
<pre class="brush: bash;">
&lt;pre&gt;exten =&gt; s,n,MixMonitor(/var/spool/asterisk/monitor/freepbx/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME($
{EPOCH},,%d)}/${ARG1}/${UNIQUEID}/${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})&lt;/pre&gt;
</pre>
<p>In succeeding priority we use MixMonitor command to record the conversations in that channel. The format of MixMonitor command is MixMonitor(&lt;file&gt;.&lt;ext&gt;[|&lt;options&gt;[|&lt;command&gt;]]). Here in the &#8216;filename&#8217; field we will give path of created directory in the preceding line.</p>
<p>Once you made the above changes you need to reload the dialplan through either of the following two ways.</p>
<p>from shell</p>
<p>#asterisk -rx &#8220;dialplan reload&#8221;</p>
<p>from asterisk CLI</p>
<p>&gt; dialplan reload</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/qUBh55bn3xM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/how-to-customize-call-recording-location-in-asterisknow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/how-to-customize-call-recording-location-in-asterisknow</feedburner:origLink></item>
		<item>
		<title>How to install AsterCRM and integrate it with external CRM</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/ReblNZ0VetE/astercrm</link>
		<comments>http://www.sparksupport.com/blog/astercrm#comments</comments>
		<pubDate>Mon, 19 Jul 2010 13:23:55 +0000</pubDate>
		<dc:creator>Tino Thomas</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[asterbilling]]></category>
		<category><![CDATA[astercc]]></category>
		<category><![CDATA[astercrm]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[asterisk crm]]></category>
		<category><![CDATA[crm popup]]></category>
		<category><![CDATA[external crm integration]]></category>
		<category><![CDATA[integrating astercrm external crm]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=658</guid>
		<description><![CDATA[1) Download and unzip the source (assuming  your WEB root is /var/www/html)
Get the software from


http://astercc.org/downloads


cd /var/www/html

unzip astercc-X.X.zip

mv astercc-X.X astercc

/var/www/html/astercc/astercrm                 # main directory and PHP scripts  of astercrm
/var/www/html/astercc/asterbilling              #  main directory and PHP scripts of asterbilling
/var/www/html/astercc/sql                          # sql to create database  tables
/var/www/html/astercc/script               [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1) Download and unzip the source (assuming  your WEB root is /var/www/html)</strong></p>
<p>Get the software from</p>
<pre class="brush: bash;">

http://astercc.org/downloads
</pre>
<pre class="brush: bash;">
cd /var/www/html

unzip astercc-X.X.zip

mv astercc-X.X astercc

/var/www/html/astercc/astercrm                 # main directory and PHP scripts  of astercrm
/var/www/html/astercc/asterbilling              #  main directory and PHP scripts of asterbilling
/var/www/html/astercc/sql                          # sql to create database  tables
/var/www/html/astercc/script                      # astercc  daemon and some other script files
/var/www/html/astercc/index.html               #guide page
/var/www/html/astercc/astercc_full_logo.png  #logo
</pre>
<p><strong>2) It is  highly advised that the whole script directory be moved to a more  secure location like /opt and out of the WEB root directory </strong></p>
<pre class="brush: bash;">

mkdir -p /opt/asterisk/scripts/astercc
mv  /var/www/html/astercc/scripts/*  /opt/asterisk/scripts/astercc
chmod +x /opt/asterisk/scripts/astercc/*
</pre>
<p><strong>3) Create the  MySQL database and tables, asterCRM need mysql 4.1 or above</strong></p>
<p>Note: here we create the database named astercc, it both used for  astercrm and asterbilling, you could use whatever db name you  want use your configration to replace &#8220;yourmysqluser&#8221; and  &#8220;yourmysqlpasswd&#8221;</p>
<pre class="brush: bash;">

mysqladmin -uyourmysqluser  -pyourmysqlpasswd create astercc
mysql -uyourmysqluser  -pyourmysqlpasswd astercc &lt; /var/www/html/astercc/sql/astercc.sql
</pre>
<p><strong> 4)  Update /etc/asterisk/manager.conf to enable Manager connections</strong></p>
<p>Note:allow asterisk on different server .Add something  like this to the manager.conf file:</p>
<pre class="brush: bash;">

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
;displayconnects = yes

;the following line could be  changed by yourself
[astercc]
secret = astercc
read = system,call,log,verbose,command,agent,user
write =  system,call,log,verbose,command,agent,user
deny=0.0.0.0/0.0.0.0
; if you want to run astercc on another  server
; use your astercc ip to replace 127.0.0.1 or add a  new line
permit=127.0.0.1/255.255.255.0
</pre>
<p><strong>5) Modify config file</strong></p>
<p>for asterCRM:<br />
modity /var/www/html/astercc/astercrm/astercrm.conf.php to fit your  configration<br />
for asterCC:<br />
modity  /var/www/html/astercc/asterbilling/asterbilling.conf.php to fit your  configration</p>
<p><strong>6) Start Asterisk and daemon</strong></p>
<p>There  are two daemon modes you can choose, astercc mode or  eventsdaemon(can be used for astercrm only) mode.</p>
<p><strong>A) For  astercc mode(can be used for both astercrm and asterbilling.</strong></p>
<p>try start astercc:<br />
modify  /opt/asterisk/scripts/astercc/astercc.conf to fit your configuration mainly database setting and AMI setting.</p>
<p>run  astercc for test</p>
<pre class="brush: bash;">

/opt/asterisk/scripts/astercc/astercc
</pre>
<p>if you could read  like following line:</p>
<pre class="brush: bash;">

&quot;Connecting to mysql database on  127.0.0.1:
Database connection successful.
Connecting to asterisk on 127.0.0.1 port 5038:
Asterisk socket connection successful.
Check  asterisk username &amp; secret:
Success
Monitor Start:
...(some log message)...&quot;

congratulations, your astercc works well, use 'ctrl + c' to exit
or else, please check your database/AMI configration in astercc.conf
</pre>
<p>Start  up astercc (default settings):<br />
modify  /var/www/html/astercrm/astercrm.conf.php set eventtype to curcdr</p>
<pre class="brush: bash;">

/opt/asterisk/scripts/astercc/astercc -d
</pre>
<p>Start up  astercc daemons when system startup:<br />
Note: This option can  only fit to redhat-release system. If you want astercc  daemons to start automatically when you boot your machine, you need to :</p>
<pre class="brush: bash;">

cp /opt/asterisk/scripts/astercc/asterccd  /etc/rc.d/init.d
chmod 755 /etc/rc.d/init.d/asterccd
chkconfig --add asterccd
</pre>
<p>Advice: Configure your astercc  restart once everyday, it&#8217;s not necessary, but it &#8217;s  good for your astercc operation. for example: you want to  restart astercc at 0&#8242;clock everyday, just do the  following line as root.</p>
<pre class="brush: bash;">

crontab -e
add a new  line:
0 0 * * * /etc/rc.d/init.d/asterccd restart
the first &quot;0&quot; figures minutes and the second &quot;0&quot; figures hours.
</pre>
<p><strong>B) For eventsdaemon mode(can be used for astercrm only) try  start eventsdaemon:</strong><br />
modify eventsdaemon.pl to fit  your configuration mainly database setting and AMI setting.</p>
<pre class="brush: bash;">
/opt/asterisk/scripts/astercc/eventsdaemon.pl
if you could  read:

&quot;Message: Authentication accepted&quot;

congratulations,  your eventsdaemon works well
use ctrl + c to exit
or else, please check your database/AMI configration in eventsdaemon.pl
</pre>
<p>Start eventsdaemon (default settings):<br />
modify  astercrm.conf set eventtype to event</p>
<pre class="brush: bash;">

/opt/asterisk/scripts/astercc/eventsdaemon.pl -d
</pre>
<p>At some  point it may be desirable to delete unwanted events from the database table. The eventsdaemon is also designed for this. please  check eventsdaemon.pl for parameter &#8220;log_life&#8221; .also we  provide a &#8220;watch dog&#8221;, it would help you restart eventsdaemon when it  shutdown add this shell to your start-up file, for example:</p>
<pre class="brush: bash;">

echo /opt/asterisk/scripts/astercc/eventdog.sh &gt;&gt;  /etc/rc.d/rc.local
</pre>
<p>so that everytime your server start,  eventsdaemon would be loaded</p>
<p><strong>7) Set file &amp; folder access for astercrm</strong></p>
<p><strong> </strong></p>
<pre class="brush: bash;">
chmod 777 /var/www/html/astercc/astercrm/upload
chmod 777 /var/www/html/astercc/astercrm/astercrm.conf.php
</pre>
<p>If asterisk and astercrm running in one server, you could make a soft  link to astercrm web directory for listening monitor records  online.<br />
ln -s /var/spool/asterisk/monitor/  /var/www/html/astercc/astercrm/monitor<br />
note: astercrm support  listen monitors online only can be wav format file.</p>
<p><strong>8 ) Web  browsing </strong></p>
<p>For astercc:</p>
<pre class="brush: bash;">

http://localhost/astercc

or  http://YOUR-WEB-SERVER-ADDRESS/astercc
</pre>
<p>For astercrm:</p>
<pre class="brush: bash;">

http://localhost/astercc/astercrm

or  http://YOUR-WEB-SERVER-ADDRESS/astercc/astercrm
</pre>
<p>login  with admin/admin</p>
<h2 style="text-align: left"><strong> Integration of External CRM With AsterCRM<br />
</strong></h2>
<p>In your astercrm, go to<br />
Manager-&gt; preference</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/extcrm13.jpeg"><img class="alignnone size-full wp-image-670" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/extcrm13.jpeg" alt="" width="527" height="499" /></a></p>
<p>If asterCRM use external CRM software, change the value of enable_external_crm to 1. When using external CRM, the default page to be displayed is specified in external_crm_default_url .Value of external_crm_url specifies, when asterCRM need to pop up, which url would recevie the event, %callerid: %calleeid: %method dialout or dialin. Save the changes made by clicking Save button.</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/ReblNZ0VetE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/astercrm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/astercrm</feedburner:origLink></item>
		<item>
		<title>What is Video Streaming</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/wfV1RMSD0sA/video-streaming</link>
		<comments>http://www.sparksupport.com/blog/video-streaming#comments</comments>
		<pubDate>Tue, 13 Jul 2010 12:58:01 +0000</pubDate>
		<dc:creator>Jaseer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[live video streaming]]></category>
		<category><![CDATA[rtmp]]></category>
		<category><![CDATA[rtsp]]></category>
		<category><![CDATA[Streaming video]]></category>
		<category><![CDATA[Video Streaming]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=641</guid>
		<description><![CDATA[Video stream servers are meant to provide the video content across internet in reliable and generic way so that any client can access easily. They uses diffrent protocols other than http namely rtsp, rtmp, rtp etc. And these protocols mainly uses udp. A basic video streaming system contains 3 components. A video publishing side, The [...]]]></description>
			<content:encoded><![CDATA[<p>Video stream servers are meant to provide the video content across internet in reliable and generic way so that any client can access easily. They uses diffrent protocols other than http namely rtsp, rtmp, rtp etc. And these protocols mainly uses udp. A basic video streaming system contains 3 components. A video publishing side, The video streaming server and the client side player (usually flash player embedded in the webpage). The video publishing system will upload a live or static video content to the Video Stream Server and the video stream sever will broadcast (means streaming)  that uploaded video such that the clients can view the videos without bothering about any codecs. The video uploading system should have an encoder to publish live contents to the server. The encoder does the process of transcoding to provide the content to the desired format of the stream server.</p>
<p>Major stream server applications are Wowza Media Server, Adobe Flash Media Server, Red5:open source flash server, Darwin Streaming server (open source) etc.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/streaming.jpg"><img class="aligncenter size-full wp-image-656" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/streaming.jpg" alt="" width="400" height="394" /></a></p>
<p><strong>Working</strong><br />
Actual work flow when a web client is accessing stream video from a website is deiscribed in the figure. When the user clicks on a particular video icon the web server passes a request to the stream server. It will also notify the information about the client side  player (usually it will be a flash player application). Because the if it is a flash client then the request sent will be rtmp (Real Time Messaging Protocol ) protocol based. The stream server will stream (send the video packets) video based on rtmp protocol for flash players. For client players like vlc, apple quick-time etc  the protocol used is rtsp (Real Time Streaming Protocol).</p>
<p>A video streaming setup contains 3 components they are</p>
<ol>
<li>Video Stream server</li>
<li>Web server for providing a web interface to the clients</li>
<li>The flash player embedded on the web page (Or stand alone players like vlc, quicktime etc if not accessing through the site).</li>
</ol>
<p>If the video server streams a live video then one publishing site will be there which will provide the  the live video source. Figure 2 illustrates such a video stream server setup. A video Streaming server application would be running on the Streaming server. The broadcaster would use an live  encoding tool (eg: flash live media encoder). If the client is accessing the video on an html web page the player might be adobe flash player. Flash offers online broadcasters a platform rich with unmatchable flexibility and superior quality video delivery. Flash has fast become the standard for delivery of rich-media over the internet. TV and Video Broadcasters and a wide variety of content creators around the globe have chosen Flash as their No. 1 streaming format.</p>
<div id="attachment_647" class="wp-caption aligncenter" style="width: 430px"><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/screenshot_dellivestream.gif"><img class="size-full wp-image-647" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/screenshot_dellivestream.gif" alt="" width="420" height="452" /></a><p class="wp-caption-text">Live video stream setup</p></div>
<div style="width: 1px;height: 1px;overflow: hidden"><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p style="margin-bottom: 0in;background: none repeat scroll 0% 0% #e6e6e6;font-weight: normal"><span style="font-family: Liberation Serif,serif"><span style="font-size: small">If the video server streams a live video then one publishing site will be there which will provide the  the live video source. Figure 2 illustrates such a video stream server setup. A video Streaming server application would be running on the Streaming server. The broadcaster would use an live  encoding tool (eg: flash live media encoder). If the client is accessing the video on an html web page </span></span></p>
<p style="margin-bottom: 0in;background: none repeat scroll 0% 0% #e6e6e6;font-weight: normal">
<p style="margin-bottom: 0in;background: none repeat scroll 0% 0% #e6e6e6;font-weight: normal"><span style="font-family: Liberation Serif,serif"><span style="font-size: small">the player might be adobe flash player. Flash offers online broadcasters a platform rich with unmatchable flexibility and superior quality video delivery. Flash has fast become the standard for delivery of rich-media over the internet. TV and Video Broadcasters and a wide variety of content creators around the globe have chosen Flash as their No. 1 streaming format.</span></span></p>
<p style="margin-bottom: 0in;background: none repeat scroll 0% 0% #e6e6e6;font-weight: normal">
</div>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/wfV1RMSD0sA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/video-streaming/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/video-streaming</feedburner:origLink></item>
		<item>
		<title>new infrastructure getting ready</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/HI5fFhLK9Bo/new-infrastructure-getting-ready</link>
		<comments>http://www.sparksupport.com/blog/new-infrastructure-getting-ready#comments</comments>
		<pubDate>Thu, 29 Apr 2010 18:08:13 +0000</pubDate>
		<dc:creator>Bobinson K B</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[infrastructure workplace]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=631</guid>
		<description><![CDATA[Well, our new office is getting ready in 2 weeks which will enable us to double our capacity and provide innovative technical solutions to a wider audience.
Here is work in progress:




]]></description>
			<content:encoded><![CDATA[<p>Well, our new office is getting ready in 2 weeks which will enable us to double our capacity and provide innovative technical solutions to a wider audience.</p>
<p>Here is work in progress:</p>
<div id="attachment_635" class="wp-caption aligncenter" style="width: 325px"><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/04/DSC_42371.jpg"><img class="size-medium wp-image-635 " title="sparksupport - managed service provider" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/04/DSC_42371-300x276.jpg" alt="" width="315" height="276" /></a><p class="wp-caption-text">view from a conference room.</p></div>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;"><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/04/DSC_4209.jpg"><img class="aligncenter size-full wp-image-634" title="sparksupport - managed service provider" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/04/DSC_4209.jpg" alt="sparksupport - managed service provider" width="320" height="294" /></a></p>
<p style="text-align: center;"><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/04/DSC_4217.jpg"><img class="aligncenter size-medium wp-image-637" title="sparksupport - managed services provider" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/04/DSC_4217-300x276.jpg" alt="" width="300" height="276" /></a></p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/HI5fFhLK9Bo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/new-infrastructure-getting-ready/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/new-infrastructure-getting-ready</feedburner:origLink></item>
		<item>
		<title>E-mail Marketing Trend</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/0xrQvCq6rp0/e-mail-marketing-trend</link>
		<comments>http://www.sparksupport.com/blog/e-mail-marketing-trend#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:56:41 +0000</pubDate>
		<dc:creator>Shijil T S</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[email marketing]]></category>
		<category><![CDATA[email marketing trend]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=629</guid>
		<description><![CDATA[Email Marketing is not dead. SMB&#8217;s still believes Email Marketing as the popular way of marketing their products.
The other traditional marketing methods cannot be totally avoided because case studies shows that always try email marketing after you make a buzz using the traditional marketing methods like TV, news paper ads etc.
In a real world scenario [...]]]></description>
			<content:encoded><![CDATA[<p>Email Marketing is not dead. SMB&#8217;s still believes Email Marketing as the popular way of marketing their products.</p>
<p>The other traditional marketing methods cannot be totally avoided because case studies shows that always try email marketing after you make a buzz using the traditional marketing methods like TV, news paper ads etc.</p>
<p>In a real world scenario suppose a company plans to market a new Laptop, they should first advertise the product using TV advertisement, newspaper and other traditional mediums. This will make the crowd aware that there is a new Laptop available in the market. Awareness plays a important role in the marketing<br />
Next step is to send a customized mail to potential customers describing features of the new Laptop, its features, specifications, pricing and shops they are available. All the people who are aware of this product is definitely going to open and read this mail if it had reached his inbox.</p>
<p>If the mail is descriptive enough and a persuading one, for the potential customers there is a 90% chance that they makes an inquiry, and if you are providing a discount coupon along with this mail, the chance of inquiry further goes to 95%.</p>
<p>Once your product is purchased by the customers you can send out a feedback-form to these customers after a certain period of time. This enabled you to understand more about your product. If they have complaints you should rectify it as soon as possible and that makes customer happy because of you being pro-active. These steps will help you to further impress the customers and for creating goodwill about your product. Within no time your product is on the roll through word of mouth</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/0xrQvCq6rp0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/e-mail-marketing-trend/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/e-mail-marketing-trend</feedburner:origLink></item>
		<item>
		<title>Quick setup of Iozone benchmarking tool</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/aUNdmA_5YBs/quick-setup-of-iozone-benchmarking-tool</link>
		<comments>http://www.sparksupport.com/blog/quick-setup-of-iozone-benchmarking-tool#comments</comments>
		<pubDate>Wed, 24 Feb 2010 11:42:03 +0000</pubDate>
		<dc:creator>Mobin Skariya</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[filesystem benchmarking]]></category>
		<category><![CDATA[install iozone]]></category>
		<category><![CDATA[Iozone]]></category>
		<category><![CDATA[Iozone example]]></category>
		<category><![CDATA[iozone gnuplot]]></category>
		<category><![CDATA[iozone howto]]></category>

		<guid isPermaLink="false">http://sparksupport.com/blog/?p=380</guid>
		<description><![CDATA[Introduction
Iozone is an open source file system benchmarking tool which lets you to evaluate various aspects of a filesystem performance like read, write, rewrite, random read etc etc. It is ported to various platforms and can be run on all major operating systems like Linux, Microsoft Windows Mac OS X. Though it can be used [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Iozone is an <strong>open source file system benchmarking tool</strong> which lets you to evaluate various aspects of a filesystem performance like read, write, rewrite, random read etc etc. It is ported to various platforms and can be run on all major operating systems like Linux, Microsoft Windows Mac OS X. Though it can be used for the detailed analysis of the filesytem IO performances, here we describe in short how to install it in Linux and get the analysis plotted to a graph.</p>
<h2>How to install</h2>
<p>1. Download the rpm source fro the Iozone from the following <a href="http://www.iozone.org/src/current/iozone-3-338.i386.rpm" target="_self">link</a> or enter the follwing command at the command prompt</p>
<pre class="brush: bash;">wget http://www.iozone.org/src/current/iozone-3-338.i386.rpm</pre>
<p>2. install Iozone using the following command</p>
<pre class="brush: bash;">rpm -ivh /path/to/iozone-3-338.i386.rpm</pre>
<p>Now the filesystem benchmarking tool is installed. To verify the installation you can find the files of Iozone tool in the directory /opt/iozone/</p>
<h2>Plotting a graph from Iozone analysis</h2>
<p>For the plotting of a graph you should ensure that gnuplot is already installed in your machine. Gnuplot is a command-driven <strong>opensource function plotting tool</strong>. If it isn&#8217;t installed you may install it using the following command</p>
<pre class="brush: bash;">yum install gnuplot</pre>
<p>After ensuring that you have got gnuplot installed. Lets try plotting the analysis of the Iozone tool on a graph. Here we will analyze the filesystem with in auto mode. Run th iozone command and redirect its output to a file.</p>
<pre class="brush: bash;">/opt/iozone/bin/iozone -a -g 4m &amp;gt; /tmp/test_analysis</pre>
<p>In the above command we have set the maximum size of a file for auto mode  to 4mb with -g option. For brief study about Iozone commands use</p>
<pre class="brush: bash;">/opt/iozone/bin/iozone -h</pre>
<p>To generate the graph there is another command which is installed with the iozone tool ie Generate_Graphs. To plot the graph use the following commands</p>
<pre class="brush: bash;">/opt/iozone/bin/Generate_Graphs /tmp/test_analysis</pre>
<p>A new window will pop up with the plotted graph of the write performance. At the command line if you hit enter then new graph is plotted fro the rewrite performance. Thus there will be graph plotted for many IO performances as you hit enter each time. Evaluate the required IO performances from the set of graphs depending on the application that you are planning to deploy.</p>
<p>Have a nice day <img src='http://www.sparksupport.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/aUNdmA_5YBs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/quick-setup-of-iozone-benchmarking-tool/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/quick-setup-of-iozone-benchmarking-tool</feedburner:origLink></item>
		<item>
		<title>Email Feedback Loop (FBL)</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/zd1eMNZZCMg/email-feedback-loop</link>
		<comments>http://www.sparksupport.com/blog/email-feedback-loop#comments</comments>
		<pubDate>Fri, 19 Feb 2010 19:26:37 +0000</pubDate>
		<dc:creator>Tino Thomas</dc:creator>
				<category><![CDATA[Mailservice]]></category>
		<category><![CDATA[FBL]]></category>
		<category><![CDATA[Feed Back Loop]]></category>

		<guid isPermaLink="false">http://sparksupport.com/blog/?p=373</guid>
		<description><![CDATA[What is FBL
Usually when users do not want to receive any more mails from an email account they just click the &#8220;report spam button&#8221; available in their web mail or mail client. As a result of that a complaint will be raised against the ip from which this email is sent and the isp will [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="font-size: small;">What is FBL</span></strong></p>
<p><span style="font-size: small;">Usually when users do not want to receive any more mails from an email account they just click the &#8220;report spam button&#8221; available in their web mail or mail client. As a result of that a complaint will be raised against the ip from which this email is sent and the isp will start blocking this ip after the complaint rate increases a certain limit. So it is crucial to know the users who do not want to receive mails from us  so that we can remove them from the mailing list and mails will not be sent to these users again. A feedback loop is a mechanism whereby an ISP will let you know when one of its subscribers complains about your e-mail.</span></p>
<p><span style="font-size: small;"> </span></p>
<p><strong><span style="font-size: small;">How to Sign up For Email Feedback Loop</span></strong></p>
<p><span style="font-size: small;">To use this service, you should send a request for an ISP feedback loop either via email or through a web form. Most of the ips provide a web from to register their feedback loop program. The usual information you need to provide to sign up for a feedback loop are:</span></p>
<p><span style="font-size: small;"> </span></p>
<p><span style="font-size: small;"> * IP addresses that you want to receive feedback loops for</span></p>
<p><span style="font-size: small;"> * The list of domains you want to subscribe</span></p>
<p><span style="font-size: small;"> * A valid abuse@ and/or postmaster@ email address on the domains you want to subscribe</span></p>
<p><span style="font-size: small;"> * Your contact information: name, contact email and phone number</span></p>
<p><span style="font-size: small;"> * The email address a feedback loop will be sent at</span></p>
<p><span style="font-size: small;"> * Quantity of email messages sent daily (weekly, monthly) to the domain of the feedback look</span></p>
<p><span style="font-size: small;"> * Type of email content you send</span></p>
<p><span style="font-size: small;"> </span></p>
<p><span style="font-size: small;">A confirmation email will be sent to the contact email address you specify. Once your request has been approved, Feedback Loop email will be sent to the email address listed in the &#8220;Feedback Loop Email&#8221; field.</span></p>
<p><span style="font-size: small;"> </span></p>
<p><strong><span style="font-size: small;">How FBL Works</span></strong></p>
<p><span style="font-size: small;">1. Sender sends a mail to the user</span></p>
<p><span style="font-size: small;">2. User complaints to his ISP about the message by hitting the report spam button</span></p>
<p><span style="font-size: small;">3. The sender  will be notified when a recipient complains about your email.</span></p>
<p><span style="font-size: small;">4. The sender will receive an email message saying something like “a spam complaint was registered for the IP address xxx.xxx.xxx.xxx”.</span></p>
<p><span style="font-size: small;"> Sender&#8217;s original email message will be attached to that notification email.</span></p>
<p><span style="font-size: small;"> </span></p>
<p><strong><span style="font-size: small;">Advantages of Feedback Loops</span></strong></p>
<p><span style="font-size: small;">Feedback loops help you reveal unhappy subscribers, improve your email deliverability and decrease your spam complaint rate. This helps you to maintain a good reputation for the ips. Feedback loops allow you to check  deeply into your sign up process that adds user to their mailing list when one user signs up. Increased complaint rate can be caused by subscribers not realizing what they signed up for, subscribers not getting what they thought they signed up for, or a long delay between sign-up and the first mailing. So these feedback loops help the sending organization to improve the quality of their sign </span><span style="font-size: small;">up process.</span></p>
<p><span style="font-size: small;"> </span></p>
<p><strong><span style="font-size: small;">Different Feedback Loop Programs<br />
</span></strong></p>
<p><span style="font-size: small;">Every ISP&#8217;s feedback loop is different, making the aggregate data sometimes challenging to manage. Some use a standardized format &#8211; the Abuse Reporting Format. Some send feedback in real time, others send in batches. Many send the entire offending message, others only provide the e-mail address &#8211; and still others send the body of the message but no address. For Yahoo only senders who sign their outbound emails with DomainKeys and/or DKIM are eligible to participate in their feedback loop program. AOL will only active the service after an ip ownership test.It verify that a particular domain has a right to receive abuse complaints for the ips in the submitted request. There are five possible tests to prove IP ownership. Passing any one of the five tests says &#8220;AOL, yourdomain.com has a right to receive abuse complaints on behalf of our IP.&#8221; Also different isps are providing options to modify the existing feedback loop. You may add more ips or remove existing ips through web forms. Also in any point if you do not want to use feedback loop service from an isp you may write to the postmaster department of corresponding isp for that.</span></p>
<p><span style="font-size: small;"> </span></p>
<p><strong><span style="font-size: small;">Conclusion</span></strong></p>
<p><span style="font-size: small;">This one-time action will help you keep a good email sender reputation and improve your email delivery rate into the recipient’s Inbox. So it is always better to have feedback loop.</span></p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/zd1eMNZZCMg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/email-feedback-loop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/email-feedback-loop</feedburner:origLink></item>
		<item>
		<title>Installing Nginx with PHP-FPM on a Linux server</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/aHGux4OsuNQ/installing-nginx-with-php-fpm-on-a-linux-server</link>
		<comments>http://www.sparksupport.com/blog/installing-nginx-with-php-fpm-on-a-linux-server#comments</comments>
		<pubDate>Wed, 17 Feb 2010 16:10:46 +0000</pubDate>
		<dc:creator>Vishnuprasad R</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[how to install nginx linux server]]></category>
		<category><![CDATA[install nginx php linux]]></category>

		<guid isPermaLink="false">http://sparksupport.com/blog/?p=346</guid>
		<description><![CDATA[Nginx (pronounced as Engine-x) is a high performance web server,reverse proxy, mail proxy server which was originally written by Igor Sysoev in 2005.  Here we discuss about setting up a very basic nginx web server on your Linux server , capable of parsing php pages.
Installing Nginx on your Linux server
Installing nginx  on your [...]]]></description>
			<content:encoded><![CDATA[<p>Nginx (pronounced as Engine-x) is a high performance web server,reverse proxy, mail proxy server which was originally written by Igor Sysoev in 2005.  Here we discuss about setting up a very basic nginx web server on your Linux server , capable of parsing php pages.</p>
<p><strong>Installing Nginx on your Linux server</strong></p>
<p>Installing nginx  on your Linux server is very simple and even on the first try itself, you will not face any difficulties.</p>
<p>The steps that i have followed on my first nginx installation are given bellow (of course with the help of others tutorials and other resources available from net)</p>
<pre class="brush: bash;">

#(Change directory to /usr/local/src [ its a good practice to download and compile software's  from /usr/local/src ] )
cd /usr/local/src

#(download nginx source from &quot;nginx.org&quot;)
wget http://nginx.org/download/nginx-0.8.33.tar.gz

#(Extract the source file )
tar -xzf nginx-0.8.33.tar.gz
cd nginx-0.8.33

#Now configure Nginx , here we are using the 2 basic configuration options
[ --sbin-path=/usr/local/sbin #the nginx binary path ]
[ --with-http_ssl_module      #Enables https module ]

./configure --sbin-path=/usr/local/sbin --with-http_ssl_module
</pre>
<p>since you have included the &#8211;with-http_ssl_module there is a possibility of getting the following error ( at least i got  this error on a fresh centos machine since no pcre libraries were pre-installed on the system)</p>
<pre class="brush: plain;">
checking for PCRE library in /usr/include/pcre/ ... not found

checking for PCRE library in /usr/pkg/ ... not found

checking for PCRE library in /opt/local/ ... not found

./configure: error: the HTTP rewrite module requires the PCRE library.

You can either disable the module by using --without-http_rewrite_module

option, or install the PCRE library into the system, or build the PCRE library

statically from the source with nginx by using --with-pcre=
option.
</pre>
<p>If you get the above error while configuring nginx , please download pcre (Perl Compatible Regular Expressions) from  &#8220;http://www.pcre.org/&#8221; and change the nginx configure command as given bellow</p>
<p><span id="more-346"></span></p>
<pre class="brush: bash;">

cd /usr/local/src

#(Download the pcre source file)
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.bz2

#(extract the file)
tar -xjf pcre-7.9.tar.bz2

cd /usr/local/src/nginx-0.8.33
</pre>
<p>Now configure nginx again with the following configuration options</p>
<pre class="brush: bash;">
./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --with-pcre=/usr/local/src/pcre-7.9
</pre>
<p>The nginx configuration should now be completed with out any errors, now install nginx</p>
<pre class="brush: bash;">
make

make install
</pre>
<p>Nginx is now installed on your machine and you can start the nginx process using the</p>
<pre class="brush: bash;">
#[ usually nginx will be started automatically at this stage]
/usr/local/sbin/nginx
</pre>
<p>and to stop nginx , you can use the following command</p>
<pre class="brush: bash;">
pkill -9 nginx
</pre>
<p>If you want to use a daemon for starting and stopping nginx like we are doing in apache , please copy the following script and save this as &#8220;/etc/init.d/nginx</p>
<pre class="brush: bash;">
!/bin/sh

# nginx - this script starts and stops the nginx daemin

#chkconfig:   - 85 15
#description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
              proxy and IMAP/POP3 proxy server
#processname: nginx
#config:      /usr/local/nginx/conf/nginx.conf
#pidfile:     /usr/local/nginx/logs/nginx.pid

#Source function library.
. /etc/rc.d/init.d/functions

#Source networking configuration.
. /etc/sysconfig/network

#Check that networking is up.
[ &quot;$NETWORKING&quot; = &quot;no&quot; ] &amp;amp;&amp;amp; exit 0

nginx=&quot;/usr/local/sbin/nginx&quot;
prog=$(basename $nginx)

NGINX_CONF_FILE=&quot;/usr/local/nginx/conf/nginx.conf&quot;

lockfile=/var/lock/subsys/nginx

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $&quot;Starting $prog: &quot;
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] &amp;amp;&amp;amp; touch $lockfile
return $retval
}

stop() {
echo -n $&quot;Stopping $prog: &quot;
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] &amp;amp;&amp;amp; rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
start
}

reload() {
configtest || return $?
echo -n $&quot;Reloading $prog: &quot;
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status &amp;gt;/dev/null 2&amp;gt;&amp;amp;1
}

case &quot;$1&quot; in
start)
rh_status_q &amp;amp;&amp;amp; exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $&quot;Usage: $0
{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}&quot;
exit 2
esac
</pre>
<p>You can also download the above script from our server using the following method</p>
<pre class="brush: bash;">
wget http://sparksupport.com/nginx/startupscript.txt -O /etc/init.d/nginx
</pre>
<p>Which will download the file from our server and will save it to /etc/init.d/nginx</p>
<p>Change the file permission to 755</p>
<pre class="brush: bash;">
 chmod 755 /etc/init.d/nginx
</pre>
<p>Now you can use the downloaded nginx daemon script to start and stop nginx server</p>
<pre class="brush: bash;">
  /etc/init.d/nginx start ( To start the web server)

  /etc/init.d/nginx stop   ( To stop the web server)
</pre>
<p>Now if you enter your server ip on the browser , you will see a page, which is the default page for nginx</p>
<div><a href="http://sparksupport.com/blog/wp-content/uploads/2010/02/nginx_html1.jpg"><img class="size-medium wp-image-364" style="margin: 5px; border: 1px solid #ececec;" src="http://sparksupport.com/blog/wp-content/uploads/2010/02/nginx_html1-300x141.jpg" alt="" width="300" height="141" /></a></div>
<p><span style="clear: both;"> </span><br />
Now you need the nginx to parse php pages so that you can host your php pages on this nginx server ,for that we need to install a fastcgi process manager on our server</p>
<p><strong> </strong></p>
<p><strong> <span style="text-decoration: underline;"> PHP-FPM</span></strong><span style="text-decoration: underline;"> </span></p>
<p>The typical nginx configuration involves using spawn-fcgi from the Lighttpd project to get nginx serving up PHP. There are a few issues with spawn-fcg like the spawn-fcgi hangs after a few hours. So  here we will use the php-fpm (php fastcgi process manager) which is actually a set of patches to php for an alternative fastcgi-process manager which can be safely used in busy sites with out having the fear of hang issues or crash issues.</p>
<p>More details about php-fpm can be found on &#8220;http://php-fpm.org/&#8221;</p>
<p><strong> <span style="text-decoration: underline;"> Installing PHP-FPM </span></strong></p>
<p><strong> </strong></p>
<p><span style="text-decoration: underline;"> </span></p>
<p>Download the php source from &#8220;http://php.net&#8221;</p>
<pre class="brush: bash;">

 cd /usr/local/src

wget http://museum.php.net/php5/php-5.2.8.tar.bz2 [here we are using php-5.2.8 , if you want to use higher versions of php , then you need to use the corresponding php-fpm version]

 tar -xjf php-5.2.8.tar.bz2

Download the php-fpm package from &quot;http://php-fpm.org/&quot;

 wget http://php-fpm.org/downloads/php-5.2.8-fpm-0.5.10.diff.gz

 gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | sudo patch -d php-5.2.8 -p1 ( patching the php
source )

cd php-5.2.8

configuring php

./configure --enable-fastcgi --enable-fpm --with-mcrypt --enable-mbstring --with-
mysql=/usr/include /mysql --with-mysql-sock=/tmp/mysql.sock --with-curl --with-sockets --with-gd --with-zlib --with-iconv --with-jpeg-dir=/usr/lib

make

make install
</pre>
<p>Now open the php-fpm.conf in your favourite text editior (here we use vi)</p>
<pre class="brush: bash;">
vi /usr/local/etc/php-fpm.conf
</pre>
<p>Search for &#8220;Unix group of processes&#8221; and &#8221; Unix user of processes&#8221; and add the user nobody as given bellow [by default nobody will be the user and group given in the conf, and you will only be required to un comment the following lines on the conf]</p>
<pre class="brush: bash;">
Unix user of processes
nobody

Unix group of processes
nobody
</pre>
<p>please note that the nobody user is the nginx user mentioned in your nginx conf , please refer your nginx conf to verify this now go to your nginx default document root</p>
<pre class="brush: bash;">
 cd /usr/local/nginx/html
</pre>
<p>now  please create a phpinfo( ) page and save it as index.php</p>
<p>now open the nginx.conf and add these lines to the configuration</p>
<pre class="brush: bash;">

location ~ \.php$ {
root          /usr/local/nginx/html; # The directory on which the php pages are placed
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
include        fastcgi_params;
}
</pre>
<p>Usually the above lines will be present in the nginx conf by default itself, you just need to un comment the above lines from your nginx conf .Also if you get a  &#8220;NO INPUT&#8221; message on the browser , please make sure that the path given in the nginx conf(/usr/local/nginx/html), are correct. That is on the following 2 lines</p>
<pre class="brush: bash;">
root          /usr/local/nginx/html;
fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name
</pre>
<p>now restart nginx and start php-fpm</p>
<pre class="brush: bash;">
 /etc/init.d/nginx restart

php-fpm start
</pre>
<p>you can verify that your php-fpm is running by the following netstat command</p>
<pre class="brush: bash;">
netstat -pant |grep 9000  //the php-fpm runs on the port 9000 and from the nginx we transfer the request to this port internally
</pre>
<p>Now enter your ipaddres/index.php on your browser</p>
<pre class="brush: bash;">

http://your-ip-address/index.php

please replace your-ip-address with your ip address
</pre>
<p>which will show the php info page like the one given bellow.</p>
<div><a href="http://sparksupport.com/blog/wp-content/uploads/2010/02/nginx_php.jpg"><img class="size-medium wp-image-365" src="http://sparksupport.com/blog/wp-content/uploads/2010/02/nginx_php-300x243.jpg" alt="" width="300" height="243" /></a></div>
<p><span style="clear: both;"> </span><br />
By following the above steps you will be able to setup a basic nginx web server that is capable of parsing php pages within few minutes</p>
<p>If you face any difficulties in setting up an nginx server using the above methods , please let us know  that</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/aHGux4OsuNQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/installing-nginx-with-php-fpm-on-a-linux-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/installing-nginx-with-php-fpm-on-a-linux-server</feedburner:origLink></item>
	</channel>
</rss>
