<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Radhakrishnak's Blog</title>
	<atom:link href="http://radhakrishnak.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://radhakrishnak.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Tue, 23 Dec 2008 05:09:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='radhakrishnak.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Radhakrishnak's Blog</title>
		<link>http://radhakrishnak.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://radhakrishnak.wordpress.com/osd.xml" title="Radhakrishnak&#039;s Blog" />
	<atom:link rel='hub' href='http://radhakrishnak.wordpress.com/?pushpress=hub'/>
		<item>
		<title>LDAP</title>
		<link>http://radhakrishnak.wordpress.com/2008/12/23/ldap/</link>
		<comments>http://radhakrishnak.wordpress.com/2008/12/23/ldap/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 05:09:26 +0000</pubDate>
		<dc:creator>radhakrishnak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://radhakrishnak.wordpress.com/?p=28</guid>
		<description><![CDATA[The Lightweight Directory Access Protocol, or LDAP is an application protocol for querying and modifying directory services running over TCP/IP.[1] A directory is a set of objects with similar attributes organised in a logical and hierarchical manner. The most common example is the telephone directory, which consists of a series of names (either of persons [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=28&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The <strong>Lightweight Directory Access Protocol</strong>, or <strong>LDAP</strong> is an <a class="mw-redirect" title="Application protocol" href="http://en.wikipedia.org/wiki/Application_protocol">application protocol</a> for querying and modifying <a title="Directory service" href="http://en.wikipedia.org/wiki/Directory_service">directory services</a> running over <a class="mw-redirect" title="Internet protocol suite" href="http://en.wikipedia.org/wiki/Internet_protocol_suite">TCP/IP</a>.<sup class="reference"><a href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol#cite_note-0"><span>[</span>1<span>]</span></a></sup></p>
<p>A directory is a set of objects with similar attributes organised in a logical and hierarchical manner. The most common example is the telephone directory, which consists of a series of names (either of persons or organizations) organized alphabetically, with each name having an address and phone number attached.</p>
<p>An <a title="Directory Information Tree" href="http://en.wikipedia.org/wiki/Directory_Information_Tree">LDAP directory tree</a> often reflects various political, geographic, and/or organizational boundaries, depending on the model chosen. LDAP deployments today tend to use <a class="mw-redirect" title="Domain name system" href="http://en.wikipedia.org/wiki/Domain_name_system">Domain name system</a> (DNS) names for structuring the topmost levels of the hierarchy. Deeper inside the directory might appear entries representing people, organizational units, printers, documents, groups of people or anything else that represents a given tree entry (or multiple entries).</p>
<h2><span class="mw-headline">Origin and influences</span></h2>
<p>Telecommunication companies introduced the concept of directory services to <a title="Information technology" href="http://en.wikipedia.org/wiki/Information_technology">information technology</a> and <a title="Computer networking" href="http://en.wikipedia.org/wiki/Computer_networking">computer networking</a>, as their understanding of directory requirements was well-developed after some 70 years of producing and managing telephone directories. The culmination of this input was the comprehensive <a title="X.500" href="http://en.wikipedia.org/wiki/X.500">X.500</a> specification<sup class="reference"><a href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol#cite_note-1"><span>[</span>2<span>]</span></a></sup>, a suite of protocols produced by the <a class="mw-redirect" title="ITU" href="http://en.wikipedia.org/wiki/ITU">International Telecommunication Union</a> (ITU) in the 1980s.</p>
<p>X.500 directory services were traditionally accessed via the X.500 <a title="Directory Access Protocol" href="http://en.wikipedia.org/wiki/Directory_Access_Protocol">Directory Access Protocol</a> (DAP), which required the <a title="Open Systems Interconnection" href="http://en.wikipedia.org/wiki/Open_Systems_Interconnection">Open Systems Interconnection</a> (OSI) protocol stack. LDAP was originally intended to be a lightweight alternative protocol for accessing X.500 directory services through the simpler (and now widespread) <a class="mw-redirect" title="TCP/IP" href="http://en.wikipedia.org/wiki/TCP/IP">TCP/IP</a> protocol stack. This model of directory access was borrowed from the <a title="DIXIE" href="http://en.wikipedia.org/wiki/DIXIE">DIXIE</a> and <a title="Directory Assistance Service" href="http://en.wikipedia.org/wiki/Directory_Assistance_Service">Directory Assistance Service</a> protocols.</p>
<p>Standalone LDAP directory servers soon followed, as did directory servers supporting both DAP and LDAP. The latter has become popular in enterprises, as LDAP removed any need to deploy an OSI network. Today, X.500 directory protocols including DAP can also be used directly over TCP/IP.</p>
<p>The protocol was originally created by <a title="Tim Howes" href="http://en.wikipedia.org/wiki/Tim_Howes">Tim Howes</a> of the <a title="University of Michigan" href="http://en.wikipedia.org/wiki/University_of_Michigan">University of Michigan</a>, <a class="new" title="Steve Kille (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=Steve_Kille&amp;action=edit&amp;redlink=1">Steve Kille</a> of <a title="Isode Limited" href="http://en.wikipedia.org/wiki/Isode_Limited">Isode Limited</a>, and <a title="Wengyik Yeong" href="http://en.wikipedia.org/wiki/Wengyik_Yeong">Wengyik Yeong</a> of <a title="PSINet" href="http://en.wikipedia.org/wiki/PSINet">Performance Systems International</a>, circa 1993. Further development has been done via the <a title="Internet Engineering Task Force" href="http://en.wikipedia.org/wiki/Internet_Engineering_Task_Force">Internet Engineering Task Force</a>.</p>
<p>In the early engineering stages of LDAP, it was known as <em>Lightweight Directory Browsing Protocol</em>, or <em>LDBP</em>. It was renamed as the scope of the protocol was expanded to include not only directory browsing and searching functions, but also directory update functions.</p>
<p>LDAP has influenced subsequent Internet protocols, including later versions of X.500, <a title="XML Enabled Directory" href="http://en.wikipedia.org/wiki/XML_Enabled_Directory">XML Enabled Directory</a> (XED), <a title="Directory Service Markup Language" href="http://en.wikipedia.org/wiki/Directory_Service_Markup_Language">Directory Service Markup Language</a> (DSML), <a title="SPML" href="http://en.wikipedia.org/wiki/SPML">Service Provisioning Markup Language</a> (SPML), and the <a title="Service Location Protocol" href="http://en.wikipedia.org/wiki/Service_Location_Protocol">Service Location Protocol</a> (SLP)</p>
<p><a id="Protocol_overview" name="Protocol_overview"></a></p>
<h2><span class="mw-headline">Protocol overview</span></h2>
<p>A client starts an LDAP session by connecting to an LDAP server, by default on <a title="Transmission Control Protocol" href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol">TCP</a> <a title="TCP and UDP port" href="http://en.wikipedia.org/wiki/TCP_and_UDP_port">port</a> 389. The client then sends an operation request to the server, and the server sends responses in turn. With some exceptions, the client need not wait for a response before sending the next request, and the server may send the responses in any order.</p>
<p>The client may request the following operations:</p>
<ul>
<li>Start TLS — use the LDAPv3 <a title="Transport Layer Security" href="http://en.wikipedia.org/wiki/Transport_Layer_Security">Transport Layer Security</a> (TLS) extension for a secure connection</li>
<li>Bind — <a title="Authentication" href="http://en.wikipedia.org/wiki/Authentication">authenticate</a> and specify LDAP protocol version</li>
<li>Search — search for and/or retrieve directory entries</li>
<li>Compare — test if a named entry contains a given attribute value</li>
<li>Add a new entry</li>
<li>Delete an entry</li>
<li>Modify an entry</li>
<li>Modify Distinguished Name (DN) — move or rename an entry</li>
<li>Abandon — abort a previous request</li>
<li>Extended Operation — generic operation used to define other operations</li>
<li>Unbind — close the connection (not the inverse of Bind)</li>
</ul>
<p>In addition the server may send &#8220;Unsolicited Notifications&#8221; that are not responses to any request, e.g. before it times out a connection.</p>
<p>A common alternate method of securing LDAP communication is using an <a class="new" title="Secure Socket Layer Tunnel (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=Secure_Socket_Layer_Tunnel&amp;action=edit&amp;redlink=1">SSL tunnel</a>. This is denoted in LDAP URLs by using the URL scheme &#8220;ldaps&#8221;. The default port for LDAP over <a class="mw-redirect" title="Secure Socket Layer" href="http://en.wikipedia.org/wiki/Secure_Socket_Layer">SSL</a> is 636. The use of LDAP over SSL was common in LDAP Version 2 (LDAPv2) but it was never standardized in any formal specification. This usage has been deprecated along with LDAPv2, which was officially <a class="external text" title="http://www.ietf.org/IESG/Announcements/draft-zeilenga-ldapv2.ann" rel="nofollow" href="http://www.ietf.org/IESG/Announcements/draft-zeilenga-ldapv2.ann">retired in 2003</a>.</p>
<p>LDAP is defined in terms of <a class="mw-redirect" title="Abstract syntax notation one" href="http://en.wikipedia.org/wiki/Abstract_syntax_notation_one">ASN.1</a>, and protocol messages are encoded in the binary format <a class="mw-redirect" title="Basic encoding rules" href="http://en.wikipedia.org/wiki/Basic_encoding_rules">BER</a>. It uses textual representations for a number of ASN.1 fields/types, however.</p>
<p><a id="Directory_structure" name="Directory_structure"></a></p>
<h2><span class="mw-headline">Directory structure</span></h2>
<p>The protocol accesses LDAP directories, which follow the 1993 edition of the <a title="X.500" href="http://en.wikipedia.org/wiki/X.500">X.500</a> model:</p>
<ul>
<li>A directory is a <a title="Directory Information Tree" href="http://en.wikipedia.org/wiki/Directory_Information_Tree">tree of directory entries</a>.</li>
<li>An entry consists of a set of attributes.</li>
<li>An attribute has a name (an <em>attribute type</em> or <em>attribute description</em>) and one or more values. The attributes are defined in a <em>schema</em> (see below).</li>
<li>Each entry has a unique identifier: its <em><a class="mw-redirect" title="Distinguished Name" href="http://en.wikipedia.org/wiki/Distinguished_Name">Distinguished Name</a></em> (DN). This consists of its <em><a class="new" title="Relative Distinguished Name (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=Relative_Distinguished_Name&amp;action=edit&amp;redlink=1">Relative Distinguished Name</a></em> (RDN) constructed from some attribute(s) in the entry, followed by the parent entry&#8217;s DN. Think of the DN as a full filename and the RDN as a relative filename in a folder.</li>
</ul>
<p>Be aware that a DN may change over the lifetime of the entry, for instance, when entries are moved within a tree. To reliably and unambiguously identify entries, a <a class="mw-redirect" title="UUID" href="http://en.wikipedia.org/wiki/UUID">UUID</a> might be provided in the set of the entry&#8217;s <em>operational attributes</em>.</p>
<p>An entry can look like this when represented in <a title="LDAP Data Interchange Format" href="http://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format">LDAP Data Interchange Format (LDIF)</a> (LDAP itself is a <a title="Binary protocol" href="http://en.wikipedia.org/wiki/Binary_protocol">binary protocol</a>):</p>
<pre> dn: cn=John Doe,dc=example,dc=com
 cn: John Doe
 givenName: John
 sn: Doe
 telephoneNumber: +1 888 555 6789
 telephoneNumber: +1 888 555 1232
 mail: john@example.com
 manager: cn=Barbara Doe,dc=example,dc=com
 objectClass: inetOrgPerson
 objectClass: organizationalPerson
 objectClass: person
 objectClass: top</pre>
<p>dn is the name of the entry; it&#8217;s not an attribute nor part of the entry. &#8220;cn=John Doe&#8221; is the entry&#8217;s RDN, and &#8220;dc=example,dc=com&#8221; is the DN of the parent entry, where dc denotes <a class="mw-redirect" title="Domain Component" href="http://en.wikipedia.org/wiki/Domain_Component">Domain Component</a>. The other lines show the attributes in the entry. Attribute names are typically mnemonic strings, like &#8220;cn&#8221; for common name, &#8220;dc&#8221; for domain component, &#8220;mail&#8221; for e-mail address and &#8220;sn&#8221; for surname.</p>
<p>A server holds a subtree starting from a specific entry, e.g. &#8220;dc=example,dc=com&#8221; and its children. Servers may also hold references to other servers, so an attempt to access &#8220;ou=department,dc=example,dc=com&#8221; could return a <em>referral</em> or <em>continuation reference</em> to a server which holds that part of the directory tree. The client can then contact the other server. Some servers also support <em>chaining</em>, which means the server contacts the other server and returns the results to the client.</p>
<p>LDAP rarely defines any ordering: The server may return the values of an attribute, the attributes in an entry, and the entries found by a search operation in any order. This follows from the formal definitions &#8211; an entry is defined as a <a title="Set" href="http://en.wikipedia.org/wiki/Set">set</a> of attributes, and an attribute is a set of values, and sets need not be ordered.</p>
<p><a id="Operations" name="Operations"></a></p>
<h2><span class="mw-headline">Operations</span></h2>
<p>The client gives each request a positive Message ID, and the server response has the same Message ID. The response includes a numeric result code which indicates success, some error condition or some other special cases. Before the response, the server may send other messages with other result data &#8211; for example each entry found by the Search operation is returned in such a message.</p>
<dl>
<dd><em>Expand discussion of referral responses to various operations, especially modify, for example where all modifies must be directed from replicas to a master directory.</em></dd>
</dl>
<p><a id="StartTLS" name="StartTLS"></a></p>
<h3><span class="mw-headline">StartTLS</span></h3>
<p>The StartTLS operation establishes <a title="Transport Layer Security" href="http://en.wikipedia.org/wiki/Transport_Layer_Security">Transport Layer Security</a> (the descendant of <a title="Transport Layer Security" href="http://en.wikipedia.org/wiki/Transport_Layer_Security">SSL</a>) on the connection. That can provide data confidentiality (cannot be read by third parties) and/or data integrity protection (protect from tampering). During TLS negotiation the server sends its <a title="X.509" href="http://en.wikipedia.org/wiki/X.509">X.509</a> certificate to prove its identity. The client may also send a certificate to prove its identity. After doing so, the client may then use <a title="Simple Authentication and Security Layer" href="http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer">SASL</a>/EXTERNAL to have this identity used in determining the identity used in making LDAP authorization decisions.</p>
<p>Servers also often support the non-standard &#8220;LDAPS&#8221; (&#8220;Secure LDAP&#8221;, commonly known as &#8220;LDAP over SSL&#8221;) protocol on a separate port, by default 636. LDAPS differs from LDAP in two ways: 1) upon connect, the client and server establish TLS before any LDAP messages are transferred (without a Start TLS operation) and 2) the LDAPS connection must be closed upon TLS closure.</p>
<p>LDAPS was primarily used with LDAPv2, because the StartTLS operation had not yet been defined. The use of LDAPS is deprecated, and modern software should only use StartTLS.</p>
<p><a id="Bind_.28authenticate.29" name="Bind_.28authenticate.29"></a></p>
<h3><span class="mw-headline">Bind (authenticate)</span></h3>
<p>The Bind operation authenticates the client to the server. Simple Bind can send the user&#8217;s DN and password in <a title="Plaintext" href="http://en.wikipedia.org/wiki/Plaintext">plaintext</a>, so the connection should be protected using <a title="Transport Layer Security" href="http://en.wikipedia.org/wiki/Transport_Layer_Security">Transport Layer Security</a> (TLS). The server typically checks the password against the userPassword attribute in the named entry. Anonymous Bind (with empty DN and password) resets the connection to anonymous state. <a title="Simple Authentication and Security Layer" href="http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer">SASL</a> (Simple Authentication and Security Layer) Bind provides authentication services through a wide range of mechanisms, e.g. <a title="Kerberos (protocol)" href="http://en.wikipedia.org/wiki/Kerberos_%28protocol%29">Kerberos</a> or the client certificate sent with TLS.</p>
<p>Bind also sets the LDAP protocol version. Normally clients should use LDAPv3, which is the default in the protocol but not always in LDAP libraries.</p>
<p>Bind had to be the first operation in a session in LDAPv2, but is not required in LDAPv3 (the current LDAP version).</p>
<p><a id="Search_and_Compare" name="Search_and_Compare"></a></p>
<h3><span class="mw-headline">Search and Compare</span></h3>
<p>The Search operation is used to both search for and read entries. Its parameters are:</p>
<dl>
<dt>baseObject </dt>
<dd>The DN (Distinguished Name) of the entry at which to start the search,</dd>
<dt>scope </dt>
<dd>BaseObject (search just the named entry, typically used to read one entry), singleLevel (entries immediately below the base DN), or wholeSubtree (the entire subtree starting at the base DN).</dd>
<dt>filter </dt>
<dd>How to examine each entry in the scope. E.g. (&amp;(objectClass=person)(|(givenName=John)(mail=john*))) &#8211; search for persons who either have given name John or an e-mail address starting with john.</dd>
<dt>derefAliases </dt>
<dd>Whether and how to follow alias entries (entries which refer to other entries),</dd>
<dt>attributes </dt>
<dd>Which attributes to return in result entries.</dd>
<dt>sizeLimit, timeLimit </dt>
<dd>Max number of entries, and max search time.</dd>
<dt>typesOnly </dt>
<dd>Return attribute types only, not attribute values.</dd>
</dl>
<p>The server returns the matching entries and maybe continuation references (in any order), followed by the final result with the result code.</p>
<p>The Compare operation takes a DN, an attribute name and an attribute value, and checks if the named entry contains that attribute with that value.</p>
<p><a id="Update_Data" name="Update_Data"></a></p>
<h3><span class="mw-headline">Update Data</span></h3>
<p>Add, Delete, and Modify DN &#8211; all require the DN of the entry that is to be changed.</p>
<p>Modify takes a list of attributes to modify and the modifications to each: Delete the attribute or some values, add new values, or replace the current values with the new ones.</p>
<p>Add operations also can have additional attributes and values for those attributes.</p>
<p>Modify DN (move/rename entry) takes the new RDN (Relative Distinguished Name), optionally the new parent&#8217;s DN, and a flag which says whether to delete the value(s) in the entry which match the old RDN. The server may support renaming of entire directory subtrees.</p>
<p>An update operation is atomic: Other operations will see either the new entry or the old one. On the other hand, LDAP does not define transactions of multiple operations: If you read an entry and then modify it, another client may have updated the entry in the mean time. Servers may implement extensions which support this, however.</p>
<p><a id="Extended_operations" name="Extended_operations"></a></p>
<h3><span class="mw-headline">Extended operations</span></h3>
<p>The Extended Operation is a generic LDAP operation which can be used to define new operations. Examples include the Cancel, Password Modify and Start TLS operations.</p>
<p><a id="Abandon" name="Abandon"></a></p>
<h3><span class="mw-headline">Abandon</span></h3>
<p>The Abandon operation requests that the server aborts an operation named by a message ID. The server need not honor the request. Unfortunately, neither Abandon nor a successfully abandoned operation send a response. A similar Cancel extended operation has therefore been defined which does send responses, but not all implementations support this.</p>
<p><a id="Unbind" name="Unbind"></a></p>
<h3><span class="mw-headline">Unbind</span></h3>
<p>The Unbind operation abandons any outstanding operations and closes the connection. It has no response. The name is of historical origin: It is <em>not</em> the opposite of the Bind operation.</p>
<p>Clients can abort a session by simply closing the connection, but they should use Unbind. Otherwise the server cannot tell the difference between a failed network connection (or a truncation attack) and a discourteous client.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/radhakrishnak.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/radhakrishnak.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/radhakrishnak.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/radhakrishnak.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/radhakrishnak.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/radhakrishnak.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/radhakrishnak.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/radhakrishnak.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=28&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://radhakrishnak.wordpress.com/2008/12/23/ldap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/221205546f7a418e9be80192c148d2aa?s=96&#38;d=identicon" medium="image">
			<media:title type="html">radhakrishnak</media:title>
		</media:content>
	</item>
		<item>
		<title>Softlink and Hardlinks</title>
		<link>http://radhakrishnak.wordpress.com/2008/12/23/softlink-and-hardlinks/</link>
		<comments>http://radhakrishnak.wordpress.com/2008/12/23/softlink-and-hardlinks/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 05:05:43 +0000</pubDate>
		<dc:creator>radhakrishnak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://radhakrishnak.wordpress.com/?p=23</guid>
		<description><![CDATA[Hard links and Soft links Links As was mentioned in the section on file system structure, every file has a data structure (record) known as an i-node that stores information about the file, and the filename is simply used as a reference to that data structure. A link is simply a way to refer to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=23&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hard links and Soft links</p>
<p>Links</p>
<p>As was    mentioned in the  section   on <a href="http://www.ugrad.cs.ubc.ca/%7Ecs219/CourseNotes/Unix/unix-fileStructure.html">file system structure</a>, every  file has a  data structure (record)  known as an i-node  that stores information about the file, and  the filename is  simply used as a  reference to that data structure. A  link is  simply  a way to refer  to the contents of a file. There are two types of links:</p>
<ul>
<li> Hard links: a hard link is a pointer to the file&#8217;s i-node.    For  example,     suppose    that   we      have   a   file a-file.txt   that   contains  the     string   &#8220;The  file a-file.txt&#8221;:
<pre class="program">% cat a-file.txt
The file a-file.txt
%</pre>
<p>Now  we use the  ln command to create a link to                   a-file.txt                         called b-file.txt:</p>
<pre class="program">% ls
./  ../  a-file.txt
% ln a-file.txt b-file.txt
% ls
./  ../  a-file.txt  b-file.txt</pre>
<p><img src="http://www.ugrad.cs.ubc.ca/%7Ecs219/CourseNotes/Unix/images/hardlink.jpg" alt="Hard Links" />The           two        names     a-file.txt      and b-file.txt now refer to the same data:</p>
<pre class="program">% cat b-file.txt
The file a-file.txt
%</pre>
<p>If we modify the  contents of file b-file.txt, then we also modify the contents of file a-file.txt:</p>
<pre class="program">% vi b-file.txt
...
% cat b-file.txt
The file a-file.txt has been modified.
% cat a-file.txt
The file a-file.txt has been modified.
%</pre>
<p>and vice versa:</p>
<pre class="program">% vi a-file.txt
...
% cat a-file.txt
The file a-file.txt has been modified again!
% cat b-file.txt
The file a-file.txt has been modified again!
%</pre>
</li>
<li>Soft links (symbolic     links): a soft link, also called symbolic link, is a  file that contains  the <em>name</em> of another file.  We can then access  the contents of the other  file through that   name. That is, a symbolic link  is  like a pointer  to  the pointer to the   file&#8217;s contents. For instance, supposed      that     in       the  previous      example,      we     had      used  the -s           option       of              the ln to create a soft link:
<pre class="program">% ln -s a-file.txt b-file.txt</pre>
<p>On disk, the file system would look like the following picture:</p>
<p><img src="http://www.ugrad.cs.ubc.ca/%7Ecs219/CourseNotes/Unix/images/softlink.jpg" alt="Soft Links" /></li>
</ul>
<p>But what are the differences  between the two types of  links, in practice? Let us look at an example that  highlights these differences. The  directory currently looks like this (let       us        assume         that       a-file.txt b-file.txt are both hard links to the same file):</p>
<pre class="program">% ls
./  ../  a-file.txt  b-file.txt</pre>
<p>Let         us    first   add        another          symbolic   link  using        the -s option:</p>
<pre class="program">% ln -s a-file.txt Symbolicb-file.txt
% ls -F
./  ../  a-file.txt  b-file.txt  Symbolicb-file.txt@</pre>
<p>A symbolic link, that  ls -F displays with a @ symbol, has been added to the  directory. Let us examine  the contents of the file:</p>
<pre class="program">% cat Symbolicb-file.txt
The file a-file.txt has been modified again!</pre>
<p>If we  change the  file Symbolicb-file.txt,  then the file a-file.txt is also modified.</p>
<pre class="program">% vi Symbolicb-file.txt
...
% cat Symbolicb-file.txt
The file a-file.txt has been modified a third time!
% cat a-file.txt
The file a-file.txt has been modified a third time!
% cat b-file.txt
The file a-file.txt has been modified a third time!
%</pre>
<p>If we remove the   file a-file.txt, we can no   longer access              the       data        through           the      symbolic         link Symbolicb-file.txt:</p>
<pre class="program">% ls -F
./  ../  a-file.txt  b-file.txt  Symbolicb-file.txt@
% rm a-file.txt
rm: remove `a-file.txt'? y
% ls -F
./  ../  b-file.txt  Symbolicb-file.txt@
% cat Symbolicb-file.txt
cat: Symbolicb-file.txt: No such file or directory</pre>
<p>The   link  Symbolicb-file.txt     contains  the name a-file.txt, and there  no longer is a  file with that name. On the other hand, b-file.txt has  its  own pointer to  the contents of  the file we called a-file.txt,  and  hence we can still use it to access the data.</p>
<pre class="program">% cat b-file.txt
The file a-file.txt has been modified a third time!</pre>
<p>Although it may seem like  symbolic links are not  particularly useful, hard links have their drawbacks. The  most significant drawback is  that  hard links cannot  be created to link a  file from one file  system to another file   on another file  system. A  Unix file structure hierarchy can  consist of several different   file systems (possibly  on several physical disks). Each file  system maintains its  own  information regarding the  internal structure of the system and the individual files on the system.  Hard links only know this system-specific information,  which make  hard links  unable  to  span file  systems. Soft links, on the other hand, know the name of the file,  which is more  general, and are able to span file systems.</p>
<p>For a concrete analogy, suppose that our friend Joel User is a student  at both UBC and SFU. Both  universities assign him  a student number. If  he tries to  use his UBC student number at SFU, he will not meet with any success. He will also fail if he tries to use his SFU  student number at UBC.  But  if he uses his   legal name, <em>Joel  User</em>, he  will probably be successful. The student  numbers are system-specific  (like hard links), while his legal name spans both of the systems (like soft links).</p>
<p>Here is an example that demonstrates a situation where a hard link cannot be used and a symbolic  link is  needed.  Suppose that we  try  to create a  hard link  from the current working directory to the  C header stdio.h.</p>
<pre class="program">% ln /usr/include/stdio.h stdio.h
ln: creating hard link `stdio.h' to `/usr/include/stdio.h': Invalid cross-device link
%</pre>
<p>The   ln      command        fails   because stdio.h is stored on a different  file system. If we want to create a link to it, we will have to use a symbolic link:</p>
<pre class="program">% ln -s /usr/include/stdio.h stdio.h
% ls -l
lrwxrwxrwx    1 a1a1 guest          20 Apr 20 11:58 stdio.h -&gt; /usr/include/stdio.h
% ls
./  ../  stdio.h@
%</pre>
<p>Now we  can view the  file stdio.h just  as  if it was located in the working directory. For example:</p>
<pre class="program">% cat stdio.h
/* Copyright (c) 1988 AT&amp;T */
/* All Rights Reserved */ 

/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&amp;T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */ 

/*
* User-visible pieces of the ANSI C standard I/O package.
*/ 

#ifndef _STDIO_H
#define _STDIO_H
...
%</pre>
<p>The entire output of the cat command was not included to save space.</p>
<p>Note that the long listing (ls -l) of a soft link does  not accurately reflect  its associated permissions.  To view the permissions of the   file   or       directory     that   the    symbolic     link    references,     the -L      options                   of        the ls command can be used. For example:</p>
<pre class="program">% ln -s /usr/include/stdio.h stdio.h

% ls -l stdio.h
lrwxrwxrwx   1 a1a1     undergrad     20 May 10 15:13 stdio.h -&gt; /usr/include/stdio.h

% ls -l /usr/include/stdio.h
-rw-r--r--   1 root     bin        11066 Jan  5  2000 /usr/include/stdio.h

% ls -lL stdio.h
-rw-r--r--   1 root     bin        11066 Jan  5  2000 stdio.h</pre>
<p>Knowledge  of links   becomes doubly important  when  working  as part   of  a software development team, and even more  so when using a source  code management tool such as RCS.  The man  page for the  ln command contains more information on Unix links and the ln.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/radhakrishnak.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/radhakrishnak.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/radhakrishnak.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/radhakrishnak.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/radhakrishnak.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/radhakrishnak.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/radhakrishnak.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/radhakrishnak.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=23&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://radhakrishnak.wordpress.com/2008/12/23/softlink-and-hardlinks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/221205546f7a418e9be80192c148d2aa?s=96&#38;d=identicon" medium="image">
			<media:title type="html">radhakrishnak</media:title>
		</media:content>

		<media:content url="http://www.ugrad.cs.ubc.ca/%7Ecs219/CourseNotes/Unix/images/hardlink.jpg" medium="image">
			<media:title type="html">Hard Links</media:title>
		</media:content>

		<media:content url="http://www.ugrad.cs.ubc.ca/%7Ecs219/CourseNotes/Unix/images/softlink.jpg" medium="image">
			<media:title type="html">Soft Links</media:title>
		</media:content>
	</item>
		<item>
		<title>IMAP</title>
		<link>http://radhakrishnak.wordpress.com/2008/12/23/imap/</link>
		<comments>http://radhakrishnak.wordpress.com/2008/12/23/imap/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 05:03:53 +0000</pubDate>
		<dc:creator>radhakrishnak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://radhakrishnak.wordpress.com/?p=20</guid>
		<description><![CDATA[History IMAP was designed by Mark Crispin in 1986 as a remote mailbox protocol, in contrast to the widely used POP, a protocol for retrieving the contents of a mailbox.[4] Original IMAP The original Interim Mail Access Protocol was implemented as a Xerox Lisp machine client and a TOPS-20 server. No copies of the original [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=20&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2><span class="mw-headline">History</span></h2>
<p>IMAP was designed by <a title="Mark Crispin" href="http://en.wikipedia.org/wiki/Mark_Crispin">Mark Crispin</a> in 1986 as a remote mailbox protocol, in contrast to the widely used POP, a protocol for retrieving the contents of a mailbox.<sup class="reference"><a href="http://en.wikipedia.org/wiki/Internet_Message_Access_Protocol#cite_note-3"><span>[</span>4<span>]</span></a></sup></p>
<p><a id="Original_IMAP" name="Original_IMAP"></a></p>
<h3><span class="mw-headline">Original IMAP</span></h3>
<p>The original <em>Interim Mail Access Protocol</em> was implemented as a <a title="Xerox" href="http://en.wikipedia.org/wiki/Xerox">Xerox</a> <a title="Lisp machine" href="http://en.wikipedia.org/wiki/Lisp_machine">Lisp machine</a> client and a <a title="TOPS-20" href="http://en.wikipedia.org/wiki/TOPS-20">TOPS-20</a> server.</p>
<p>No copies of the original interim protocol or its software exist; all known installations of the original protocol were updated to IMAP2. Although some of its commands and responses were similar to IMAP2, the interim protocol lacked command/response tagging and thus its syntax was incompatible with all other versions of IMAP.</p>
<p><a id="IMAP2" name="IMAP2"></a></p>
<h3><span class="mw-headline">IMAP2</span></h3>
<p>The interim protocol was quickly replaced by the <em>Interactive Mail Access Protocol</em> (IMAP2), defined in <strong><a class="external" title="http://tools.ietf.org/html/rfc1064" href="http://tools.ietf.org/html/rfc1064">RFC 1064</a></strong> and later updated by <strong><a class="external" title="http://tools.ietf.org/html/rfc1176" href="http://tools.ietf.org/html/rfc1176">RFC 1176</a></strong>. IMAP2 introduced command/response tagging and was the first publicly distributed version.</p>
<p><a id="IMAP2bis" name="IMAP2bis"></a></p>
<h3><span class="mw-headline">IMAP2bis</span></h3>
<p>With the advent of <a title="MIME" href="http://en.wikipedia.org/wiki/MIME">MIME</a>, IMAP2 was extended to support MIME body structures and add mailbox management functionality (create, delete, rename, message upload) that was absent in IMAP2. This experimental revision was called IMAP2bis; its specification was never published in non-draft form. Early versions of <a title="Pine (e-mail client)" href="http://en.wikipedia.org/wiki/Pine_%28e-mail_client%29">Pine</a> were widely distributed with IMAP2bis support (Pine 4.00 and later supports IMAP4rev1).</p>
<p><a id="IMAP4" name="IMAP4"></a></p>
<h3><span class="mw-headline">IMAP4</span></h3>
<p>An IMAP Working Group formed in the <a title="Internet Engineering Task Force" href="http://en.wikipedia.org/wiki/Internet_Engineering_Task_Force">IETF</a> in the early 1990s and took over responsibility for the IMAP2bis design. The IMAP WG decided to rename IMAP2bis to IMAP4 to avoid confusion with a competing IMAP3 proposal from another group that never got off the ground. The expansion of the IMAP acronym also changed to the <em>Internet Message Access Protocol</em>.</p>
<p>Some design flaws in the original IMAP4 (defined by <strong><a class="external" title="http://tools.ietf.org/html/rfc1730" href="http://tools.ietf.org/html/rfc1730">RFC 1730</a></strong>) that came out in implementation experience led to its revision and replacement by IMAP4rev1 two years later. There were very few IMAP4 client or server implementations due to its short lifetime.</p>
<p><a id="IMAP4rev1" name="IMAP4rev1"></a></p>
<h3><span class="mw-headline">IMAP4rev1</span></h3>
<p>The current version of IMAP since 1996, IMAP version 4 revision 1 (IMAP4rev1), is defined by <strong><a class="external" title="http://tools.ietf.org/html/rfc3501" href="http://tools.ietf.org/html/rfc3501">RFC 3501</a></strong> which revised the earlier <strong><a class="external" title="http://tools.ietf.org/html/rfc2060" href="http://tools.ietf.org/html/rfc2060">RFC 2060</a></strong>.</p>
<p>IMAP4rev1 is <a class="mw-redirect" title="Backwards compatible" href="http://en.wikipedia.org/wiki/Backwards_compatible">backwards compatible</a> with IMAP2 and IMAP2bis; and is largely backwards compatible with IMAP4. However, the older versions are either extinct or nearly so.</p>
<p>Unlike many older Internet protocols, IMAP4 natively supports encrypted login mechanisms. Plain-text transmission of passwords in IMAP4 is also possible. Because the encryption mechanism to be used must be agreed between the server and client, plain-text passwords are used in some combinations of clients and servers (typically <a title="Microsoft Windows" href="http://en.wikipedia.org/wiki/Microsoft_Windows">Microsoft Windows</a> clients and non-Windows servers). It is also possible to encrypt IMAP4 traffic using <a title="Transport Layer Security" href="http://en.wikipedia.org/wiki/Transport_Layer_Security">SSL</a>, either by tunneling IMAP4 communications over SSL on port 993, or by issuing <a class="mw-redirect" title="STARTTLS" href="http://en.wikipedia.org/wiki/STARTTLS">STARTTLS</a> within an established IMAP4 session (see <strong><a class="external" title="http://tools.ietf.org/html/rfc2595" href="http://tools.ietf.org/html/rfc2595">RFC 2595</a></strong>).</p>
<p><a id="Advantages_over_POP3" name="Advantages_over_POP3"></a></p>
<h2><span class="mw-headline">Advantages over POP3</span></h2>
<p><a id="Connected_and_disconnected_modes_of_operation" name="Connected_and_disconnected_modes_of_operation"></a></p>
<h3><span class="mw-headline"><em>Connected</em> and <em>disconnected</em> modes of operation</span></h3>
<p>When using POP3, clients typically connect to the e-mail server briefly, only as long as it takes to download new messages. When using IMAP4, clients often stay connected as long as the user interface is active and download message content on demand. For users with many or large messages, this IMAP4 usage pattern can result in faster response times.</p>
<p><a id="Multiple_clients_simultaneously_connected_to_the_same_mailbox" name="Multiple_clients_simultaneously_connected_to_the_same_mailbox"></a></p>
<h3><span class="mw-headline">Multiple clients simultaneously connected to the same mailbox</span></h3>
<p>The POP3 protocol requires the currently connected client to be the only client connected to the mailbox. In contrast, the IMAP protocol specifically allows simultaneous access by multiple clients and provides mechanisms for clients to detect changes made to the mailbox by other, concurrently connected, clients.</p>
<p><a id="Access_to_MIME_message_parts_and_partial_fetch" name="Access_to_MIME_message_parts_and_partial_fetch"></a></p>
<h3><span class="mw-headline">Access to MIME message parts and partial fetch</span></h3>
<p>Nearly all internet e-mail is transmitted in <a title="MIME" href="http://en.wikipedia.org/wiki/MIME">MIME</a> format, allowing messages to have a <a title="Tree structure" href="http://en.wikipedia.org/wiki/Tree_structure">tree structure</a> where the leaf nodes are any of a variety of <em>single part</em> content types and the non-leaf nodes are any of a variety of <em>multipart</em> types. The IMAP4 protocol allows clients to separately retrieve any of the individual MIME parts and also to retrieve portions of either individual parts or the entire message. These mechanisms allow clients to retrieve the text portion of a message without retrieving attached files or to <a title="Streaming media" href="http://en.wikipedia.org/wiki/Streaming_media">stream</a> content as it is being fetched.</p>
<p><a id="Message_state_information" name="Message_state_information"></a></p>
<h3><span class="mw-headline">Message state information</span></h3>
<p>Through the use of <em>flags</em> defined in the IMAP4 protocol, clients can keep track of message state; for example, whether or not the message has been read, replied to, or deleted. These flags are stored on the server, so different clients accessing the same mailbox at different times can detect state changes made by other clients. POP3 provides no mechanism for clients to store such state information on the server so if a single user accesses a mailbox with two different POP3 clients, state information&#8211;such as whether a message has been accessed&#8211;cannot be synchronized between the clients. The IMAP4 protocol supports both pre-defined system flags and client defined keywords. System flags indicate state information such as whether a message has been read. Keywords, which are not supported by all IMAP servers, allow messages to be given one or more <a title="Tag (metadata)" href="http://en.wikipedia.org/wiki/Tag_%28metadata%29">tags</a> whose meaning is up to the client. Adding user created tags to messages is an operation supported by some <a class="mw-redirect" title="Web-based email" href="http://en.wikipedia.org/wiki/Web-based_email">web-based email</a> services, such as <a title="Gmail" href="http://en.wikipedia.org/wiki/Gmail">Gmail</a>.</p>
<p><a id="Multiple_mailboxes_on_the_server" name="Multiple_mailboxes_on_the_server"></a></p>
<h3><span class="mw-headline">Multiple mailboxes on the server</span></h3>
<p>IMAP4 clients can create, rename, and/or delete mailboxes (usually presented to the user as folders) on the server, and move messages between mailboxes. Multiple mailbox support also allows servers to provide access to shared and public folders.</p>
<p><a id="Server-side_searches" name="Server-side_searches"></a></p>
<h3><span class="mw-headline">Server-side searches</span></h3>
<p>IMAP4 provides a mechanism for a client to ask the server to search for messages meeting a variety of criteria. This mechanism avoids requiring clients to download every message in the mailbox in order to perform these searches.</p>
<p><a id="Built-in_extension_mechanism" name="Built-in_extension_mechanism"></a></p>
<h3><span class="mw-headline">Built-in extension mechanism</span></h3>
<p>Reflecting the experience of earlier Internet protocols, IMAP4 defines an explicit mechanism by which it may be extended. Many <a class="new" title="IMAP4 extension (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=IMAP4_extension&amp;action=edit&amp;redlink=1">extensions</a> to the base protocol have been proposed and are in common use. IMAP2bis did not have an extension mechanism, and POP3 now has one defined by <strong><a class="external" title="http://tools.ietf.org/html/rfc2449" href="http://tools.ietf.org/html/rfc2449">RFC 2449</a></strong>.</p>
<p><a id="Disadvantages_of_IMAP" name="Disadvantages_of_IMAP"></a></p>
<h2><span class="mw-headline">Disadvantages of IMAP</span></h2>
<p>While IMAP remedies many of the shortcomings of POP, this inherently introduces additional complexity. Much of this complexity (e.g., multiple clients accessing the same mailbox at the same time) is compensated for by <a title="Server-side" href="http://en.wikipedia.org/wiki/Server-side">server-side</a> workarounds such as <a title="Maildir" href="http://en.wikipedia.org/wiki/Maildir">maildir</a> or database backends.</p>
<p>Unless the mail store and searching algorithms on the server are carefully implemented, a client can potentially consume large amounts of server resources when searching massive mailboxes.</p>
<p>IMAP4 clients need to explicitly request new email message content potentially causing additional delays on slow connections such as those commonly used by mobile devices. A private proposal, <a title="Push-IMAP" href="http://en.wikipedia.org/wiki/Push-IMAP">push IMAP</a>, would extend IMAP to implement <a title="Push e-mail" href="http://en.wikipedia.org/wiki/Push_e-mail">push e-mail</a> by sending the entire message instead of just a notification. However, push IMAP has not been generally accepted and current IETF work has addressed the problem in other ways (see the <a title="Lemonade Profile" href="http://en.wikipedia.org/wiki/Lemonade_Profile">Lemonade Profile</a> for more information).</p>
<p>Unlike some proprietary protocols which combine sending and retrieval operations, sending a message and saving a copy in a server-side folder with a base-level IMAP client requires transmitting the message content twice, once to SMTP for delivery and a second time to IMAP to store in a sent mail folder. This is remedied by a set of extensions defined by the IETF LEMONADE Working Group for mobile devices: URLAUTH (<strong><a class="external" title="http://tools.ietf.org/html/rfc4467" href="http://tools.ietf.org/html/rfc4467">RFC 4467</a></strong>) and CATENATE (<strong><a class="external" title="http://tools.ietf.org/html/rfc4469" href="http://tools.ietf.org/html/rfc4469">RFC 4469</a></strong>) in IMAP and BURL (<strong><a class="external" title="http://tools.ietf.org/html/rfc4468" href="http://tools.ietf.org/html/rfc4468">RFC 4468</a></strong>) in SMTP-SUBMISSION. POP3 servers don&#8217;t support server-side folders so clients have no choice but to store sent items on the client. Many IMAP clients can be configured to store sent mail in a client-side folder. In addition to the LEMONADE &#8220;trio&#8221;, <a title="Courier Mail Server" href="http://en.wikipedia.org/wiki/Courier_Mail_Server">Courier Mail Server</a> offers a non-standard method of sending using IMAP by copying an outgoing message to a dedicated outbox folder.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/radhakrishnak.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/radhakrishnak.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/radhakrishnak.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/radhakrishnak.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/radhakrishnak.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/radhakrishnak.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/radhakrishnak.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/radhakrishnak.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=20&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://radhakrishnak.wordpress.com/2008/12/23/imap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/221205546f7a418e9be80192c148d2aa?s=96&#38;d=identicon" medium="image">
			<media:title type="html">radhakrishnak</media:title>
		</media:content>
	</item>
		<item>
		<title>What is RAID ?</title>
		<link>http://radhakrishnak.wordpress.com/2008/12/23/what-is-raid/</link>
		<comments>http://radhakrishnak.wordpress.com/2008/12/23/what-is-raid/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 04:59:39 +0000</pubDate>
		<dc:creator>radhakrishnak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://radhakrishnak.wordpress.com/?p=16</guid>
		<description><![CDATA[What does RAID stand for ?In 1987, Patterson, Gibson and Katz at the University of California Berkeley, published a paper entitled &#8220;A Case for Redundant Arrays of Inexpensive Disks (RAID)&#8221; . This paper described various types of disk arrays, referred to by the acronym RAID. The basic idea of RAID was to combine multiple small, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=16&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.staff.uni-mainz.de/neuffer/scsi/pics/what_is_raid.gif" alt="What is RAID ?" align="center" /></p>
<hr />
<ol type="1">
<li><strong> What does RAID stand for ?</strong>In 1987, Patterson, Gibson and Katz at the University of California  Berkeley, published a paper entitled &#8220;A Case for Redundant Arrays of  Inexpensive Disks (RAID)&#8221; .  This paper described various types of disk arrays, referred to by  the acronym RAID. The basic idea of RAID was to combine multiple small,  inexpensive disk drives into an array of disk drives which yields performance exceeding that of a Single Large Expensive Drive (SLED). Additionally, this  array of drives appears to the computer as a single logical storage unit or  drive.The Mean Time Between Failure (MTBF) of the array will be equal to the MTBF of an individual drive, divided by the number of drives in the array. Because  of this, the MTBF of an array of drives would be too low for many application  requirements. However, disk arrays can be made fault-tolerant by redundantly  storing information in various ways.Five types of array architectures, RAID-1 through RAID-5, were defined by the Berkeley paper, each providing disk fault-tolerance and each offering different trade-offs in features and performance. In addition to these five redundant array architectures, it has become popular to refer to a non-redundant array of disk drives as a RAID-0 array.</li>
<li><strong> Data Striping</strong>Fundamental to RAID is &#8220;striping&#8221;, a method of concatenating multiple  drives into one logical storage unit. Striping involves partitioning each  drive&#8217;s storage space into stripes which may be as small as one sector (512  bytes) or as large as several megabytes. These stripes are then interleaved  round-robin, so that the combined space is composed alternately of stripes  from each drive. In effect, the storage space of the drives is shuffled like  a deck of cards. The type of application environment, I/O or data intensive,  determines whether large or small stripes should be used.Most multi-user operating systems today, like NT, Unix and Netware, support overlapped disk I/O operations across multiple drives. However, in order to  maximize throughput for the disk subsystem, the I/O load must be balanced  across all the drives so that each drive can be kept busy as much as possible. In a multiple drive system without striping, the disk I/O load is never  perfectly balanced. Some drives will contain data files which are frequently  accessed and some drives will only rarely be accessed. In I/O intensive  environments, performance is optimized by striping the drives in the array  with stripes large enough so that each record potentially falls entirely  within one stripe. This ensures that the data and I/O will be evenly  distributed across the array, allowing each drive to work on a different I/O  operation, and thus maximize the number of simultaneous I/O operations which can be performed by the array.In data intensive environments and single-user systems which access large  records, small stripes (typically one 512-byte sector in length) can be used  so that each record will span across all the drives in the array, each drive  storing part of the data from the record. This causes long record accesses to  be performed faster, since the data transfer occurs in parallel on multiple  drives. Unfortunately, small stripes rule out multiple overlapped I/O  operations, since each I/O will typically involve all drives. However,  operating systems like DOS which do not allow overlapped disk I/O, will not  be negatively impacted. Applications such as on-demand video/audio, medical  imaging and data acquisition, which utilize long record accesses, will  achieve optimum performance with small stripe arrays.A potential drawback to using small stripes is that synchronized spindle  drives are required in order to keep performance from being degraded when  short records are accessed. Without synchronized spindles, each drive in the  array will be at different random rotational positions. Since an I/O cannot be completed until every drive has accessed its part of the record, the drive  which takes the longest will determine when the I/O completes. The more drives in the array, the more the average access time for the array approaches the  worst case single-drive access time. Synchronized spindles assure that every  drive in the array reaches its data at the same time. The access time of the array will thus be equal to the average access time of a single drive  rather than approaching the worst case access time.</li>
<li><strong> The different RAID levels</strong>
<dl>
<dt>RAID-0 </dt>
<dd>RAID Level 0 is not redundant, hence does not truly fit the &#8220;RAID&#8221;        acronym. In level 0, data is split across drives, resulting in higher        data throughput. Since no redundant information is stored, performance        is very good, but the failure of any disk in the array results in data        loss. This level is commonly referred to as striping. </dd>
<dt>RAID-1 </dt>
<dd>RAID Level 1 provides redundancy by writing all data to two or more        drives. The performance of a level 1 array tends to be faster on reads        and slower on writes compared to a single drive,        but if either drive fails, no data is lost.        This is a good entry-level redundant system, since only two drives are        required; however, since one drive is used to store a duplicate of the        data, the cost per megabyte is high. This level is commonly referred to        as mirroring. </dd>
<dt>RAID-2 </dt>
<dd>RAID Level 2, which uses Hamming error correction codes, is intended        for use with drives which do not have built-in error detection. All        SCSI drives support built-in error detection, so this level is of        little use when using SCSI drives. </dd>
<dt>RAID-3 </dt>
<dd>RAID Level 3 stripes data at a byte level across several drives, with        parity stored on one drive. It is otherwise similar to level 4.        Byte-level striping requires hardware support for efficient use. </dd>
<dt>RAID-4 </dt>
<dd>RAID Level 4 stripes data at a block level across several drives, with        parity stored on one drive. The parity information allows recovery from        the failure of any single drive. The performance of a level 4 array is        very good for reads (the same as level 0). Writes, however, require that        parity data be updated each time. This slows small random writes, in        particular, though large writes or sequential writes are fairly fast.        Because only one drive in the array stores redundant data, the cost per        megabyte of a level 4 array can be fairly low. </dd>
<dt>RAID-5 </dt>
<dd>RAID Level 5 is similar to level 4, but distributes parity among the        drives. This can speed small writes in multiprocessing systems, since        the parity disk does not become a bottleneck. Because parity data must        be skipped on each drive during reads, however, the performance for        reads tends to be considerably lower than a level 4 array. The cost per        megabyte is the same as for level 4. </dd>
</dl>
<ul><strong>Summary:</strong></p>
<li>RAID-0 is the fastest and most efficient array type but offers no  fault-tolerance.</li>
<li>RAID-1 is the array of choice for performance-critical, fault-tolerant  environments. In addition, RAID-1 is the only choice for fault-tolerance if no more than two drives are desired.</li>
<li>RAID-2 is seldom used today since ECC is embedded in almost all modern  disk drives.</li>
<li>RAID-3 can be used in data intensive or single-user environments which  access long sequential records to speed up data transfer. However, RAID-3 does not allow multiple I/O operations to be overlapped and requires  synchronized-spindle drives in order to avoid performance degradation with short records.</li>
<li>RAID-4 offers no advantages over RAID-5 and does not support multiple  simultaneous write operations.</li>
<li>RAID-5 is the best choice in multi-user environments which are not write  performance sensitive. However, at least three, and more typically five drives are required for RAID-5 arrays.</li>
</ul>
</li>
<li><strong> Possible aproaches to RAID </strong>
<ul>
<li>Hardware RAID<br />
The hardware based system manages the RAID subsystem independently        from the host and presents to the host only a single disk per RAID       array. This way the host doesn&#8217;t have to be aware of the RAID        subsystems(s).</p>
<ul>
<li> The controller based hardware solution<br />
DPT&#8217;s SCSI controllers are a good example for a controller based RAID  	 solution.<br />
The intelligent contoller manages the RAID subsystem independently           from the host. The advantage over an external SCSI&#8212;SCSI RAID           subsystem is that the contoller is able to span the RAID subsystem          over multiple SCSI channels and and by this remove the limiting           factor external RAID solutions have: The transfer rate over the           SCSI bus.</li>
<li> The external hardware solution (SCSI&#8212;SCSI RAID)<br />
An external RAID box moves all RAID handling &#8220;intelligence&#8221; into a          contoller that is sitting in the external disk subsystem.           The whole subsystem is connected to the host via a normal           SCSI controller and apears to the host as a single or multiple  	 disks.<br />
This solution has drawbacks compared to the contoller based solution:          The single SCSI channel used in this solution creates a bottleneck.<br />
Newer technologies like Fiber Channel can ease this problem,  	 especially if they allow to trunk multiple channels into a Storage  	 Area Network.<br />
4 SCSI drives can already completely flood a parallel SCSI bus, since  	 the average transfer size is around 4KB and the command transfer  	 overhead &#8211; which is even in Ultra SCSI still done asynchonously &#8211;  	 takes most of the bus time.</li>
</ul>
</li>
<li>Software RAID
<ul>
<li> The MD driver in the Linux kernel is an example of a RAID solution           that is completely hardware independent.<br />
The Linux MD driver supports currently RAID levels 0/1/4/5 + linear           mode.</li>
<li> Under Solaris you have the Solstice DiskSuite and Veritas 	 Volume Manager which offer RAID-0/1 and 5.</li>
<li> Adaptecs AAA-RAID controllers are another example, they have no RAID  	 functionality whatsoever on the controller, they depend on external  	 drivers to provide all external RAID functionality.<br />
They are basically only multiple single AHA2940 controllers which  	 have been integrated on one card. Linux detects them as AHA2940 and  	 treats them accordingly.<br />
Every OS needs its own special driver for this type of RAID solution, 	 this is error prone and not very compatible.</li>
</ul>
</li>
<li>Hardware vs. Software RAID<br />
Just like any other application, software-based arrays occupy host  	system memory, consume CPU cycles and are operating system dependent.  	By contending with other applications that are running 	concurrently for host CPU cycles and memory, software-based arrays  	degrade overall server performance. Also, unlike hardware-based arrays, 	the performance of a software-based array is directly dependent on  	server CPU performance and load.Except for the array functionality, hardware-based RAID schemes  	have very little in common with software-based implementations. Since  	the host CPU can execute user applications while the array adapter&#8217;s  	processor simultaneously executes the array functions, the result is  	true hardware multi-tasking. Hardware arrays also do not occupy any  	host system memory, nor are they operating system dependent.</p>
<p>Hardware arrays are also highly fault tolerant. Since the array  	logic is based in hardware, software is NOT required to boot. Some  	software arrays, however, will fail to boot if the boot drive in the 	array fails. For example, an array implemented in software can only be 	functional when the array software has been read from the disks and is 	memory-resident. What happens if the server can&#8217;t load the array  	software because the disk that contains the fault tolerant software  	has failed? Software-based implementations commonly require a  	separate boot drive, which is NOT included in the array.</li>
</ul>
</li>
<li> What are the advantages of a multichannel contoller ?</li>
<li> Hardware vs. Software caching ?</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/radhakrishnak.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/radhakrishnak.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/radhakrishnak.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/radhakrishnak.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/radhakrishnak.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/radhakrishnak.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/radhakrishnak.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/radhakrishnak.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=16&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://radhakrishnak.wordpress.com/2008/12/23/what-is-raid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/221205546f7a418e9be80192c148d2aa?s=96&#38;d=identicon" medium="image">
			<media:title type="html">radhakrishnak</media:title>
		</media:content>

		<media:content url="http://www.staff.uni-mainz.de/neuffer/scsi/pics/what_is_raid.gif" medium="image">
			<media:title type="html">What is RAID ?</media:title>
		</media:content>
	</item>
		<item>
		<title>Install packages on Linux using yum</title>
		<link>http://radhakrishnak.wordpress.com/2008/12/16/install-packages-on-linux-using-yum/</link>
		<comments>http://radhakrishnak.wordpress.com/2008/12/16/install-packages-on-linux-using-yum/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 05:24:33 +0000</pubDate>
		<dc:creator>radhakrishnak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://radhakrishnak.wordpress.com/?p=12</guid>
		<description><![CDATA[Cleaning of the system. Yum leaves as result of its use heads and packages RPM stored in the interior of the directory located in the route /var/cache/yum/. Particularly the packages RPM that have settled can occupy much space and is by such reason agrees to eliminate them once no longer they have utility. Also it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=12&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cleaning of the system.</p>
<p>Yum leaves as result of its use heads and packages RPM stored in the interior of the directory located in the route /var/cache/yum/. Particularly the packages RPM that have settled can occupy much space and is by such reason agrees to eliminate them once no longer they have utility. Also it agrees to do the same with the old heads of packages that no longer are in the data base. In order to make the corresponding cleaning, the following thing can be executed:</p>
<div style="margin:5px 20px 20px;">
<div class="smallfont" style="margin-bottom:2px;">Code:</div>
<pre class="alt2" style="border:1px inset;overflow:auto;width:640px;height:34px;text-align:left;margin:0;padding:6px;"> yum clean all</pre>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/radhakrishnak.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/radhakrishnak.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/radhakrishnak.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/radhakrishnak.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/radhakrishnak.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/radhakrishnak.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/radhakrishnak.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/radhakrishnak.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=12&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://radhakrishnak.wordpress.com/2008/12/16/install-packages-on-linux-using-yum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/221205546f7a418e9be80192c148d2aa?s=96&#38;d=identicon" medium="image">
			<media:title type="html">radhakrishnak</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://radhakrishnak.wordpress.com/2008/11/21/hello-world/</link>
		<comments>http://radhakrishnak.wordpress.com/2008/11/21/hello-world/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 13:34:24 +0000</pubDate>
		<dc:creator>radhakrishnak</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[Yum]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging! Compiling Linux kernel Step # 1 Get Latest Linux kernel code Visit http://kernel.org/ and download the latest source code. File name would be linux-x.y.z.tar.bz2, where x.y.z is actual version number. For example file inux-2.6.25.tar.bz2 represents 2.6.25 kernel version. Use wget [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=1&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="http://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<p><em><strong>Compiling Linux kernel</strong></em></p>
<h2>Step # 1 Get Latest Linux kernel code</h2>
<p>Visit <a href="http://kernel.org/">http://kernel.org/</a> and download the latest source code. File name would be linux-x.y.z.tar.bz2, where x.y.z is actual version number. For example file inux-2.6.25.tar.bz2 represents 2.6.25 kernel version. Use wget command to download kernel source code:<br />
<code>$ cd /tmp<br />
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-x.y.z.tar.bz2</code></p>
<p>Note: Replace  x.y.z with actual version number.</p>
<h2>Step # 2 Extract tar (.tar.bz3) file</h2>
<p>Type the following command:<br />
<code># tar -xjvf linux-2.6.25.tar.bz2 -C /usr/src<br />
# cd /usr/src</code></p>
<h2>Step # 3 Configure kernel</h2>
<p>Before you configure kernel make sure you have development tools (gcc compilers and related tools) are installed on your system. If gcc compiler and tools are not installed then use apt-get command under Debian Linux to install development tools.<br />
<code># apt-get install gcc </code></p>
<p>Now you can start kernel configuration  by typing any one of the command:</p>
<ul>
<li><strong>$ make menuconfig</strong> &#8211; Text based color menus, radiolists &amp; dialogs. This option also useful on remote server if you wanna compile kernel remotely.</li>
<li><strong>$ make xconfig</strong> &#8211;  X windows (Qt) based configuration tool, works best under KDE desktop</li>
<li><strong>$ make gconfig</strong> &#8211;  X windows (Gtk) based configuration tool, works best under Gnome Dekstop.</li>
</ul>
<p>For example  make menuconfig command launches following screen:<br />
<code>$ make menuconfig</code></p>
<p>You have to select different options as per your need. Each configuration option has HELP button associated with it so select help button to get help.</p>
<h2>Step # 4 Compile kernel</h2>
<p>Start compiling to create a  compressed kernel image, enter:<br />
<code>$ make</code><br />
Start compiling to kernel modules:<br />
<code>$  make modules </code></p>
<p>Install kernel modules  (become a root user, use su command):<br />
<code>$  su -<br />
#  make modules_install<br />
</code></p>
<h2>Step # 5 Install kernel</h2>
<p>So far we have compiled kernel and installed kernel modules. It is time to install kernel itself.<br />
<code># make install </code></p>
<p>It will install three files into /boot directory as well as modification to your kernel grub configuration file:</p>
<ul>
<li>System.map-2.6.25</li>
<li>config-2.6.25</li>
<li>vmlinuz-2.6.25</li>
</ul>
<h2>Step # 6: Create an initrd image</h2>
<p>Type the following command at a shell prompt:<br />
<code># cd /boot<br />
# mkinitrd -o initrd.img-2.6.25 2.6.25</code></p>
<p>initrd images contains device driver which needed to load rest of the operating system later on. Not all computer requires initrd, but it is safe to create one.</p>
<h2>Step # 7 Modify Grub configuration file &#8211; /boot/grub/menu.lst</h2>
<p>Open file using vi:<br />
<code># vi /boot/grub/menu.lst</code></p>
<pre>title           Debian GNU/Linux, kernel 2.6.25 Default
root            (hd0,0)
kernel          /boot/vmlinuz root=/dev/hdb1 ro
initrd          /boot/initrd.img-2.6.25
savedefault
boot</pre>
<p>Remember to setup correct root=/dev/hdXX device. Save and close the file. If you think editing and writing all lines by hand is too much for you, try out update-grub command to update the lines for each kernel in /boot/grub/menu.lst file. Just type the command:<br />
<code># update-grub</code><br />
Neat. Huh?</p>
<h2>Step # 8 : Reboot computer and boot into your new kernel</h2>
<p>Just issue reboot command:</p>
<p><code># reboot</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/radhakrishnak.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/radhakrishnak.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/radhakrishnak.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/radhakrishnak.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/radhakrishnak.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/radhakrishnak.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/radhakrishnak.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/radhakrishnak.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=radhakrishnak.wordpress.com&amp;blog=5598468&amp;post=1&amp;subd=radhakrishnak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://radhakrishnak.wordpress.com/2008/11/21/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/221205546f7a418e9be80192c148d2aa?s=96&#38;d=identicon" medium="image">
			<media:title type="html">radhakrishnak</media:title>
		</media:content>
	</item>
	</channel>
</rss>
