<?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, 02 Sep 2010 12:25:10 +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>We are hiring Web Designers with excellent coding skills</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/Qh6hGbuozHs/we-are-hiring-web-designers-with-excellent-coding-skills</link>
		<comments>http://www.sparksupport.com/blog/we-are-hiring-web-designers-with-excellent-coding-skills#comments</comments>
		<pubDate>Thu, 02 Sep 2010 11:22:34 +0000</pubDate>
		<dc:creator>Nisha Ajil</dc:creator>
				<category><![CDATA[Recruitment]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=912</guid>
		<description><![CDATA[Web Designers:
We are looking for well experienced candidates with excellent skills in web designing and technology.
Web Designer requirements:
Up to 1-3 years of experience in Web Designing. Candidates should be familiar with XHTML, CSS and understand basic Javascript/ JQuery.
Eligibility Criteria :

Btech/BE ( CS ,EC,IT,EEE) /  MCA with consistent academic records.
1 &#8211; 3 yrs of work experience [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Web Designers:</strong></p>
<p>We are looking for well experienced candidates with excellent skills in web designing and technology.</p>
<p><strong>Web Designer requirements:</strong></p>
<p>Up to 1-3 years of experience in Web Designing. Candidates should be familiar with XHTML, CSS and understand basic Javascript/ JQuery.</p>
<p><strong>Eligibility Criteria :</strong></p>
<ul>
<li>Btech/BE ( CS ,EC,IT,EEE) /  MCA with consistent academic records.</li>
<li>1 &#8211; 3 yrs of work experience in relevant field.</li>
<li>XHTML, CSS</li>
<li>Understand basic Javascript / JQuery.</li>
<li>Search engine friendly websites and web standards basic knowledge</li>
<li>Adobe photoshop, Illustrator , Adobe Flash knowledge and experience.</li>
<li>Good  communication  and interpersonal skill.</li>
<li>Proactive , quick learner and a very good team player.</li>
</ul>
<p><strong>Optional requirements:</strong></p>
<ul>
<li>Knowledge in SEO Techniques and Social Media.</li>
<li>Basic idea of Web 2.0 concepts</li>
<li>Reading / Writing skills.</li>
</ul>
<p><strong>Selection procedure:</strong></p>
<ul>
<li>Technical Interview</li>
<li>Practical test .</li>
<li>HR Round</li>
</ul>
<p><strong>Terms:</strong></p>
<ul>
<li> flat hierarchy</li>
<li> ample opportunities to grow</li>
<li> opportunity to grow with a fast growing organization</li>
<li>industrial standard renumeration package.</li>
</ul>
<p><strong>How to apply:</strong></p>
<p>Send your resumes to careers[at] sparksupport[dot]com  with <strong>Subject line : Experienced Web Designer</strong> with a covering  letter mentioning current job details and when you can  join our organization and details of the current renumeration and pay package.</p>
<p>The openings are immediate and the candidates should be ready to join  ASAP.</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/Qh6hGbuozHs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/we-are-hiring-web-designers-with-excellent-coding-skills/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/we-are-hiring-web-designers-with-excellent-coding-skills</feedburner:origLink></item>
		<item>
		<title>We are hiring Btech/BE Freshers ( CS , ECE , IT , EEE )for our Perl &amp; PHP development wing</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/U6MImPDBfaY/we-are-hiring-btechbe-freshers-it-cs-electtelecom-for-our-perl-php-development-wing</link>
		<comments>http://www.sparksupport.com/blog/we-are-hiring-btechbe-freshers-it-cs-electtelecom-for-our-perl-php-development-wing#comments</comments>
		<pubDate>Thu, 02 Sep 2010 05:30:09 +0000</pubDate>
		<dc:creator>Nisha Ajil</dc:creator>
				<category><![CDATA[Recruitment]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=896</guid>
		<description><![CDATA[Description:
We are looking for  BE/Btech freshers from IT, CSE ,EEE, EC branches who has excellent programming skills. Proactive candidates with exceptional  coding skills. The candidate must be capable of quickly learning new  technologies and capable of working on applications deployed in distributed environment. Basic knowledge of Linux platform , Perl, PHP  will be [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>We are looking for  BE/Btech freshers from IT, CSE ,EEE, EC branches who has excellent programming skills. Proactive candidates with exceptional  coding skills. The candidate must be capable of quickly learning new  technologies and capable of working on applications deployed in distributed environment. Basic knowledge of Linux platform , Perl, PHP  will be a plus.</p>
<p><strong>Eligibility Criteria:</strong></p>
<ul>
<li> BTech/ BE &#8211; CSE, ECE , IT, EEE( 60%above final results and should not have any back papers )</li>
<li>Excellent programming skills ( C, C++) .Basic knowledge of PHP/ Perl will be a plus</li>
<li>Consistent academic record</li>
<li>Proactive attitude</li>
<li>Good written and oral communication.</li>
<li>Should be a self starter and must be willing to work on complicated  tasks.</li>
<li>A quick learner.</li>
<li>Familiarity with software development process .</li>
</ul>
<p><strong>Selection procedure:</strong></p>
<ul>
<li> Written Test ( Technical and Aptitude &#8211; objective type )</li>
<li>Technical Interview</li>
<li>Practical test where you will be given a small programing task</li>
<li>HR Round</li>
</ul>
<p><strong>Terms:</strong></p>
<ul>
<li> 6 months on job training period</li>
<li> flat hierarchy</li>
<li> ample opportunities to grow</li>
<li> opportunity to grow with a fast growing  organization</li>
</ul>
<div><strong> </strong></div>
<p><strong>How to apply:</strong></p>
<p>Send your resumes to careers[at] sparksupport[dot]com with a covering  letter and subject line <strong>BTech Freshers</strong> .The openings are immediate and the candidates should be ready to join  ASAP.</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/U6MImPDBfaY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/we-are-hiring-btechbe-freshers-it-cs-electtelecom-for-our-perl-php-development-wing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/we-are-hiring-btechbe-freshers-it-cs-electtelecom-for-our-perl-php-development-wing</feedburner:origLink></item>
		<item>
		<title>Load balancing in Wowza Media Server</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/8aE_U2bsXGk/load-balancing-in-wowza-media-server</link>
		<comments>http://www.sparksupport.com/blog/load-balancing-in-wowza-media-server#comments</comments>
		<pubDate>Tue, 03 Aug 2010 13:11:38 +0000</pubDate>
		<dc:creator>Jaseer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[live stream repeater-edge applications]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[wowza]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=844</guid>
		<description><![CDATA[Wowza Media Server is a Video Stream Server used by popular CDN providers to provide video content across the internet. It has come with a large variety of features and several streaming options. And one of the attractive feature provided by wowza is that, it allows clustering like feature so that multiple  servers can [...]]]></description>
			<content:encoded><![CDATA[<p>Wowza Media Server is a Video Stream Server used by popular CDN providers to provide video content across the internet. It has come with a large variety of features and several streaming options. And one of the attractive feature provided by wowza is that, it allows clustering like feature so that multiple  servers can be configured to provide a video stream to the clients. In such a setup one of the server will act as a liadbalancing server and the others will act as the loadbalancing client servres. If a client requests a video stream then a load balancer server redirect it to the least loaded wowza server. This loadbalancing feature is usually used while publishing live streams becuase the number of concurrent connections to the server providing live stream will be high and a load balancing setup can easily manage it. Here we will discuss the load balancing setup for a live stream proess.</p>
<p>To employ loadbalancing setup in live streaming first we have to setup live streaming repeater configuration available with wowza. This is because the live stream will be actually published to only one server and we need to duplicate among a no of stream servers as our need. So there will be live repeater origin server and several live repeater edge servers.  When the player will request the contentfrom an edge server and the edge server will maintain a single connection per-unique stream to the origin. Origin and edge configuration is an application level configuration. A single Wowza Server instance can be configured as an origin for one application and an edge for another.</p>
<h5>1) Configuring liverepeater-origin server</h5>
<ul>
<li> Create a folder named <strong>[install-dir]/applications/liverepeater</strong>.</li>
</ul>
<ul>
<li> Create a folder named <strong>[install-dir]/conf/liverepeater</strong> and copy the file <strong>[install-dir]/conf/Application.xml </strong>into this new folder.</li>
</ul>
<ul>
<li>Edit the newly copied Application.xml file and make the following changes:</li>
</ul>
<p>a) Change the <strong>Streams</strong>/<strong>StreamType</strong> to <strong>liverepeater</strong>-<strong>origin </strong></p>
<p>b. Change the <strong>LiveStreamPacketizers </strong>to: <strong>cupertinostreamingpacketizer</strong>,<strong>smoothstreamingpacketizer</strong></p>
<p><strong>2)</strong>Configuring edge server</p>
<p>Follow these steps to configure each of the edge servers</p>
<ul>
<li>Create a folder named [install-dir]/applications/liverepeater.</li>
<li>Create a folder named [install-dir]/conf/liverepeater and copy the file [install-dir]/conf/Application.xml into this new folder.</li>
<li>Edit the newly copied Application.xml file and make the following changes.</li>
</ul>
<p>a)Change the Streams/StreamType to liverepeater-edge (you can use the liverepeater-edge-lowlatency stream type if low latency is important, this will add extra load to the server).</p>
<p>b)Change the LiveStreamPacketizers to: cupertinostreamingrepeater,smoothstreamingrepeater</p>
<p>c)Add the following property to the MediaCaster/Properties container (be sure to get the correct properties container – there are several in the file):</p>
<pre class="brush: bash;">

&lt;Property&gt;

         &lt;Name&gt;streamTimeout&lt;/Name&gt;;

         &lt;Value&gt;15000&lt;/Value&gt;

         &lt;Type&gt;Integer&lt;Type&gt;

&lt;/Property&gt;
</pre>
<p>d)Uncomment the Repeater/OriginURL section and set OriginURL to rtmp URL of the origin server. For example if the origin server uses the domain name      origin.mycompany.com, this value should be set to:</p>
<pre class="brush: bash;">

&lt;Repeater&gt;

         &lt;OriginURL&gt;rtmp://origin.mycompany.com&lt;/OriginURL&gt;

         &lt;QueryString&gt;&lt;/QueryString&gt;

&lt;/Repeater&gt;
</pre>
<p>Note: Let us assume origin.mycompany.com is the origin server here</p>
<p>3)Configring the Loadbalancer server</p>
<ul>
<li>First Download the loadbalancing module the from the following link of wowza forums. Unzip the downloaded file</li>
</ul>
<p>http://www.wowzamedia.com/forums/showthread.php?t=4637</p>
<ul>
<li>Copy the file <strong>lib/wms-plugin-loadbalancer.jar</strong> from this zip archive to the <strong>[install-dir]/lib/</strong> folder of Wowza Media Server 2</li>
</ul>
<ul>
<li>Copy the file <strong>conf/crossdomain.xml</strong> from this zip archive to the <strong>[install-dir]/conf/</strong> folder of Wowza Media Server 2.</li>
</ul>
<ul>
<li>Edit <strong>[install-dir]/conf/Server.xml</strong> and make the following changes:</li>
</ul>
<p>Add the following ServerListener entry to the &lt;ServerListeners&gt; list:</p>
<pre class="brush: bash;">
    &lt;ServerListener&gt;
           	  &lt;BaseClass&gt;com.wowza.wms.plugin.loadbalancer.ServerListenerLoadBalancerListener&lt;/BaseClass&gt;
    &lt;/ServerListener&gt;
</pre>
<p><code> Add the following properties to the &lt;properties&gt; section of the bottom of the server.xml file<br />
</code></p>
<pre class="brush: bash;">
      &lt;Property&gt;
               &lt;Name&gt;loadBalancerListenerKey&lt;/Name&gt;
	      &lt;Value&gt;023D4FB4IS83&lt;/Value&gt;
      &lt;/Property&gt;
      &lt;Property&gt;
	      &lt;Name&gt;loadBalancerListenerIpAddress&lt;/Name&gt;
	      &lt;Value&gt;*&lt;/Value&gt;
      &lt;/Property&gt;
      &lt;Property&gt;
	     &lt;Name&gt;loadBalancerListenerPort&lt;/Name&gt;
	     &lt;Value&gt;1934&lt;/Value&gt;
	     &lt;Type&gt;Integer&lt;/Type&gt;
      &lt;/Property&gt;
      &lt;Property&gt;
	      &lt;Name&gt;loadBalancerListenerRedirectorClass&lt;/Name&gt;
	      &lt;Value&gt;com.wowza.wms.plugin.loadbalancer.LoadBalancerRedirectorConcurrentConnects&lt;/Value&gt;
      &lt;/Property&gt;
      &lt;Property&gt;
	      &lt;Name&gt;loadBalancerListenerMessageTimeout&lt;/Name&gt;
	      &lt;Value&gt;5000&lt;/Value&gt;
	      &lt;Type&gt;Integer&lt;/Type&gt;
      &lt;/Property&gt;
</pre>
<ul>
<li>Edit <strong>[install-dir]/conf/VHost.xml</strong> and add the following <strong>HostPort/HTTPProvider</strong> XML snippet just before the <strong>HTTPProvider</strong> definition for <strong>com.wowza.wms.http.HTTPServerVersion</strong>:</li>
</ul>
<pre class="brush: bash;">
      &lt;HTTPProvider&gt;
                   &lt;BaseClass&gt;com.wowza.wms.plugin.loadbalancer.HTTPLoadBalancerRedirector&lt;/BaseClass&gt;
	           &lt;RequestFilters&gt;*loadbalancer&lt;/RequestFilters&gt;
	           &lt;AuthenticationMethod&gt;none&lt;/AuthenticationMethod&gt;
	           &lt;Properties&gt;
                              &lt;Property&gt;
		          	  &lt;Name&gt;enableServerInfoXML&lt;/Name&gt;
                   		  &lt;Value&gt;true&lt;/Value&gt;
		                  &lt;Type&gt;Boolean&lt;/Type&gt;
		           &lt;/Property&gt;
	         &lt;/Properties&gt;
     &lt;/HTTPProvider&gt;
</pre>
<p>4)To setup an edge servers in load balancing</p>
<p>Do the first two steps as done for the load balacer server</p>
<ul>
<li>Edit <strong>[install-dir]/conf/Server.xml</strong> and make the following changes:</li>
</ul>
<p>Add the following ServerListener entry to the &lt;ServerListeners&gt; list:</p>
<pre class="brush: bash;">

     &lt;ServerListener&gt;
	           &lt;BaseClass&gt;com.wowza.wms.plugin.loadbalancer.ServerListenerLoadBalancerSender&lt;/BaseClass&gt;
     &lt;/ServerListener&gt;
</pre>
<p>Add the following properties to the &lt;Properties&gt; section at the bottom of Server.xml:</p>
<pre class="brush: bash;">

   &lt;Property&gt;
	    &lt;Name&gt;loadBalancerSenderTargetPath&lt;/Name&gt;
	    &lt;Value&gt;${com.wowza.wms.AppHome}/conf/loadbalancertargets.txt&lt;/Value&gt;
   &lt;/Property&gt;
   &lt;Property&gt;
	    &lt;Name&gt;loadBalancerSenderRedirectAddress&lt;/Name&gt;
	    &lt;Value&gt;[redirect-address]&lt;/Value&gt;
   &lt;/Property&gt;
   &lt;Property&gt;
            &lt;Name&gt;loadBalancerSenderMonitorClass&lt;/Name&gt;
	    &lt;Value&gt;com.wowza.wms.plugin.loadbalancer.LoadBalancerMonitorDefault&lt;/Value&gt;
   &lt;/Property&gt;
   &lt;Property&gt;
	    &lt;Name&gt;loadBalancerSenderMessageInterval&lt;/Name&gt;
	    &lt;Value&gt;2500&lt;/Value&gt;
	    &lt;Type&gt;Integer&lt;/Type&gt;
   &lt;/Property&gt;
</pre>
<p>Where <strong>[redirect-address]</strong> is the external ip address or domain name of this machine. This address will be used when redirecting to this edge server. When using this system on EC2 you can set the [redirect-address] to   ${com.wowza.amazonaws.ec2.AWSEC2_METADATA_PUBLIC_IPV4} and upon server startup it will use the public ip address of the server for this value.</p>
<ul>
<li>Create the file <strong>[install-dir]/conf/loadbalancertargets.txt</strong> using a text editor and enter the following two lines (the first line is a comment):</li>
</ul>
<pre class="brush: bash;">

# [load-balancer-ip-address],[load-balancer-port],[encryption-key]

[load-balancer-ip-address],1934,023D4FB4IS83
</pre>
<pre><img src="http://www.sparksupport.com/blog/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" />
  Where <strong>[load-balancer-ip-address]</strong> is the ip  address or domain name of the load balancer.
</pre>
<p style="text-align: left">This configurations uses <strong>UDP port 1934</strong> for communication between the edge servers and the load balancer. Be sure this port is open on your firewall. All communication between the edge server and the load balancer is encrypted and signed. The encryption key is set on the load balancer server using the <strong>loadBalancerListenerKey</strong> property and in the <strong>loadbalancertargets.txt</strong> file on the edge servers. These keys must match. An edge server can communicate with multiple load balancers by adding additional lines to the<strong> loadbalancertargets.txt</strong> file.<strong> </strong></p>
<p style="text-align: left">You can now startup the load balancer and multiple edge servers. If functioning properly, the edge servers will update the load balancer every 2.5 seconds with status and load information. You can get information from the load balancer in regards to which edge servers are currently registered and their status by opening a web browser and entering the following url:</p>
<pre><code> <a href="http://[load-balancer-ip-address]:1935/loadbalancer?serverInfoXML">http://[load-balancer-ip-address]:1935/loadbalancer?serverInfoXML</a>

5)Now Configure a redirect application to redirect the connection requests to the least loaded server.
</code></pre>
<ul>
<li>Create the folder <strong>[install-dir]/applications/redirect</strong>.</li>
</ul>
<ul>
<li>Create the folder <strong>[install-dir]/conf/redirect</strong> and copy the file <strong>[install-dir]/conf/Application.xml</strong> into this new folder.</li>
</ul>
<ul>
<li>Create the folder <strong>[install-dir]/conf/redirect</strong> and copy the file <strong>[install-dir]/conf/Application.xml</strong> into this new folder.</li>
</ul>
<pre class="brush: bash;">
      &lt;Module&gt;
	    &lt;Name&gt;ModuleLoadBalancerRedirector&lt;/Name&gt;
	    &lt;Description&gt;ModuleLoadBalancerRedirector&lt;/Description&gt;
            &lt;Class&gt;com.wowza.wms.plugin.loadbalancer.ModuleLoadBalancerRedirector&lt;/Class&gt;
      &lt;/Module&gt;
</pre>
<ul>
<li>Add the following properties the properties section at the bottom of the Application.xml file:</li>
</ul>
<pre class="brush: bash;">
   &lt;Property&gt;
             &lt;Name&gt;redirectAppName&lt;/Name&gt;&lt;code&gt;
             &lt;Value&gt;[application-name]&lt;/Value&gt;
    &lt;/Property&gt;
    &lt;!--
    &lt;Property&gt;
	     &lt;Name&gt;redirectPort&lt;/Name&gt;
	     &lt;Value&gt;[redirect-port]&lt;/Value&gt;
    &lt;/Property&gt;
    --&gt;
    &lt;!--
    &lt;Property&gt;
	     &lt;Name&gt;redirectScheme&lt;/Name&gt;
              &lt;Value&gt;rtmp&lt;/Value&gt;
    &lt;/Property&gt;
    --&gt;
    &lt;Property&gt;
	     &lt;Name&gt;redirectOnConnect&lt;/Name&gt;
	     &lt;Value&gt;true&lt;/Value&gt;
	     &lt;Type&gt;Boolean&lt;/Type&gt;
    &lt;/Property&gt;
</pre>
<p>Where <strong>[application-name]</strong> is the name of the application you wish to redirect to on the edge server and <strong>[redirect-port]</strong> is the port to redirect to (such as port 1935 or port 80). The <strong>redirectPort</strong> and <strong>redirectScheme</strong> are commented out so that the system will use the same scheme and port used to connect to the load balancer to connect to the edge server. This will work better when using any type of protocol (rtmp to rtmpt) or port rollover scheme.</p>
<p><code> </code></p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/8aE_U2bsXGk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/load-balancing-in-wowza-media-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/load-balancing-in-wowza-media-server</feedburner:origLink></item>
		<item>
		<title>Transparent Data Encryption In SQL Server 2008</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/SObGrOWsGKo/transparent-data-encryption-in-sql-server-2008</link>
		<comments>http://www.sparksupport.com/blog/transparent-data-encryption-in-sql-server-2008#comments</comments>
		<pubDate>Mon, 02 Aug 2010 14:55:12 +0000</pubDate>
		<dc:creator>bijopg</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Database Encryption]]></category>
		<category><![CDATA[Encryption SQL Server 2008]]></category>
		<category><![CDATA[How to Encrypt a database]]></category>
		<category><![CDATA[TDE In SQL SERVER 2008]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=761</guid>
		<description><![CDATA[

As a Database or System Administrator, security is one of the most important areas to consider when it comes to protecting the databases that you support. We use various mechanisms and technologies to secure our data and databases such as firewalls, certificates, and data encryption. Having said that although we have secured our environment, questions [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="text-decoration: underline"><br />
</span></strong></p>
<p>As a Database or System Administrator, security is one of the most important areas to consider when it comes to protecting the databases that you support. We use various mechanisms and technologies to secure our data and databases such as firewalls, certificates, and data encryption. Having said that although we have secured our environment, questions will always be raised regarding database security. Although we have protected our databases, what would happen if someone steals the mdf file or if someone steals the backup file.</p>
<p>Although there are few ways to control this scenario using third-party solutions up until SQL Server 2008 there has been no native way to handle this problem. SQL Server 2008 introduces a new feature that protects the database called <strong>Transparent Data Encryption</strong> &#8211; TDE which provides protection to the entire database, that is Data is encrypted before it is written to disk; data is decrypted when it is read from disk. There is no need of changes in the application when it is implementing with existing applications that means there is no headache for developers!</p>
<p><strong>Note</strong>: Applies Only to Microsoft SQL Server 2008 Enterprise Edition</p>
<p>I hope this article will guide you throughout the implementation of TDE in MSSQL SERVER 2008.</p>
<p>The diagram below shows how SQL Server encrypts a database with TDE:</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/tde.png"></a><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/tde4.png"><img class="aligncenter size-medium wp-image-769" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/tde4-300x189.png" alt="" width="300" height="189" /></a></p>
<p><strong><span style="text-decoration: underline">Implementation of TDE</span></strong></p>
<p>There are four steps included in Implementation of TDE</p>
<p>* Create a master key</p>
<p>* Create or obtain a certificate protected by the master key</p>
<p>* Create a database encryption key and protect it by the certificate</p>
<p>* Set the database to use encryption</p>
<p><strong>1. Create a master key</strong></p>
<p>A master key is a symmetric key that is used to create certificates and asymmetric keys.  Execute the following script to create a master key:</p>
<pre class="brush: sql;">
USE master;

CREATE MASTER KEY

ENCRYPTION BY PASSWORD = 'Pass@word1';
GO
</pre>
<p><strong>2. Create Certificate</strong><br />
Certificates can be used to create symmetric keys for data encryption or to encrypt the data directly.  Execute the following script to create a certificate:</p>
<pre class="brush: sql;">

CREATE CERTIFICATE TDECert

WITH SUBJECT = 'TDE Certificate'

GO
</pre>
<p><strong>3. Create a database encryption key and protect it by the certificate</strong></p>
<p>1. Go to <strong><em>object explorer</em></strong> in the left pane of the MSSQL SERVER Management Studio</p>
<p>2. Right Click on the<strong><em> database</em></strong> on which TDE Requires</p>
<p>3. Click <strong><em>Tasks </em></strong>and Navigate to <strong><em>Manage Database Encryption</em></strong></p>
<p>4. Select the <strong><em>encryption algorithm </em></strong>(AES 128/192/256) and select the <strong><em>certificate</em></strong> you have    created</p>
<p>5. Then Mark the check Box for <strong><em>Set Database Encryption On</em></strong></p>
<p>You can query the is_encrypted column in sys.databases to determine whether TDE is enabled for a particular database.</p>
<pre class="brush: sql;">

SELECT [name], is_encrypted FROM sys.databases
</pre>
<p>You are Done !<strong> </strong></p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/SObGrOWsGKo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/transparent-data-encryption-in-sql-server-2008/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/transparent-data-encryption-in-sql-server-2008</feedburner:origLink></item>
		<item>
		<title>Web Crawling : A basic know-how.</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/9edFoD_Zs7w/web-crawling-a-basic-know-how</link>
		<comments>http://www.sparksupport.com/blog/web-crawling-a-basic-know-how#comments</comments>
		<pubDate>Mon, 02 Aug 2010 13:19:55 +0000</pubDate>
		<dc:creator>Shameem Khalid</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[bots]]></category>
		<category><![CDATA[scraping]]></category>
		<category><![CDATA[tor]]></category>
		<category><![CDATA[web crawling]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=843</guid>
		<description><![CDATA[
A Web crawler is a computer program that browses the World Wide Web in a methodical, automated manner or in an orderly fashion. Other terms for Web crawlers are ants, automatic indexers, bots, web spiders, web robots, etc. The process is termed &#8220;web crawling&#8221;, and most site engines use it as a means to provide [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>A Web crawler is a computer program that browses the World Wide Web in a methodical, automated manner or in an orderly fashion. Other terms for Web crawlers are ants, automatic indexers, bots, web spiders, web robots, etc. The process is termed &#8220;web crawling&#8221;, and most site engines use it as a means to provide up-to-date data, in order to create a copy of all pages that have been visited. These are later processed, and the search engine will index the downloaded pages.<br />
This helps in :</p>
<ul>
<li>faster search</li>
<li>automating maintenance task on a web site</li>
<li>gathering specific types of information from websites</li>
</ul>
<p>The bot starts with seeds, which are a list of URLs to visit. Once the &#8220;crawler&#8221; is on one of the listed URLs, the hyperlinks in that page are identified and added to the &#8220;crawl frontier&#8221; which is the set of URLs that are to be visited. These are later visited according to a pre-defined set of policies.</p>
<p>Web Crawlers can be developed using any language : perl, python, java, asp,php etc. Among these, we chose perl to develop a web crawler. Lets see what happened next.</p>
<p><em><span style="color: #003300">Why Perl?</span></em></p>
<p>Perl is well suited for  web scraping  because of its highly powerful RegEx and availability of CPAN modules .</p>
<p>In this session, we will deal with :</p>
<ul>
<li>Mechanize(Perl Module),</li>
<li>Process spawning</li>
<li>Anonymous  scraping</li>
</ul>
<p>Mechanize module : Mechanize is one of the main modules used, for stateful programmatic web browsing, used for automating interaction with websites. Mechanize supports performing a sequence of page fetches including following links and submitting forms. Each fetched page is parsed and its links and forms are extracted. A link or a form can be selected, form fields can be filled and the next page can be fetched. Mech also stores a history of the URLs you’ve visited, which can be queried and revisited. Usefull functions decribed in bottem</p>
<p>For more info:<a href="http://search.cpan.org/~petdance/WWW-Mechanize-1.62/">http://search.cpan.org/~petdance/WWW-Mechanize-1.62/</a><br />
<a href="http://search.cpan.org/~petdance/WWW-Mechanize-1.62/"></a><br />
Sample Script</p>
<pre class="brush: perl;">
#!/usr/bin/perl -w
use WWW::Mechanize;
$url = 'http://chato.cl/research/crawling_thesis ';
$m = WWW::Mechanize-&amp;gt;new();
$m-&amp;gt;get($url);
$c = $m-&amp;gt;content; #  Will display souce code of the above link
exit;
</pre>
<blockquote><p><em><span style="color: #003300">Usefull Function of mechanize module</span></em><br />
my $mech = WWW::Mechanize-&gt;new();         #Creating new object of  Mechanize.<br />
$mech-&gt;agent_alias(&#8216;Linux Mozilla&#8217;);            	#Creating a new agent like firfox<br />
$mech-&gt;get(&#8216;www.google.com&#8217;);                       #Download content in the link (www.google.com)<br />
$mech-&gt;content;                                                     # This has the content of www.google.com link<br />
$mech-&gt;submit_form                                            # for form submition<br />
$mech-&gt;find_link(text =&gt;&#8217;Next&#8217;)                      #Follow the link with text &#8216;Next&#8217; there are so many options for this like regular expression ,class,etc</p></blockquote>
<p><strong><span style="color: #003300">Process spawning  :</span></strong><br />
Most of the bots have a main process and a number of child processes. Main processes deal with creating child processes based on our requirement, while the child processes scrape our target locations simultanously.</p>
<p><span style="color: #003300"><strong>Why Process spawning?</strong></span><br />
Process spawning is used simply for simultaneous scraping at different levels of a web site (i.e. at different page/sections etc.<br />
It has a number of advantages like nitro boosting of scraping speed and easier management of server load.<br />
In case the target is an e-commerce portal with a million section (like review page) with some pages or sections (or any other target)  missing. Here, the child process will simply die, without effecting the total crawling process, while the main continues with a new child and new section.<br />
<strong><span style="color: #003300"> Anonymous scraping with TOR</span></strong></p>
<p><strong></strong><br />
Tor is a free software and an open network that helps in defending your site against a form of network surveillance known as traffic analysis. This surviellance threatens personal freedom, privacy, confidential business activities and relationships.<br />
Tor is a network of virtual tunnels that allows people and groups to improve their privacy and security on the Internet. It also enables software developers to create new communication tools with built-in privacy features. Tor provides the foundation for a range of applications that allow organizations and individuals to share information over public networks without compromising their privacy.</p>
<p>For more info  please go through<br />
<a href="http://"> http://www.torproject.org/docs/tor-doc-unix.html.en#polipo</a></p>
</div>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/9edFoD_Zs7w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/web-crawling-a-basic-know-how/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/web-crawling-a-basic-know-how</feedburner:origLink></item>
		<item>
		<title>How To Install Red5 on CentOS</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/skyQ9f3leds/how-to-install-red5-on-cenos</link>
		<comments>http://www.sparksupport.com/blog/how-to-install-red5-on-cenos#comments</comments>
		<pubDate>Mon, 02 Aug 2010 05:41:51 +0000</pubDate>
		<dc:creator>Jaseer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[howto install red5]]></category>
		<category><![CDATA[Red5]]></category>
		<category><![CDATA[red5 installation]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=816</guid>
		<description><![CDATA[Red5 is an open source video sream server appllication which helps you to stream your video content across the web. Inorder to install and run red5, you need the java platform installed on your system. Using apache-ant or eclipse we can build and install Red5. Here apache-ant  method is described.
1)Using Apache-ant
a)install jdk 1.6 or higher [...]]]></description>
			<content:encoded><![CDATA[<p>Red5 is an open source video sream server appllication which helps you to stream your video content across the web. Inorder to install and run red5, you need the java platform installed on your system. Using <em><strong>apache-ant </strong></em>or <em><strong>eclipse</strong></em> we can build and install Red5. Here apache-ant  method is described.</p>
<h4><strong>1)Using Apache-ant</strong></h4>
<h5>a)install jdk 1.6 or higher and its curresponding deveopment package.</h5>
<p>#yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel</p>
<h5>b)Install apache-ant</h5>
<p>To build the red5 binary from source we need apache-ant. So install it.</p>
<p>#cd /usr/src</p>
<p>#wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.8.0-bin.tar.bz2</p>
<p>#tar -xjf apache-ant-1.8.0-bin.tar.bz2</p>
<p>#mv apache-ant-1.8.0 /usr/local/ant</p>
<h5>c)Set the enviroment variables for java, ant and java class path</h5>
<p>export ANT_HOME=/usr/local/ant<br />
export JAVA_HOME=/usr/lib/jvm/java<br />
export PATH=$PATH:/usr/local/ant/bin<br />
export CLASSPATH=.:$JAVA_HOME/lib/classes.zip</p>
<p>If you want this to be avilable for all users, append these lines to the file /etc/bashrc</p>
<h5>d)Now Install subversion to downlaod the svn version from the googlecode.</h5>
<p>#yum install subversion</p>
<h5>e)Download and Install Red5</h5>
<p>#svn checkout http://red5.googlecode.com/svn/java/server/trunk/ red5</p>
<p>#mv red5 /usr/local</p>
<p>#cd /usr/local/red5</p>
<p>#ant prepare</p>
<p>#ant build</p>
<p><span style="color: #ff0000">Note: If you are building on CentOS 5.4 use &#8220;#ant dist&#8221; command instead of &#8220;#ant build&#8221;</span></p>
<p>This will take some time. So please be patient.</p>
<p>Finally you will see a line &#8220;Build successful&#8221; .That means your red5 installation is complete. Now copy the conf directory from dist/ to the current directory and now test your installation by runnig the script</p>
<p>#cp -r dist/conf .<br />
#./red5.sh</p>
<p>Your Installation is ok if it shows &#8220;Installer service created&#8221; in the last. Now press ctrl+c to quit the process and go for the init script</p>
<h5>f)Init Script</h5>
<p>#vi /etc/init.d/red5</p>
<p>copy the following code to it.</p>
<pre><span style="color: #0000ff">#!/bin/bash
 PROG=red5
 RED5_HOME=/usr/local/red5
 DAEMON=$RED5_HOME/$PROG.sh</span><span style="color: #0000ff"> PIDFILE=/var/run/$PROG.pid
# Source function library</span><span style="color: #0000ff"> . /etc/rc.d/init.d/functions</span><span style="color: #0000ff">[ -r /etc/sysconfig/red5 ] &amp;&amp; . /etc/sysconfig/red5</span><span style="color: #0000ff">RETVAL=0
case "$1" in
 start)
 echo -n $"Starting $PROG: "
 cd $RED5_HOME
 $DAEMON &gt;/dev/null 2&gt;/dev/null &amp;
 RETVAL=$?
 if [ $RETVAL -eq 0 ]; then
 echo $! &gt; $PIDFILE
 touch /var/lock/subsys/$PROG
 fi
 [ $RETVAL -eq 0 ] &amp;&amp; success $"$PROG startup" || failure $"$PROG startup"
 echo
 ;;
 stop)
 echo -n $"Shutting down $PROG: "
 killproc -p $PIDFILE
 RETVAL=$?
 echo
 [ $RETVAL -eq 0 ] &amp;&amp; rm -f /var/lock/subsys/$PROG
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 status)
 status $PROG -p $PIDFILE
 RETVAL=$?
 ;;
 *)
 echo $"Usage: $0 {start|stop|restart|status}"
 RETVAL=1</span><span style="color: #0000ff"> esac
exit $RETVAL

</span><span style="color: #0000ff"> </span></pre>
<h5>g)Start the service and test your server</h5>
<p>#/etc/init.d/red5 start</p>
<p>Now you can open your browser enter <strong>http://[your_ip]:5080</strong> and see your sever working. You can install the sample applications and view the demos.</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/skyQ9f3leds" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/how-to-install-red5-on-cenos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/how-to-install-red5-on-cenos</feedburner:origLink></item>
		<item>
		<title>How to connect to IM gateways through openfire</title>
		<link>http://feedproxy.google.com/~r/sparksupport/~3/gRfokrQace0/how-to-connect-to-im-gateways-through-openfire</link>
		<comments>http://www.sparksupport.com/blog/how-to-connect-to-im-gateways-through-openfire#comments</comments>
		<pubDate>Sat, 31 Jul 2010 12:35:16 +0000</pubDate>
		<dc:creator>Tino Thomas</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[im gateway]]></category>
		<category><![CDATA[im gateway plugin]]></category>
		<category><![CDATA[kraken]]></category>
		<category><![CDATA[kraken im gateway]]></category>
		<category><![CDATA[kraken plugin]]></category>
		<category><![CDATA[kraken xmpp im]]></category>
		<category><![CDATA[openfire]]></category>
		<category><![CDATA[openfire im gateway]]></category>
		<category><![CDATA[openfire plugin]]></category>

		<guid isPermaLink="false">http://www.sparksupport.com/blog/?p=776</guid>
		<description><![CDATA[The IM Gateway plugin for Openfire provides connectivity to other IM networks (AIM, ICQ, IRC, MSN, Yahoo, etc). It uses internal mechanisms to smooth the interaction with the various transports that standard transports can not currently provide. This plugin is called kracken im gateway plugin. It can be downloaded from the following link.


http://sourceforge.net/projects/kraken-gateway/

Openfire admin panel [...]]]></description>
			<content:encoded><![CDATA[<p>The IM Gateway plugin for Openfire provides connectivity to other IM networks (AIM, ICQ, IRC, MSN, Yahoo, etc). It uses internal mechanisms to smooth the interaction with the various transports that standard transports can not currently provide. This plugin is called kracken im gateway plugin. It can be downloaded from the following link.</p>
<pre class="brush: bash;">

http://sourceforge.net/projects/kraken-gateway/
</pre>
<p>Openfire admin panel provides an option to upload new plugins into it. The file should be in .jar format.</p>
<p>.<br />
<a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of16.jpg"><img class="alignnone size-full wp-image-801" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of16.jpg" alt="" width="814" height="387" /></a></p>
<p>Once the plugin file is uploaded it will be listed under plugin section in admin panel.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of2.jpg"><img class="alignnone size-full wp-image-779" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of2.jpg" alt="" width="991" height="170" /></a></p>
<p>Next step is to select the networks that we want to connect from openfire. For that you need to go to Gateways in admin panel and select the gateways you want to connect to and its setttings.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of17.jpg"><img class="alignnone size-full wp-image-803" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of17.jpg" alt="" width="938" height="469" /></a></p>
<p>Checking a gateway enables the service.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of4.jpg"><img class="alignnone size-full wp-image-781" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of4.jpg" alt="" width="589" height="71" /></a></p>
<p>You can test the connection to the gateway network from the openfire server by clicking the &#8216;Tests&#8217; link.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of51.jpg"><img class="alignnone size-full wp-image-783" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of51.jpg" alt="" width="293" height="151" /></a></p>
<p>﻿Also there is an option to specify the users who all are allowed to connect to the gateway service.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of7.jpg"><img class="alignnone size-full wp-image-784" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of7.jpg" alt="" width="569" height="220" /></a></p>
<p>Next you need to do gateway service registration for a particular openfire user. For that click on &#8220;Registrations&#8221; in the left-hand menu.  Then click on &#8220;Add a new registration.&#8221;</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of8.jpg"> </a><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of81.jpg"><img class="alignnone size-full wp-image-791" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of81.jpg" alt="" width="966" height="341" /></a></p>
<p>Here user is the openfire user which we want to connect to a gateway. Dropdown window for &#8216;gateways&#8217; lists gateways we selected in one of the earlier steps. You can select the desired one from it. username and password should be corresponding gateway service account credentials. Here it should be login credentials of msn messanger.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of18.jpg"><img class="alignnone size-full wp-image-806" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of18.jpg" alt="" width="731" height="180" /></a></p>
<p>You can associate all the gateway services, you want, to a particular openfire user by adding like this. Once you associate gateway services like this you can login into your openfire account through one of the clients, here i am using pidgin to connect to the openfire server. Once you login into openfire account through a client you may be able to see all the gateway services associated with that user are listed in the client.</p>
<p><a href="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of15.jpg"><img class="alignnone size-full wp-image-799" src="http://www.sparksupport.com/blog/wp-content/uploads/2010/07/of15.jpg" alt="" width="328" height="534" /></a></p>
<p>Thus you will be able to login into all the associated gateways by just logging in to the openfire user account and you can have all your gateway services at once place.</p>
<img src="http://feeds.feedburner.com/~r/sparksupport/~4/gRfokrQace0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.sparksupport.com/blog/how-to-connect-to-im-gateways-through-openfire/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.sparksupport.com/blog/how-to-connect-to-im-gateways-through-openfire</feedburner:origLink></item>
		<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 are set of daemons associate with this package, it also provide command 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  work with out creating configuration files explicitly, they are already pre-configured. But to start the interaction with clients we need to do some changes. Before that we can check the structure of the puppet configuration file.</p>
<p>Its a good practice maintaining an explicit puppet 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>. We save  all the configuration details of major daemons at /etc/puppet/puppet.conf.The puppet.conf using special type of configuration structure to include all daemons configuration details,described below,</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 server configuration details.

[puppetd]

To include the Puppet client configurations.

[puppetca]

Configuration details of puppet key management tool.
</pre>
<p>To get all the parameters under each daemons 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 Connect 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 also. At the master server we need to specify the  set of configuration, that will guide how to change the configurations at clients.</p>
<p>Puppet server and client using Hostname to communicate with each other  and also used to generate ssh key and key verification etc.., so we need a stable  hostname resolution system (DNS or Local settings) in our network to  ensure the proper connection between clients and server.Then after that select proper hostnames 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 the hostname allocation we need to start the server and  client.Use command line options now to know the more about the interactions  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 the following message with the information about the creation of self signed key and waiting for server verification.</p>
<pre class="brush: plain;">

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
</pre>
<p><em> </em></p>
<p>At the same time server side we will get the following message.</p>
<pre class="brush: plain;">

notice: Starting Puppet master version 2.6.0
notice: puppet-client.com has a waiting certificate request
</pre>
<p>To proceed further , at 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 verification process.
</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 in 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 commands without any parameters to start appropriate daemons.</em></p>
<p><strong>The Configuration Management</strong></p>
<p>Last and very powerful feature of the puppet is, define the Client configurations. For that puppet using one Language which support most of the high level language constructs like OOPs. So lets try one simple configuration which change the permission of /etc/passwd file at all the clients connected with server to 640 and check Apache webserver installed or not , if not it will install it automatically.</p>
<p>These configuration specifications are defined under a file &#8220;<strong>/etc/puppet/manifests/site.pp</strong>&#8221; by default, we can split this file 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 client configuration specification written in puppet declarative language.</p>
<p>Language have lot of constructs to define the resource and its properties.Using these constructs we managing the resources on client systems. The types of resources that puppet manages are listed bellow, and we can add our own customized resources to mange.</p>
<p><em>Type of Resources that puppet can manage by default:-</em></p>
<ul>
<li><span style="color: #800000"><strong><em>Files</em></strong></span></li>
<li><span style="color: #800000"><strong><em>Packages</em></strong></span></li>
<li><span style="color: #800000"><strong><em>Services</em></strong></span></li>
<li><span style="color: #800000"><strong><em>Corn Jobs</em></strong></span></li>
<li><span style="color: #800000"><strong><em>Users and Groups</em></strong></span></li>
<li><span style="color: #800000"><strong><em>To run Shell Commands</em></strong></span></li>
<li><strong><span style="color: #800000"><em>And User defined resource types</em></span><br />
</strong></li>
</ul>
<p>Each of the above resources have set of attributes or properties and values, using the puppet configuration language we can set the corresponding property values. The resource can defined by giving three main parameters ,<strong>Resource type name</strong>, then inside braces({}) <strong>title of the resource and </strong>set of <strong>property values</strong>. From above example, take the resource of type <em><strong>File</strong></em> with title name <em><strong>&#8220;password&#8221;</strong></em> inside that we have set of property values like name,owner,groups etc&#8230; so if a client successfully connect to server,the client puppet will apply these setting on client machine. If we change this property values, after next interval we can see the client will successfully apply it.</p>
<p>By this way we can control the resource configurations. In our networks there should be  different types of systems (Redhat,Debian,etc..),and they have some changes in the structure of the files and other package names, so here we need to apply the configurations based on the type of clients. The puppet provide Conditional statements (<strong>if</strong> and <strong>case</strong> ) to check and apply configurations depending on client architecture. For that we need some system information back to the client ,the <strong>facter</strong> will provide these datas. We can use that informations at the puppet configurations like a variable for eg: <strong>$operatingsystem </strong>(You can see all the informations that facter will provide by just typing the command <strong>facter</strong> at command prompt.)</p>
<p>Similarly we can specify the rules based on the client name, and using the OPPs constructs we can define the <strong>classes</strong> and reuse them with other client definitions, you can find some of them from  above example site.pp file.You can do a high level configuration design using puppet language. To learn more about the language constructs please check the puppet online wiki and one nice book  which describe every thing associated with Puppet by <strong>James Turnbull</strong>(Pulling Strings with Puppet.)</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>
	</channel>
</rss>
