<?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/"
	>

<channel>
	<title>Security Blog &#187; Linux Hacking</title>
	<atom:link href="http://www.insecure.ro/category/linux-hacking/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.insecure.ro</link>
	<description>It's all about Security - Security Blog -</description>
	<lastBuildDate>Mon, 24 May 2010 08:30:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Metasploit 3.3 a fost LANSAT!</title>
		<link>http://www.insecure.ro/news/metasploit-3-3-a-fost-lansat/</link>
		<comments>http://www.insecure.ro/news/metasploit-3-3-a-fost-lansat/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 13:39:43 +0000</pubDate>
		<dc:creator>inSecure</dc:creator>
				<category><![CDATA[Exploits]]></category>
		<category><![CDATA[General Hacking]]></category>
		<category><![CDATA[General News]]></category>
		<category><![CDATA[Hacking Tools]]></category>
		<category><![CDATA[Linux Hacking]]></category>
		<category><![CDATA[Security Software]]></category>
		<category><![CDATA[Windows Hacking]]></category>

		<guid isPermaLink="false">http://www.insecure.ro/?p=236</guid>
		<description><![CDATA[S-a lansat versiunea 3.3 Metasploit!(2009-11-30) Ce este Metasploit ? Metasploit este o unealta open source de testare a vulnerabilitatii unui Server/PC. Are exploit-uri predefinite, si este o unealta de vis pentru orice &#8216;script-kiddie&#8217;. Mai jos am pus o descriere in engleza. The Metasploit Framework is a development platform for creating security tools and exploits. The [...]]]></description>
			<content:encoded><![CDATA[<p>S-a lansat versiunea 3.3 <strong>Metasploit</strong>!(2009-11-30)<br />
<strong>Ce este Metasploit ?</strong></p>
<p>Metasploit este o unealta open source de testare a vulnerabilitatii unui Server/PC. Are exploit-uri predefinite, si este o unealta de vis pentru orice &#8216;script-kiddie&#8217;. </p>
<p>Mai jos am pus o descriere in engleza.</p>
<p><em>The Metasploit Framework is a development platform for creating security tools and exploits. The framework is used by network security professionals to perform penetration tests, system administrators to verify patch installations, product vendors to perform regression testing, and security researchers world-wide. The framework is written in the Ruby programming language and includes components written in C and assembler.</em></p>
<p>Metasploit v3.3 il puteti gasi aici:</p>
<p>Windows – <strong><a href="http://www.metasploit.com/releases/framework-3.3.exe">Metasploit-3.3.exe</a></strong><br />
Linux – <strong><a href="http://www.metasploit.com/releases/framework-3.3.tar.bz2">Metasploit-3.3.tar.bz2</a></strong></p>
<p>Detalii cu functionalitati: <strong><a href="http://www.metasploit.com/redmine/projects/framework/wiki/Release_Notes_33">Metasploit Release Notes</a></strong><br />
Homepage: <strong><a href="http://www.metasploit.com/">Metasploit.com</a></strong><br />
<a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/468x60e.gif' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insecure.ro/news/metasploit-3-3-a-fost-lansat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Websecurify – Web Security Testing Framework</title>
		<link>http://www.insecure.ro/windows-hacking/websecurify-%e2%80%93-web-security-testing-framework/</link>
		<comments>http://www.insecure.ro/windows-hacking/websecurify-%e2%80%93-web-security-testing-framework/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 10:55:03 +0000</pubDate>
		<dc:creator>inSecure</dc:creator>
				<category><![CDATA[General Hacking]]></category>
		<category><![CDATA[Hacking Tools]]></category>
		<category><![CDATA[Linux Hacking]]></category>
		<category><![CDATA[Security Software]]></category>
		<category><![CDATA[Web Hacking]]></category>
		<category><![CDATA[Windows Hacking]]></category>
		<category><![CDATA[auditing]]></category>
		<category><![CDATA[hacking tool]]></category>
		<category><![CDATA[Websecurify]]></category>

		<guid isPermaLink="false">http://www.insecure.ro/?p=204</guid>
		<description><![CDATA[Websecurify – Web Security Testing Framework Ce este Websecurify? Websecurify este o initiativa de auditare a aplicatiilor web. Acest tool poate fi folosit atat pentru ataca cat si audita o aplicatie web. Este compatibil atat cu Windows si Linux cat si MAC!(printre primele ce functioneaza si pe Mac). Cum functioneaza? JavaScript – Websecurify Security Testing [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Websecurify – Web Security Testing Framework</strong></p>
<p><strong>Ce este Websecurify?</strong></p>
<p>Websecurify este o initiativa de auditare a aplicatiilor web. Acest tool poate fi folosit atat pentru ataca cat si audita o aplicatie web.<br />
Este compatibil atat cu Windows si Linux cat si MAC!(printre primele ce functioneaza si pe Mac).</p>
<p><strong>Cum functioneaza?</strong></p>
<p><strong>JavaScript</strong> – Websecurify Security Testing Framework is the first tool of its kind to be written entirely in JavaScript using only standard technologies adopted by the leading browsers.<br />
<strong>Multiple Environments</strong> – The core technology can run in normal browsers, xulrunner, xpcshell (command line), inside Java or as part of a custom V8 (Chrome’s JavaScript Engine) build. The core is written with extensibility in mind so that more environments can be supported without changing even a single line of code.<br />
<strong>Multi-platform </strong>– The tool is available and successfully runs on Windows, Mac OS, Linux and other operating systems.<br />
<strong>Automatic Updates</strong> – Every single piece of the tool is subjected to automatic updates. This means that newer and more advanced versions of the tool can be shipped to your front door without you lifting your finger. This however is completely optional. The automatic update can be turned off if needed.<br />
<strong>Extensions </strong>– Because the tool comes wrapped in xulrunner by default (keep in mind that we can support any other JavaScript environment) we benefit from all cool features that Firefox has, such as extensions. Extensions are easy to write and maintain and can customize every single aspect of the tool and there are already tones of resources and documentation, including books and what not, out there to teach you exactly how to do that. We will be providing documentation as well.</p>
<p><strong>Download:</strong><br />
Windows – <strong><a href="http://websecurify.googlecode.com/files/Websecurify%200.3.exe">Websecurify 0.3.exe</a></strong><br />
Linux – <strong><a href="http://websecurify.googlecode.com/files/Websecurify%200.3.tgz">Websecurify 0.3.tgz</a></strong><br />
Mac – <strong><a href="http://websecurify.googlecode.com/files/Websecurify%200.3.dmg">Websecurify 0.3.dmg</a></strong><br />
<a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/468x60e.gif' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insecure.ro/windows-hacking/websecurify-%e2%80%93-web-security-testing-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programare in Linux Utilizarea Sistemelor de Operare</title>
		<link>http://www.insecure.ro/linux-hacking/programare-in-linux-utilizarea-sistemelor-de-operare/</link>
		<comments>http://www.insecure.ro/linux-hacking/programare-in-linux-utilizarea-sistemelor-de-operare/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 10:11:45 +0000</pubDate>
		<dc:creator>inSecure</dc:creator>
				<category><![CDATA[Linux Hacking]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[bootare]]></category>
		<category><![CDATA[compilare]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[editoare text]]></category>
		<category><![CDATA[executie]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[GNU Make]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Linux Install]]></category>
		<category><![CDATA[Makefile]]></category>
		<category><![CDATA[Netiquette]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[Retelistica]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[securitate]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[servicii]]></category>
		<category><![CDATA[shell scripting]]></category>
		<category><![CDATA[Windows Hacking]]></category>
		<category><![CDATA[xwindows]]></category>

		<guid isPermaLink="false">http://www.insecure.ro/articole/programare-in-linux-utilizarea-sistemelor-de-operare/</guid>
		<description><![CDATA[Cuprins 1. Notiuni de baza&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;4 1.1. IDE = Integrated Development Environment&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.4 1.2. Debugger ? gdb ? The GNU Debugger&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.4 1.3. Debug symbols&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..4 1.4. Version Control&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..4 1.5. ANSI C&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..5 1.6. Core file&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;5 2. Debugging in Linux&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;5 2.1. Notiuni generale&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.5 2.2. Debugging ?pasiv? (folosind core files)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.7 2.3. Debugging ?activ?&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;10 3. Detectia memory leak-urilor&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.12 3.1. Notiuni introductive&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.12 3.2. [...]]]></description>
			<content:encoded><![CDATA[<p>Cuprins </p>
<p>1. Notiuni de baza&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;4<br />
1.1. IDE = Integrated Development Environment&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.4<br />
1.2. Debugger ? gdb ? The GNU Debugger&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.4<br />
1.3. Debug symbols&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..4<br />
1.4. Version Control&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..4<br />
1.5. ANSI C&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..5<br />
1.6. Core file&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;5<br />
2. Debugging in Linux&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;5<br />
2.1. Notiuni generale&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.5<br />
2.2. Debugging ?pasiv? (folosind core files)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.7<br />
2.3. Debugging ?activ?&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;10<br />
3. Detectia memory leak-urilor&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.12<br />
3.1. Notiuni introductive&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.12<br />
3.2. Valgrind&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.12<br />
4. Utilizarea file descriptor-ilor&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..15<br />
4.1. Terminologie&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.15<br />
4.2. File descriptor-i standard&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..15<br />
4.3. De ce nu facem piping mereu?&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.16<br />
4.4. De ce sa folosim toti file descriptor-ii standard?&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.16<br />
4.5. Exemplu de utilizare a file descriptor-ilor standard intr-un program&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.16<br />
4.6. Exemple de utilizare a programului&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;17<br />
5. Pipe-uri cu nume&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..18<br />
5.1. Notiuni introductive&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.18<br />
5.2. ?Viata? pipe-urilor cu nume&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..18<br />
5.3. Utilizarea pipe-urilor cu nume&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..19<br />
6. Patch-uri&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.20<br />
6.1. Diff&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..20<br />
6.2. Patch&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..22<br />
6.3. Diferente intre directoare&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..23<br />
Versiune: 1.1/2006-11-24 Pagina 2/23<br />
<!-- Begin: AdBrite, Generated: 2008-09-26 8:20:44  --><br />
<script type="text/javascript">
var AdBrite_Title_Color = '0000FF';
var AdBrite_Text_Color = '000000';
var AdBrite_Background_Color = 'FFFFFF';
var AdBrite_Border_Color = 'CCCCCC';
var AdBrite_URL_Color = '008000';
try{var AdBrite_Iframe=window.top!=window.self?2:1;var AdBrite_Referrer=document.referrer==''?document.location:document.referrer;AdBrite_Referrer=encodeURIComponent(AdBrite_Referrer);}catch(e){var AdBrite_Iframe='';var AdBrite_Referrer='';}
</script><br />
<span style="white-space:nowrap;"><script type="text/javascript">document.write(String.fromCharCode(60,83,67,82,73,80,84));document.write(' src="http://ads.adbrite.com/mb/text_group.php?sid=860821&#038;zs=3436385f3630&#038;ifr='+AdBrite_Iframe+'&#038;ref='+AdBrite_Referrer+'" type="text/javascript">');document.write(String.fromCharCode(60,47,83,67,82,73,80,84,62));</script><br />
<a target="_top" href="http://www.adbrite.com/mb/commerce/purchase_form.php?opid=860821&#038;afsid=1"><img src="http://files.adbrite.com/mb/images/adbrite-your-ad-here-banner.gif" style="background-color:#CCCCCC;border:none;padding:0;margin:0;" alt="Your Ad Here" width="11" height="60" border="0" /></a></span><br />
<!-- End: AdBrite --><br />
<span id="more-29"></span></p>
<p>Lista de modificari:<br />
2005-11-21 v1.0 first release<br />
2005-11-23 v1.0.1 spelling mistakes fixes, small rephrasings<br />
2006-10-03 v1.0.2 revision<br />
2006-11-24 v1.1. import Patch/Diff din laboratorul de Compilare (uso2005) </p>
<p>Acest laborator are ca scop familiarizarea studentilor cu unelte de programare si tehnici de<br />
debugging/code-proofing in sistemul de operare Linux. </p>
<p>Pachete Debian ce trebuie instalate: </p>
<p>?<br />
gcc<br />
?<br />
g++<br />
?<br />
libc6-dev<br />
?<br />
file<br />
?<br />
gdb<br />
?<br />
valgrind<br />
?<br />
patch<br />
?<br />
diff </p>
<p>1. Notiuni de baza<br />
1.1. IDE = Integrated Development Environment<br />
Mediile de dezvoltare integrate (IDE) sunt aplicatii complexe utilizate de catre programatori,<br />
aplicatii care ofera acces la unelte precum: </p>
<p>?<br />
editor de cod (cu syntax highlight, code folding, code completion etc.)<br />
?<br />
contextual help ? ofera help adecvat contextului (informatii despre functia selectata in<br />
prezent etc.)<br />
?<br />
acces facil la un compilator<br />
?<br />
debugger ? utilizat pentru detectarea bug-urilor din programe (rulare pas cu pas,<br />
watches, call stack etc.)<br />
?<br />
project manager ? utilizat pentru managementul proiectului (adaugat surse, configurat<br />
parametrii de compilare, editat automat fisiere Makefile etc.)<br />
?<br />
version control (code revisions) ? functie utilizata pentru lucrul cu mai multe versiuni,<br />
pe mai multe ramuri de dezvoltare etc.<br />
Exemple de IDE-uri: </p>
<p>?<br />
Windows: Microsoft Visual Studio, DevC++ (http://www.bloodshed.net/)<br />
?<br />
Linux: Kdevelop, Anjuta<br />
More info: http://en.wikipedia.org/wiki/Integrated_development_environment </p>
<p>1.2. Debugger ? gdb ? The GNU Debugger<br />
Debugger-ul consacrat in Linux este gdb. Este o aplicatie foarte puternica, cu foarte multe<br />
functii. Deoarece lucrul cu acesta nu este tocmai ?placut?, au aparut numeroase front-end-uri<br />
pentru GDB, GDB-ul fiind integrat chiar si in IDE-uri. Aceste front-end-uri au profitat de<br />
intercomunicarea inter-procese si au ?imbracat? GDB-ul intr-o interfata placuta utilizatorului. </p>
<p>More info: http://en.wikipedia.org/wiki/Debugger </p>
<p>1.3. Debug symbols<br />
Simbolurile pentru debug (debug symbols) sunt informatii ce sunt incluse la compilare in<br />
executabilul rezultat, informatii folosite in procesul de debugging. Aceste informatii se refera in<br />
mod special la codul sursa, la simbolurile utilizate din biblioteci etc. Aceste simboluri sunt<br />
folosite de catre debugger pentru a identifica linia curenta in program, numele variabilelor etc. </p>
<p>1.4. Version Control<br />
Controlul versiunilor reprezinta managementul mai multor versiuni pentru o unitate de<br />
informatie (orice fel de informatie, nu neaparat cod). Versiunile se identifica de obicei prin<br />
revision number, revision level. Pot exista branch-uri ale unui proiect, tag-uri cu versiuni etc. </p>
<p>Versiune: 1.1/2006-11-24<br />
Pagina 4/23 </p>
<p>Sistemele de Revision Control reprezinta in prezent suportul pentru dezvoltarea majoritatii<br />
proiectelor software. </p>
<p>Exemple de software pentru managementul versiunilor:widely used: CVS, SVN (Subversion);<br />
Git (folosit in dezvoltarea kernel-ului de Linux); Darcs etc. </p>
<p>More info: </p>
<p>? </p>
<p>http://en.wikipedia.org/wiki/Revision_control</p>
<p>? </p>
<p>http://en.wikipedia.org/wiki/List_of_revision_control_software</p>
<p>1.5. ANSI C<br />
ANSI C este o versiune standard a limbajului de programare C. In programarea C este<br />
recomandata utilizarea functiilor ANSI C deoarece acestea asigura o compatibilitate crescuta<br />
intre diferite compilatoarele de C si implicit o portabilitate crescuta. </p>
<p>More info: http://en.wikipedia.org/wiki/ANSI_C </p>
<p>1.6. Core file<br />
Un fisier core (core file sau core dump) este un fisier care contine imaginea memoriei unui<br />
proces la un moment dat, de obicei imediat dupa un crash. </p>
<p>More info: http://en.wikipedia.org/wiki/Core_dump </p>
<p>2. Debugging in Linux<br />
2.1. Notiuni generale<br />
Moduri de debugging </p>
<p>?<br />
?activ? -pornind aplicatia in debugger -$ gdb comanda<br />
?<br />
?pasiv? -utilizand core files -$ gdb &#8211;core=fisier_core comanda<br />
Cele doua moduri de lucru difera in principal prin abordarea aleasa pentru debugging: </p>
<p>?<br />
Primul mod se utilizeaza pentru debugging-ul pas cu pas, cu urmarirea modificarilor<br />
unor variabile etc.<br />
?<br />
Modul al doilea este util atunci cand bug-urile sunt extrem de rare si se soldeaza cu<br />
oprirea aplicatiei. Presupunand ca o aplicatie isi inceteaza activitatea din cauza unui<br />
acces neprotejat la memorie (in acel moment SO-ul opreste executia aplicatiei), un<br />
fisier core este creat in care se salveaza starea starea aplicatiei la momentul opririi. Prin<br />
deschiderea acestui core file in gdb, se poate face o analiza ?statica? a unui bug<br />
(urmarind call stack-ul, valoarile variabilelor etc.).<br />
Debugging-ul este mult ingreunat de lipsa simbolurilor pentru debug. Acestea se activeaza la<br />
compilarea cu GCC-ul folosind parametrul -g. In mod implicit, dimensiunea executabilelor va<br />
creste deoarece simbolurile pentru debug vor fi incluse in acestea. </p>
<p>Versiune: 1.1/2006-11-24<br />
Pagina 5/23 </p>
<p>Vom lua pentru exemplificare urmatorul fisier C: </p>
<p>testfile.c<br />
#include <studio.h>;<br />
int main()<br />
{<br />
FILE *f=fopen(&quot;fisier_nou.txt&quot;,&quot;r&quot;);<br />
//if (!f) return 1;<br />
fclose(f);<br />
return 0;<br />
} </p>
<p>Il vom compila fara cu debug symbols o data (este posibil ca GCC-ul sa considere implicita<br />
optiunea -g in anumite cazuri): </p>
<p>$ gcc testfile.c -g -o testfile1<br />
$ file testfile1<br />
testfile1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for<br />
GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1,<br />
not stripped </p>
<p>Observati ca file indica faptul ca fisierul executabil include simboluri pentru debug utilizand<br />
sintagma ?not stripped?. </p>
<p>Pentru a elimina simbolurile pentru debug, se poate folosi comanda strip. </p>
<p>$ gcc testfile.c -o -g testfile2<br />
$ strip testfile2<br />
$ file testfile2<br />
testfile2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for<br />
GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1,<br />
stripped<br />
$ ls -l testfile* | grep x<br />
-rwxr-xr-x 1 root root 6957 2005-11-21 21:32 testfile1<br />
-rwxr-xr-x 1 root root 3096 2005-11-21 21:34 testfile2 </p>
<p>Se observa:<br />
?<br />
output-ul modificat al comenzii file (fisierul testfile2 nu are simboluri pentru debug ?<br />
este ?stripped?) </p>
<p>?<br />
dimensiunea fisierului fara simboluri de debug este mai mica<br />
Nota: </p>
<p>?<br />
pentru simplitatea comenzii, in compilarea de mai sus nu s-a mai utilizat parametrul<br />
-Wall ? se recomanda totusi ca, de fiecare data, cel putin in procesul de dezvoltare,<br />
compilarile sa se faca activand toate warning-urile cu acest parametru<br />
Versiune: 1.1/2006-11-24<br />
Pagina 6/23 </p>
<p>2.2. Debugging ?pasiv? (folosind core files)<br />
Pentru inceput, vom presupune ca vrem sa studiem un bug foarte rar, intr-o aplicatie cu debug<br />
symbols incluse si nu facem decat sa pornim aplicatia. Aplicatia urmeaza sa se ?crash-uiasca?<br />
la un moment dat dar, avand core files active, vom putea reface lista ultimelor apeluri<br />
efectuate si locul unde s-a produs bug-ul. </p>
<p>Pentru a activa core files-urile, vom utiliza urmatoarea comanda: </p>
<p># ulimit -c unlimited </p>
<p>ulimit este un program pentru configurarea limitelor unor anumiti parmetrii la nivelul kernelului.<br />
Modificarea acestor parametrii nu poate fi intotdeauna efectuata de catre utilizatori non-<br />
root. Printre acesti parametrii se gaseste si dimensiunea unui core file. -c unlimited specifica<br />
faptul ca vrem ca dimensiunea unui core file sa fie nelimitata. Pentru mai multe informatii<br />
despre limite, folositi comanda man ulimit. </p>
<p>Configurarea folosind comanda ulimit nu este permanenta. Pentru a face permanenta aceasta<br />
configurare se poate modifica </p>
<p>?<br />
fisierul /etc/profile prin adaugarea comenzii la sfarsitul acestuia<br />
?<br />
fisierul /etc/security/limits.conf prin adaugarea unei linii corect formatate, conforma cu<br />
specificatiile date in fisier<br />
In continuarea vom analiza modificand temporar dimensiunea maxima a unui core file. Vom<br />
realiza urmatorul test ca root (veti observa ?#? in fata comenzilor) pentru a fi sigur ca aceasta<br />
comanda va fi permisa. Vom dezactiva intai core file-ul pentru a se putea vedea diferenta pe<br />
care o introduce aceasta configurare la rulare (mai precis la crash-ul a unei aplicatii). </p>
<p># ulimit -c 0<br />
# ./testfile1<br />
Segmentation fault<br />
# ulimit -c unlimited<br />
# ./testfile1<br />
Segmentation fault (core dumped) </p>
<p>?(core dumped)? semnifica faptul ca s-a realizat o imagine a memoriei procesului in momentul<br />
in care s-a produs segmentation fault-ul. Aceasta imagine se gaseste implicit in fisierul cu<br />
numele ?core? din directorul de unde s-a pornit aplicatia. </p>
<p>Versiune: 1.1/2006-11-24<br />
Pagina 7/23 </p>
<p>Pentru a analiza fisierul core, vom proni GDB-ul cu urmatoarea comanda: </p>
<p># gdb -core=core ./testfile1<br />
GNU gdb 6.3<br />
Copyright 2004 Free Software Foundation, Inc.<br />
GDB is free software, covered by the GNU General Public License, and you are<br />
welcome to change it and/or distribute copies of it under certain conditions.<br />
Type &quot;show copying&quot; to see the conditions.<br />
There is absolutely no warranty for GDB. Type &quot;show warranty&quot; for details.<br />
This GDB was configured as &quot;i686-pc-linux-gnu&quot;&#8230;Using host libthread_db<br />
library &quot;/lib/tls/libthread_db.so.1&quot;. </p>
<p>Core was generated by `./testfile1&#039;.<br />
Program terminated with signal 11, Segmentation fault. </p>
<p>warning: current_sos: Can&#039;t read pathname for load map: Input/output error </p>
<p>Reading symbols from /lib/tls/libc.so.6&#8230;done.<br />
Loaded symbols for /lib/tls/libc.so.6<br />
Reading symbols from /lib/ld-linux.so.2&#8230;done.<br />
Loaded symbols for /lib/ld-linux.so.2<br />
#0 0xb7e1f047 in fclose@@GLIBC_2.1 () from /lib/tls/libc.so.6<br />
(gdb) bt full<br />
#0 0xb7e1f047 in fclose@@GLIBC_2.1 () from /lib/tls/libc.so.6<br />
No symbol table info available.<br />
#1 0&#215;08048412 in main () at testfile.c:7</p>
<p>f = (FILE *) 0&#215;0 </p>
<p>Pentru a iesi din GDB, se utilizeaza combinatia de taste Ctrl+D. </p>
<p>Se observa faptul ca gdb-ul, dupa pornire, afiseaza un prompt la care se pot introduce<br />
comenzi. Pentru a vedea setul de comenzi GDB, puteti introduce comanda help. Comenzile<br />
sunt impartite pe categorii. </p>
<p>Spre exemplu, pentru a afla informatii despre comenzile pentru studiul datelor, se va folosi<br />
comanda help data. Veti descoperi astfel ca exista o serie de comenzi pentru<br />
inspectia/modificarea datelor/codului. Comenzi mai uzuale sunt: print, display si set (scurt<br />
help gasiti utilizand help nume_comanda). </p>
<p>Observati de asemenea in output-ul de mai sus utilizarea comenzii bt full. bt este<br />
prescurtarea lui backtrace. GDB-ul accepta si prescurtari pentru comenzi. Backtrace intoarce<br />
lista apelurilor efectuate pana in momentul opririi (call stack-ul). In varful stivei, in frame-ul<br />
#0, gasiti apelul functiei fclose() din biblioteca de functii C. La baza stivei, in frame-ul #1,<br />
gasiti functia main() si locatia de unde s-a facut apelul catre functia fclose(). </p>
<p>Frame-ul (sau stack frame-ul) este un element din call stack (stiva apelurilor), adica o functie.<br />
Debugging-ul se poate face in frame-uri diferite deoarece, spre exemplu, fiecare frame are<br />
variabilele lui. </p>
<p>Se mai observa folosirea parametrului full impreuna cu comanda bt. Acesta induce afisarea<br />
tuturor variabilelor din fiecare frame si valorile acestora. </p>
<p>Versiune: 1.1/2006-11-24 Pagina 8/23 </p>
<p>Sa vedem ce s-ar fi intamplat daca am fi avut fisierele core active dar am fi folosit un<br />
executabil fara debug symbols (in cazul nostru testfile2). </p>
<p># ./testfile2<br />
Segmentation fault (core dumped) </p>
<p># gdb -core=core ./testfile2<br />
GNU gdb 6.3<br />
Copyright 2004 Free Software Foundation, Inc.<br />
GDB is free software, covered by the GNU General Public License, and you are<br />
welcome to change it and/or distribute copies of it under certain conditions.<br />
Type &quot;show copying&quot; to see the conditions.<br />
There is absolutely no warranty for GDB. Type &quot;show warranty&quot; for details.<br />
This GDB was configured as &quot;i686-pc-linux-gnu&quot;&#8230;(no debugging symbols found)<br />
Using host libthread_db library &quot;/lib/tls/libthread_db.so.1&quot;. </p>
<p>Core was generated by `./testfile2&#039;.<br />
Program terminated with signal 11, Segmentation fault. </p>
<p>warning: current_sos: Can&#039;t read pathname for load map: Input/output error </p>
<p>Reading symbols from /lib/tls/libc.so.6&#8230;(no debugging symbols found)&#8230;done.</p>
<p>Loaded symbols for /lib/tls/libc.so.6</p>
<p>Reading symbols from /lib/ld-linux.so.2&#8230;(no debugging symbols found)&#8230;done.</p>
<p>Loaded symbols for /lib/ld-linux.so.2</p>
<p>#0 0xb7eb2047 in fclose@@GLIBC_2.1 ()<br />
from /lib/tls/libc.so.6</p>
<p>(gdb) bt full </p>
<p>#0 0xb7eb2047 in fclose@@GLIBC_2.1 () from /lib/tls/libc.so.6</p>
<p>No symbol table info available.</p>
<p>#1 0&#215;08048412 in ?? ()</p>
<p>No symbol table info available.</p>
<p>#2 0&#215;00000000 in ?? ()</p>
<p>No symbol table info available.</p>
<p>#3 0&#215;08048508 in _IO_stdin_used ()</p>
<p>No symbol table info available.</p>
<p>#4 0xb7e88085 in __new_exitfn () from /lib/tls/libc.so.6</p>
<p>No symbol table info available.</p>
<p>#5 0xb7e71d6b in __libc_start_main () from /lib/tls/libc.so.6</p>
<p>No symbol table info available.</p>
<p>#6 0&#215;08048351 in ?? ()</p>
<p>No symbol table info available.</p>
<p>(gdb) </p>
<p># file /lib/tls/libc.so.6<br />
/lib/tls/libc.so.6: symbolic link to `libc-2.3.5.so&#039; </p>
<p># file /lib/libc-2.3.5.so<br />
/lib/libc-2.3.5.so: ELF 32-bit LSB shared object, Intel 80386, version 1<br />
(SYSV), for GNU/Linux 2.4.1, not stripped </p>
<p>Observam ca debugger-ul este oarecum ?confuz?, el nestiind simbolurile existente in executabil<br />
si nici numele unor functii. Avem totusi noroc ca biblioteca standard C include simboluri pentru<br />
debugging. Majoritatea bibliotecilor sunt compilate astfel pentru a usura debugging-ul. </p>
<p>Versiune: 1.1/2006-11-24 Pagina 9/23 </p>
<p>2.3. Debugging ?activ?<br />
Pentru o analiza pas cu pas, vom utiliza executabilul cu simboluri pentru debug. </p>
<p>$ gdb ./testfile1<br />
GNU gdb 6.3<br />
Copyright 2004 Free Software Foundation, Inc.<br />
GDB is free software, covered by the GNU General Public License, and you are<br />
welcome to change it and/or distribute copies of it under certain conditions.<br />
Type &quot;show copying&quot; to see the conditions.<br />
There is absolutely no warranty for GDB. Type &quot;show warranty&quot; for details.<br />
This GDB was configured as &quot;i686-pc-linux-gnu&quot;&#8230;Using host libthread_db<br />
library &quot;/lib/tls/libthread_db.so.1&quot;. </p>
<p>(gdb) break main<br />
Breakpoint 1 at 0x80483f0: file testfile.c, line 5. </p>
<p>Am utilizat comanda break din GDB pentru a activa un breakpoint. La rulare, programul se va<br />
opri la intalnirea unui breakpoint. In cazul nostru, am pus un breakpoint pe functia main.<br />
Breakpoint-urile se pot specifica si prin numarul line unde se doreste oprirea si pot fi (sau nu)<br />
conditionate (ex: ?break 5 a &gt; 6? = break la linia 5 daca a&gt;6). Pentru mai multe informatii<br />
utilizati comanda gdb help break. </p>
<p>Am folosit comanda run pentru a porni programul. Dupa cum ne asteptam, programul s-a<br />
intrerupt la primul breakpoint: </p>
<p>(gdb) run<br />
Starting program: /home/mircea/pub/uso/lab-testing/lab8/testfile1 </p>
<p>Breakpoint 1, main () at testfile.c:5<br />
5 FILE *f=fopen(&quot;fisier_nou.txt&quot;,&quot;r&quot;); </p>
<p>In continuare, am utilizat comanda next de doua ori pana cand a aparut bug-ul. Ca alternativa<br />
la next, se poate utiliza step. Exista o mica diferenta intre ele: comanda step intra in<br />
subrutine (face step in), pe cand next trece peste acestea (face step over). </p>
<p>(gdb) next<br />
7 fclose(f);<br />
(gdb) next </p>
<p>Program received signal SIGSEGV, Segmentation fault.<br />
0xb7eaf047 in fclose@@GLIBC_2.1 () from /lib/tls/libc.so.6 </p>
<p>Programul s-a oprit in acelasi loc ca si mai inainte. De aceasta data vom folosi o alta abordare.<br />
Vom analiza manual valorile variabilelor din contextul programului nostru. </p>
<p>Versiune: 1.1/2006-11-24 Pagina 10/23 </p>
<p>(gdb) print f<br />
No symbol &quot;f&quot; in current context.<br />
(gdb) frame<br />
#0 0xb7eaf047 in fclose@@GLIBC_2.1 () from /lib/tls/libc.so.6<br />
(gdb) frame 1<br />
#1 0&#215;08048412 in main () at testfile.c:7</p>
<p>fclose(f);<br />
(gdb) print f<br />
$1 = (FILE *) 0&#215;0<br />
(gdb) </p>
<p>Intai trebuie sa modificam frame-ul curent. Variabila f nu se gaseste in frame-ul #0. In frameul<br />
#1 (=functia main()), utilizand comanda print a GDB-ului descoperim ca variabila f este<br />
nula. </p>
<p>Dupa cum se stie si din laboratorul anterior, corectia la aceasta problema se realizeaza prin<br />
testarea variabilei f inainde de apelul functiei fclose. </p>
<p>Programul utilizat anterior devine in acest fel: </p>
<p>testfile.c </p>
<p>#include <studio.h>; </p>
<p>int main()<br />
{<br />
FILE *f=fopen(&quot;fisier_nou.txt&quot;,&quot;r&quot;);</p>
<p>if (!f) return 1;</p>
<p>fclose(f);<br />
return 0;<br />
} </p>
<p>Un tutorial extins de GDB: </p>
<p>? </p>
<p>http://www.dirac.org/linux/gdb/</p>
<p>Exercitiu de GDB (bun de asemenea ca tutorial):<br />
? </p>
<p>http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Debug.html#tth_sEc4</p>
<p>Versiune: 1.1/2006-11-24 Pagina 11/23 </p>
<p>3. Detectia memory leak-urilor<br />
3.1. Notiuni introductive<br />
Uneori, apare nefericita situatie cand un program de-al nostru incepe sa ocupe memorie fara<br />
un motiv evident. Efectul este de obicei sesizat de abia dupa ce toata memoria computerului<br />
se umple si sistemul devine instabil. </p>
<p>Situatia apare in momentul in care un programator uita sa elibereze memoria alocata dinamic<br />
pentru variabile din program. Uneori, contextul de lucru poate fi destul de complicat si numarul<br />
de variabile alocate dinamic poate ingreuna detectia acestor leak-uri. </p>
<p>3.2. Valgrind<br />
Pentru a preveni astfel de accidente, se utilizeaza programe specializate de analiza. Un astfel<br />
de program este si valgrind. </p>
<p>Valgrind este o masina virtuala in care se ruleaza programul ce urmeaza a fi analizat. In<br />
masina virtuala, programul este supus unor teste. Masina virtuala converteste codul masina al<br />
programului executat intr-un format intermediar. Ulterior, acest format este trecut printr-un<br />
tool ales de catre utilizator. In functie de complexitatea tool-ului, rularea programului poate fi<br />
incetinita foarte mult deoarece o mare parte din instructiuni trebuie interpretate. </p>
<p>?Sintaxa? pentru rularea unui program sub valgrind este urmatoarea: </p>
<p>$ valgrind ?tool=nume_tool comanda_aplicatie_cu_parametrii </p>
<p>Tool-uri disponibile in valgrind (le-am afisat folosind o sintaxa gresita pentru apelarea comenzii<br />
valgrind): </p>
<p>$ valgrind &#8211;tool=</p>
<p>Can&#039;t open tool &quot;&quot;: /usr/lib/valgrind/vgtool_.so: cannot open shared object</p>
<p>file: No such file or directory</p>
<p>valgrind: couldn&#039;t load tool</p>
<p>Available tools:<br />
memcheck<br />
addrcheck<br />
cachegrind<br />
none<br />
callgrind<br />
helgrind<br />
lackey<br />
massif </p>
<p>Versiune: 1.1/2006-11-24 Pagina 12/23 </p>
<p>Vom folosi un mic program de test: </p>
<p>leak.c<br />
#include <studio.h>;<br />
#include &lt;malloc.h&gt;<br />
int main(){<br />
int *p;<br />
int i;<br />
for (i=0;i&lt;10;i++){<br />
p=(int *)malloc(sizeof(int));<br />
*p=i*i;<br />
printf(&quot;%d &quot;,*p);<br />
}<br />
printf(&quot;<br />
&quot;);<br />
return 0;<br />
} </p>
<p>Il vom compila cu debug symbols, pentru a putea primi informatii relevante de la valgrind. </p>
<p>$ gcc leak.c -g -o leak<br />
$ ./leak<br />
0 1 4 9 16 25 36 49 64 81 </p>
<p>Am si rulat programu si am vazut ca functioneaza. Nimic suspect. </p>
<p>Exemplul de mai sus este foarte ?inocent?. In conditii reale, unde codul sursa este mult mai<br />
mare si programul se executa mai mult timp, o astfel de ?scurgere? poate fi greu detectabila si<br />
poate avea efecte nedorite. </p>
<p>Versiune: 1.1/2006-11-24 Pagina 13/23 </p>
<p>Vom rula programul ?leak? sub valgrind folosind comanda </p>
<p>$ valgrind &#8211;tool=memcheck &#8211;leak-check=full ./leak<br />
==28464== Memcheck, a memory error detector.<br />
==28464== Copyright (C) 2002-2005, and GNU GPL&#039;d, by Julian Seward et al.<br />
==28464== Using LibVEX rev 1367, a library for dynamic binary translation.<br />
==28464== Copyright (C) 2004-2005, and GNU GPL&#039;d, by OpenWorks LLP.<br />
==28464== Using valgrind-3.0.1, a dynamic binary instrumentation framework.<br />
==28464== Copyright (C) 2000-2005, and GNU GPL&#039;d, by Julian Seward et al.<br />
==28464== For more details, rerun with: -v<br />
==28464==<br />
0 1 4 9 16 25 36 49 64 81<br />
==28464==<br />
==28464== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 20 from 4)<br />
==28464== malloc/free: in use at exit: 40 bytes in 10 blocks.<br />
==28464== malloc/free: 10 allocs, 0 frees, 40 bytes allocated.<br />
==28464== For counts of detected errors, rerun with: -v<br />
==28464== searching for pointers to 10 not-freed blocks.<br />
==28464== checked 69632 bytes.<br />
==28464==<br />
==28464== 40 bytes in 10 blocks are definitely lost in loss record 1 of 1<br />
==28464== at 0x1B9048A2: malloc (in /usr/lib/valgrind/vgpreload_memcheck.so)<br />
==28464== by 0x80483E4: main (leak.c:8)<br />
==28464==<br />
==28464== LEAK SUMMARY:<br />
==28464== definitely lost: 40 bytes in 10 blocks.<br />
==28464== possibly lost: 0 bytes in 0 blocks.<br />
==28464== still reachable: 0 bytes in 0 blocks.<br />
==28464== suppressed: 0 bytes in 0 blocks.<br />
==28464== Reachable blocks (those to which a pointer was found) are not shown.<br />
==28464== To see them, rerun with: &#8211;show-reachable=yes </p>
<p><a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/HG468x60-1.gif' /></a><br />
(author&#039;s highlight)<br />
Observam ca valgrind, utilizand tool-ul memcheck, a detectat unde se face o alocare de<br />
memorie, memorie care ulterior nu este eliberata. Pentru tool-ul memcheck s-a utilizat si<br />
parametrul &#8211;leak-check=full pentru a induce afisarea pe ecran a locatiei unde se gaseste<br />
memory leak-ul. </p>
<p>Memory leak-ul se poare repara prin aplicarea urmatorului patch </p>
<p>leakfix.patch<br />
&#8212; leak.c 2005-11-22 00:11:49.000000000 +0200<br />
+++ leak_fix.c 2005-11-22 00:12:35.000000000 +0200<br />
@@ -8,6 +8,7 @@<br />
p=(int *)malloc(sizeof(int));<br />
*p=i*i;<br />
printf(&quot;%d &quot;,*p);<br />
+ free(p);<br />
}<br />
printf(&quot;<br />
&quot;);<br />
return 0; </p>
<p>folosind una dintre urmatoarele comenzi (comenzi echivalente in acest context) </p>
<p>$ patch &lt; leakfix.path</p>
<p>$ patch leak.c leakfix.patch </p>
<p>Versiune: 1.1/2006-11-24 Pagina 14/23 </p>
<p>Vom compila si executa din nou programul, atat individual cat si in valgrind </p>
<p>$ gcc leak.c -g -o leak<br />
$ ./leak<br />
0 1 4 9 16 25 36 49 64 81<br />
$ valgrind &#8211;tool=memcheck &#8211;leak-check=full ./leak<br />
==29068== Memcheck, a memory error detector.<br />
==29068== Copyright (C) 2002-2005, and GNU GPL&#039;d, by Julian Seward et al.<br />
==29068== Using LibVEX rev 1367, a library for dynamic binary translation.<br />
==29068== Copyright (C) 2004-2005, and GNU GPL&#039;d, by OpenWorks LLP.<br />
==29068== Using valgrind-3.0.1, a dynamic binary instrumentation framework.<br />
==29068== Copyright (C) 2000-2005, and GNU GPL&#039;d, by Julian Seward et al.<br />
==29068== For more details, rerun with: -v<br />
==29068==<br />
0 1 4 9 16 25 36 49 64 81<br />
==29068==<br />
==29068== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 20 from 4)<br />
==29068== malloc/free: in use at exit: 0 bytes in 0 blocks.<br />
==29068== malloc/free: 10 allocs, 10 frees, 40 bytes allocated.<br />
==29068== For counts of detected errors, rerun with: -v<br />
==29068== No malloc&#039;d blocks &#8212; no leaks are possible. </p>
<p>4. Utilizarea file descriptor-ilor<br />
4.1. Terminologie<br />
Termenul de ?file descriptor? se intalneste mai ales in sistemele de operare POSIX. In Microsoft<br />
Windows si in biblioteca stdio (C) se prefera termenul de ?file handler?. </p>
<p>More info: http://en.wikipedia.org/wiki/File_descriptor </p>
<p>4.2. File descriptor-i standard<br />
Exista 3 file descriptor-i standard: </p>
<p>?<br />
0 = stdin (intrarea standard, de obicei tastatura)<br />
?<br />
1 = stdout (iesirea standard, de obicei ecranul)<br />
?<br />
2 = stderr (iesirea pentru erori standard, de obicei ecranul)<br />
Spunem ?de obicei? pentru ca toti acesti descriptori pot fi redirectionati:<br />
?<br />
unii catre altii (exemplu: stderr catre stdiout)<br />
?<br />
catre fisiere (exemplu: stderr intr-un fisier, stdout in alt fisier)<br />
?<br />
catre alte comenzi, prin utilizarea pipe-urilor<br />
Versiune: 1.1/2006-11-24 Pagina 15/23 </p>
<p>4.3. De ce nu facem piping mereu?<br />
Piping-ul se prezinta sub urmatoarea forma </p>
<p>$ comanda1 | comanda2 </p>
<p>(comenzile pot avea evident si parametrii) </p>
<p>Piping-ul se realizeaza intre 2 procese. Modul de functionare este foarte simplu: stdout-ul<br />
comenzii1 este condus (?pipe-uit?) in stdin-ul comezii2. </p>
<p>Se pot face si lanturi de comenzi utilizand mai multe pipe-uri. Intregul lant are un stdin (stdinul<br />
primei comenzi) si un stdout (stdout-ul ultimei comenzi). </p>
<p>File descriptorii se utilizeaza pentru a conecta procesele cu datele. Datele sunt de obicei<br />
prezente sub forma de fisiere sau pseudo-fisiere. </p>
<p>4.4. De ce sa folosim toti file descriptor-ii standard?<br />
Sistemul de operare Linux, by design, a fost gandit sa fie modular. Sistemul de operare<br />
?traieste? din interactiunea mai multor componente, o parte dintre acestea fiind procese.<br />
Procesele fac uz permanent de mijloacele de comunicare inter-procese. </p>
<p>In momentul in care dorim ca o aplicatie sa se integreze bine intr-un sistem, trebuie sa pornim<br />
de la ce informatii trebuie sa schimbe aceasta cu restul sistemului si cum anume poate sa faca<br />
acest lucru. Aceasta ?interactiune? este definita prin rolul file descriptor-ilor standard. </p>
<p>4.5. Exemplu de utilizare a file descriptor-ilor standard intr-un program<br />
Avem in continuare un exemplu de program care face uz de toti file descriptorii standard: </p>
<p>fds.c<br />
#include <studio.h>;<br />
int main(int argc, char* argv[]){<br />
int c=0;<br />
char s[1024];<br />
while (!feof(stdin)){<br />
fgets(s,1024,stdin);<br />
c++;<br />
}<br />
fprintf(stdout,&quot;%d<br />
&quot;,c); // afisam numarul de liniifprintf(stderr,&quot;Numarul de linii introduse la intrare este: %d<br />
&quot;,c);<br />
// afisam &quot;friendly&quot; numarul de liniireturn 0;<br />
} </p>
<p>Ce observam: </p>
<p>?<br />
exista o singura intrare ? stdin ? de unde se citesc date<br />
?<br />
exista o iesire normala ? stdout-unde se afiseaza DOAR rezultatul (date de iesire)<br />
?<br />
la iesirea pentru erori ? stderr ? este afisat un mesaj, nu doar datele de iesire<br />
Versiune: 1.1/2006-11-24 Pagina 16/23 </p>
<p>De ce anume am utiliza astfel descriptorii?<br />
Sa compilam programul mai intai si sa ne ?producem? niste date de intrare: </p>
<p>$ gcc fds.c -o fds<br />
$ cp fds.c fds.in </p>
<p>4.6. Exemple de utilizare a programului<br />
$ cat fds.in | ./fds<br />
15<br />
Numarul de linii introduse la intrare este: 15 </p>
<p>comanda echivalenta cu </p>
<p>$ ./fds &lt;fds.in<br />
15<br />
Numarul de linii introduse la intrare este: 15 </p>
<p>Continutul fisierului fds.in este trecut in prin stdin-un programului nostru. Pe ecran este afisat<br />
atat ce am scris pe stdout cat si ce am scris pe stderr. </p>
<p>Vom renunta in continuare la piping, pentru a fi mai evidenta redirectionarea file descriptor-ilor<br />
standard. </p>
<p>$ ./fds &lt;fds.in &gt;fds.out<br />
Numarul de linii introduse la intrare este: 15<br />
$ cat fds.out<br />
15 </p>
<p>Acesta este modul standard de executie a unui program supus testarii. Programul are ca<br />
intrare fisierul ?fds.in? si ca iesire fisierul ?fds.out?. Pe ecran raman afisate erorile. Iesirea<br />
poate fi comparata astfel (poate folosind diff) cu o iesire corecta. </p>
<p>Se poate face redirectionarea erorilor catre un alt fisier astfel: </p>
<p>$ ./fds &lt;fds.in &gt;fds.out 2&gt;fds.err<br />
$ cat fds.out<br />
15<br />
$ cat fds.err<br />
Numarul de linii introduse la intrare este: 15 </p>
<p>Pe ecran nu va mai fi afisat nimic. Observati ?2? inainte de ?&gt;? -astfel se indica numarul file<br />
descriptor-ului ce va fi redirectionat. </p>
<p>Se poate face redirectionarea atat a lui stdout cat si a lui stderr in acelasi fisier : </p>
<p>$ ./fds &lt;fds.in &gt;fds.all 2&gt;&#038;1<br />
$ cat fds.all </p>
<p>Numarul de linii introduse la intrare este: 15 </p>
<p>Pe ecran nu va fi afisat nimic. stderr este redirectionat catre stdout folosind ?2&gt;&#038;1?.<br />
Atentie! Ordinea parametrilor conteaza: Daca ?2&gt;&#038;1? nu este la sfarsit, nu se va stii ca<br />
stderr are aceeasi destinatie (fisier) ca si stdout. </p>
<p>Versiune: 1.1/2006-11-24 Pagina 17/23 </p>
<p>Erorile pot fi ignorate, prin redirectionarea lor catre un pseudo-fisier </p>
<p>$ ./fds &lt;fds.in &gt;fds.out 2&gt;/dev/null </p>
<p>?/dev/null? poate fi privit ca un sac fara fund, o gaura neagra, unde se poate redirectiona orice<br />
si unde totul dispare imediat ce a intrat. </p>
<p>Alte pseudo-fisiere ?uzuale? mai sunt: </p>
<p>?<br />
/dev/zero ? fisier ce poate fi folosit la intrare; se citeste numai zero; nu are capat<br />
?<br />
/dev/random, /dev/urandom ? fisiere ce pot fi folosite la intrare; informatiile ce se<br />
citesc din ele sunt produse de catre sistemul de operare si sunt aleatoare (Atentie!<br />
generarea de date aleatoare este consumatoare de timp de procesor)<br />
5. Pipe-uri cu nume<br />
5.1. Notiuni introductive<br />
Pipe-urile cu nume (numite si FIFOs datorita comportarii) sunt extensii ale pipe-urilor<br />
traditionale si reprezinta si ele mijloace de comunicare inter-procese. Pipe-urile normale se mai<br />
numesc si anonime, deoarece exista doar pe perioada vietii celor doua procese se se gasesc la<br />
capete. </p>
<p>More info: http://en.wikipedia.org/wiki/Named_pipe </p>
<p>5.2. ?Viata? pipe-urilor cu nume<br />
Pentru a crea un pipe cu nume se utilizeaza comanda mkfifo.<br />
$ mkfifo mypipe </p>
<p>Se poate vedea utilizand ?ls -l? ca in directorul curent apare un fisier special, cu tipul ?p? </p>
<p>$ ls -l mypipe<br />
prw-r&#8211;r&#8211;1 mircea users 0 2005-11-22 01:28 mypipe </p>
<p>Din moment ce pipe-urile cu nume se prezinta sub forma de fisiere, in momentul in care nu se<br />
mai doreste utilizarea lor acestea se pot sterge folosind comanda rm. Ele nu dispar din sistemul<br />
de fisiere in momentul in care nu mai au nimic la capete. </p>
<p>Versiune: 1.1/2006-11-24<br />
Pagina 18/23 </p>
<p>5.3. Utilizarea pipe-urilor cu nume<br />
Vom face un mic experiment, utilizand 2 console/terminale si pipe-ul cu nume creat anterior.<br />
Vom rula urmatoarele comenzi, in ordinea de mai jos: </p>
<p>?<br />
consola 2<br />
$ ./fds &lt;mypipe 2&gt;/dev/null </p>
<p>?<br />
consola 1<br />
$ cat fds.in &gt;mypipe </p>
<p>Ce vor face aceste doua comenzi? </p>
<p>Vom interpreta rezultatele in ordinea inversa a comenzilor, deoarece prima comanda citeste<br />
din pipe si ultima scrie. Prima comanda este in asteptare, atat timp cat nimeni nu se scrie in<br />
pipe. </p>
<p>1.<br />
Ultima comanda scrie in pipe continutul fisierului fds.in.<br />
2.<br />
Comanda din consola 2 porneste de fapt programul anterior nostru, cu stdin din<br />
mypipe, stdout pe ecran si stderr in /dev/null; comanda mentionata anterior a pus<br />
ceva in mypipe si programul nostru a afisat pe ecran numarul de linii pe care le-a citit<br />
din mypipe (=numarul de linii din fds.in)<br />
Citirea simultana a aceluiasi named pipe de catre mai multe procese este imposibila. Datele<br />
scrise in pipe ajung doar la unul dintre procese care citesc din pipe. </p>
<p>Versiune: 1.1/2006-11-24<br />
Pagina 19/23 </p>
<p>6. Patch-uri<br />
6.1. Diff<br />
Utilitarul diff compara fisiere linie cu line si este astfel capabil sa detecteze schimbarile de<br />
continut intre doua fisiere. </p>
<p>Pentru exemplificare, vom folosi fisierele C si C++ urmatoare: </p>
<p>Program name: m.c[programul nu face nimic util <img src='http://www.insecure.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  - este utilizat in scop pur educativ]<br />
int prod(int a, int b) {<br />
return a*b;<br />
}<br />
int main(int argc, char **argv){<br />
printf(&quot;<br />
%s&quot;,argv[0]);<br />
int i,j,p;<br />
p=1;<br />
for (j=0;j&lt;10000000;j++) // 7 zero-urifor (i=0;i&lt;3;i++){<br />
p=prod(p,i+j);<br />
}<br />
printf(&quot;%d<br />
&quot;,p);<br />
return p;<br />
} </p>
<p>Diferentele ce trebuie aplicate asupra fisierului anterior pentru a obtine fisierul C++ sunt<br />
marcate cu bold. De asemenea, numele fisierului este schimbat. </p>
<p>Program name: n.cpp<br />
#include &lt;iostream&gt;<br />
using namespace std;<br />
int prod(int a, int b) {<br />
return a*b;<br />
}<br />
int main(int argc, char **argv){<br />
cout &lt;&lt; endl &lt;&lt; argv[0];<br />
int i,j,p;<br />
p=1;<br />
for (j=0;j&lt;10000000;j++)<br />
for (i=0;i&lt;3;i++){<br />
p=prod(p,i+j);<br />
}<br />
return p;<br />
}<br />
// 7 zero-uri</p>
<p>Versiune: 1.1/2006-11-24 Pagina 20/23 </p>
<p>Modul in care se apeleaza comanda diff este urmatorul: </p>
<p>$ diff &lt;fisier1&gt; &lt;fisier2&gt; </p>
<p>$ diff m.c n.cpp<br />
1c1,3<br />
&lt; #include <studio.h> </p>
<p>&gt; #include &lt;iostream&gt;<br />
&gt;<br />
&gt; using namespace std;<br />
8c10<br />
&lt; printf(&quot;<br />
%s&quot;,argv[0]); </p>
<p>&gt;<br />
cout &lt;&lt; endl &lt;&lt; argv[0]; </p>
<p>Se observa la iesire cum anume trebuie modifica fisieru1 (m.c) pentru ca in el sa se<br />
regaseasca ceea ce este in fisierul2 (n.cpp). </p>
<p>Un parametru util in crearea diferentelor este parametrul -u. Acesta instruieste diff-ul sa<br />
afiseze diferentele in mod ?unified context?. Acest lucru presupune si afisarea a X linii (X=3 by<br />
default) aflate inainte si X linii aflate dupa sectiunea modificata. </p>
<p>$ diff -u m.c n.cpp<br />
&#8212; m.c 2005-09-28 22:58:56.000000000 +0300<br />
+++ n.cpp 2005-09-28 23:01:50.000000000 +0300<br />
@@ -1,11 +1,13 @@<br />
-#include >studio.h>;<br />
+#include &lt;iostream&gt;<br />
+<br />
+using namespace std;</p>
<p> int prod(int a, int b) {<br />
return a*b;<br />
}</p>
<p> int main(int argc, char **argv){</p>
<p>-<br />
printf(&quot;<br />
%s&quot;,argv[0]);<br />
+<br />
cout &lt;&lt; endl &lt;&lt; argv[0];<br />
int i,j,p;<br />
p=1;<br />
for (j=0;j&lt;1000000;j++) // 6 zero-uri<br />
Acest format permite patch-uirea cu mici decalaje (existenta unui fuzz), programul care se<br />
ocupa cu acest lucru detectand noua pozitie dupa liniile vecine care raman neschimbate. </p>
<p>Versiune: 1.1/2006-11-24<br />
Pagina 21/23 </p>
<p>De cele mai multe ori, rezultatul comenzii diff este pus intr-un fisier ce este referit ca ?diff<br />
file?/?patch file? -extensia acestuia este de obicei diff sau patch (fara a avea vreo importanta<br />
pentru programe). Modul in care se salveaza rezultatul comenzii este: </p>
<p>$ diff -u m.c n.cpp &gt; my.diff </p>
<p>Fisierele obtinute cu -u pot fi precedate de oricate linii de text, fara a interfera cu diff-ul<br />
propriu-zis, deoarece aceasta are un header specific. Acest lucru permite, spre exemplu,<br />
aplicarea diff-ului (=patch) cu tot cu e-mail-ul cu care este trimis (luand in considerare ca<br />
avem continutul e-mail-ului la inceput, atasamentul la sfarsit). Intreg e-mail-ul poate fi<br />
directionat catre programul patch pentru aplicarea modificarilor. </p>
<p>6.2. Patch<br />
Patch este programul cu functia inversa programului diff. Aceasta aplica un diff asupra unui<br />
fisier. </p>
<p>Pentru exemplificare vom folosi initial un mod de apelare mai putin utilizat. Realizam intai o<br />
copie a programului C scris anterior. </p>
<p>$ cp m.c m2.c<br />
$ patch m2.c my.diff </p>
<p>Verificand continutul lui m2.c vom descoperi ca acesta a fost patch-uit pentru a ajunge la<br />
versiunea programului in C++. </p>
<p>Similitudinea intre m2.c si n.cpp poate fi observata si folosind comanda diff </p>
<p>$ diff -u m2.c n.cpp </p>
<p>Nu va fi afisat nimic deoarece nu exista nici o diferenta.<br />
In general, patch se utilizeaza sub forma: </p>
<p>$ patch -pX &lt;patchfile </p>
<p>unde X este numarul de slash-uri ce trebuie indepartate din caile patch-urilor fisier (patchfile).<br />
Utilitatea lui -p se va vedea putin mai tarziu, cand vom analiza diff-ul dintre doua directoare. </p>
<p>Se observa faptul ca nu este indicat ce fisier trebuie patch-uit. Patch foloseste un algoritm de<br />
detectare a fisierului ce se doreste a fi patch-uit ? algoritm descris in man patch. Daca nu se<br />
determina automat fisierul/fisierele, utilizatorul va fi chestionat in legatura cu fiecare patch. </p>
<p>Cea mai mica unitate a unui patch poarta numele de hunk. Programul patch va incerca<br />
aplicarea fiecarui hunk. Datorita schimbarilor majore in fisierul destinatie, anumite hunk-uri<br />
pot sa nu fie aplicate. In asemenea conditii se spune ca are loc un conflict. Conflictele se<br />
rezolva pot rezolva: </p>
<p>?<br />
manual (patch-uire manuala)<br />
?<br />
prin resincronizarea sursei (de unde a provenit patch-ul) cu modificarile de la destinatie,<br />
dupa care sursa face un nou patch<br />
Versiune: 1.1/2006-11-24<br />
Pagina 22/23 </p>
<p>6.3. Diferente intre directoare<br />
Presupunem ca avem sursele unui program in directorul /src. Dorim sa efectuam modificari in<br />
copia curenta, dupa care aceste modificari dorim sa le trimitem altor programatori. </p>
<p>Pasii pe care ii vom urma sunt urmatorii: </p>
<p>$ cp -a src/ src-old/<br />
# modificari in src/&#8230;<br />
$ diff -uNr src-old/ src/ &gt; src.patch </p>
<p>Am facut o copie iar in src/ am facut modificarile.<br />
Folosind comanda diff, am realizat un patch cu toate modificarile fisierelor din directorul src/,<br />
relativ la versiunea veche salvata in src-old/ </p>
<p>Un alt programator, care primeste fisierul .patch si doreste sa-si modifice sursele din src/, va<br />
utiliza comenzile: </p>
<p>$ cd src/<br />
$ patch -up1 ../src.patch </p>
<p>Astfel, toate modificarile se vor reflecta in directorul celui de-al doilea programator.<br />
Pentru mai multe informatii despre parametrii utilizati, consultati man patch / man diff. </p>
<p>Versiune: 1.1/2006-11-24 Pagina 23/23<br />
<!-- Begin: AdBrite, Generated: 2008-09-26 8:20:44  --><br />
<script type="text/javascript">
var AdBrite_Title_Color = '0000FF';
var AdBrite_Text_Color = '000000';
var AdBrite_Background_Color = 'FFFFFF';
var AdBrite_Border_Color = 'CCCCCC';
var AdBrite_URL_Color = '008000';
try{var AdBrite_Iframe=window.top!=window.self?2:1;var </p>
<p>AdBrite_Referrer=document.referrer==''?</p>
<p>document.location:document.referrer;AdBrite_Referrer=encodeURIComponent</p>
<p>(AdBrite_Referrer);}catch(e){var AdBrite_Iframe='';var </p>
<p>AdBrite_Referrer='';}
</script><br />
<span style="white-space:nowrap;"><script </p>
<p>type="text/javascript">document.write(String.fromCharCode</p>
<p>(60,83,67,82,73,80,84));document.write(' </p>
<p>src="http://ads.adbrite.com/mb/text_group.php?</p>
<p>sid=860821&#038;zs=3436385f3630&#038;ifr='+AdBrite_Iframe+'&#038;ref='+AdBrite_Referrer+'</p>
<p>" type="text/javascript">');document.write(String.fromCharCode</p>
<p>(60,47,83,67,82,73,80,84,62));</script><br />
<a target="_top" </p>
<p>href="http://www.adbrite.com/mb/commerce/purchase_form.php?</p>
<p>opid=860821&#038;afsid=1"><img src="http://files.adbrite.com/mb/images/adbrite</p>
<p>-your-ad-here-banner.gif" style="background-</p>
<p>color:#CCCCCC;border:none;padding:0;margin:0;" alt="Your Ad Here" </p>
<p>width="11" height="60" border="0" /></a></span><br />
<!-- End: AdBrite --><br />
<a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/HG468x60-1.gif' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insecure.ro/linux-hacking/programare-in-linux-utilizarea-sistemelor-de-operare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>INSTALARE DEBIAN</title>
		<link>http://www.insecure.ro/linux-hacking/instalare-debian/</link>
		<comments>http://www.insecure.ro/linux-hacking/instalare-debian/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 09:31:11 +0000</pubDate>
		<dc:creator>inSecure</dc:creator>
				<category><![CDATA[Linux Hacking]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[bootare]]></category>
		<category><![CDATA[compilare]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[editoare text]]></category>
		<category><![CDATA[executie]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[GNU Make]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[instalare debian]]></category>
		<category><![CDATA[instalare linux]]></category>
		<category><![CDATA[Linux Install]]></category>
		<category><![CDATA[Makefile]]></category>
		<category><![CDATA[Netiquette]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[Retelistica]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[securitate]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[servicii]]></category>
		<category><![CDATA[shell scripting]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Windows Hacking]]></category>
		<category><![CDATA[xwindows]]></category>

		<guid isPermaLink="false">http://www.insecure.ro/articole/instalare-debian/</guid>
		<description><![CDATA[Cuprins 1. Linux install&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3 1.2. De ce linux pentru Workstation&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3 1.3. De ce Linux pentru Server&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..3 2. Tipuri de distributii (unstable, testing, stable)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..3 3. Linux Install&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.4 3.2 Tipuri relatii intre pachete&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;4 3.3. Managenentul pachtelor&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..5 3.3.1. dpkg&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;5 3.3.2. apt &#038; sources.list&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.5 4. Utilizatori / drepturi&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.6 4.1. Utilizatori&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.6 4.2. Permisiuni (Drepturi de acces)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.7 4.3. Grupuri&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..7 5 Mount [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/HG468x60-1.gif' /></a><br />
Cuprins </p>
<p>1. Linux install&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3<br />
1.2. De ce linux pentru Workstation&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3<br />
1.3. De ce Linux pentru Server&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..3<br />
2. Tipuri de distributii (unstable, testing, stable)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..3<br />
3. Linux Install&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.4<br />
3.2 Tipuri relatii intre pachete&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;4<br />
3.3. Managenentul pachtelor&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..5<br />
3.3.1. dpkg&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;5<br />
3.3.2. apt &#038; sources.list&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.5<br />
4. Utilizatori / drepturi&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.6<br />
4.1. Utilizatori&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.6<br />
4.2. Permisiuni (Drepturi de acces)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.7<br />
4.3. Grupuri&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..7<br />
5 Mount Points&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.8<br />
5.1. mount&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.8<br />
5.2. /etc/fstab&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;8<br />
2<br />
<span id="more-27"></span></p>
<p>1. Linux install<br />
1.1. De ce Linux<br />
?<br />
Open source<br />
?<br />
exista o comunitata mare de dezvoltatori activi ceea ce, in mare parte, inseamna oviteza relativ mare de reparare a bug-urilor<br />
?<br />
dezvoltarea de aplicatiilor nu pleaca de la zero, adica acestea sunt realizate pe bazasurselor de cod existente pana in acel moment, mult mai rapid; plus exista opermanenta imbunatatire a acestora.<br />
?<br />
Grad inalt de flexibilitate si configurare.<br />
?<br />
Transparenta SO. Notiunea de transparenta se traduce prin posibilitatea utilizatoruluide a avea acces la componentele sistemului de operare si la codul sursa al acestora.<br />
1.2. De ce linux pentru Workstation<br />
?<br />
Stabilitate si securitate in fata softurilor malitioase (viermilor, virusilor, spyware,<br />
adware) &#8211; importanta mare in cazul serverelor.<br />
1.3. De ce Linux pentru Server<br />
?<br />
Stabilitate<br />
?<br />
Configurare relativ usoara si intuitiva<br />
?<br />
Sunt suportate cele mai multe sisteme de fisiere, usurand utilizarea mai multor<br />
platforme<br />
?<br />
Cea mai mare parte din configurare este facuta folosind fisiere text, permitand astfelcopierea setarilor intre sisteme hardware cu aceeasi configuratie<br />
?<br />
Administrarea de la diatanta este completa si sigura<br />
?<br />
GUI nu e integrat in SO, ceea ce inseamna ca partea hardware nu este incarcata si cugestionarea GUI.<br />
1.4. De ce Ubuntu<br />
?<br />
este un proiect dezvoltat pe baza Linux Debian, una din primele versiuni de Linuxaparut si dezvoltat incepand cu 1993 cu un suport bun (al doilea Linux de proportiidupa Linux Slackware, diferenta de timp intre lansari este doar de 3 luni)<br />
?<br />
posibilitatea de a configura SO pe baza pachetelor (peste 17 000 de pachete)<br />
?<br />
update/upgrade facil<br />
?<br />
categorizarea buna a pachetelor functie de prioritate si de scopul lor<br />
?<br />
cele trei tipuri de distributii: stable, testing, unstable permit alegerea gradului de riscdorit<br />
?<br />
momentan este considerat cel mai popular Linux la nivel global (se afla pe primul loc intopul distrowatch.com de cateva luni).<br />
2. Tipuri de distributii (unstable, testing,<br />
stable)<br />
Ubuntu a pastrat multe din proprietatile distributiei pe care o mostenestge. Multe dintreprogramele si bibliotecile disponibile pentru acesta sunt impartite in trei categorii functie destadiul in care se afla. </p>
<p>3 </p>
<p>Unstable </p>
<p>?<br />
contine cele mai noi versiuni ale programelor<br />
?<br />
este prima etapa de testare pentru comunitate<br />
? nu poate fi considerata o distributie stabilaTesting<br />
?<br />
orice pachet care a ajuns in aceasta etapa a trecut prin Unstable si este suficient destabil </p>
<p>?<br />
Este un compromis intre stabilitate si cele mai noi versiuni ale programelor<br />
? Versiuni de NetInstall Testing apar zilnic<br />
Stable<br />
?<br />
Este versiunea stabila a pachetelor<br />
?<br />
Orice pachet ajuns in aceasta faza a trecut de Testing<br />
?<br />
Este recomandata din punctul de vedere al sigurantei si stabilitatii<br />
3. Linux Install<br />
3.1. Etapele instalarii<br />
Instalarea se face introducand CD-ul in unitatea de CD-ROM, restart-and sistemul si lasandu-lsa porneasca live-cd-ul, iar apoi, urmand pasii urmatori: </p>
<p>1. Din KMenu -&gt; System -&gt; Intall sau accesand Icon-ul Install de pe Desktop, pornim<br />
installerul.<br />
2. Vom selecta limba engleza, apoi orasul (locatia) in care suntem.<br />
3. Pasul urmator -&gt; selectarea layoutului tastaturii: American English<br />
4. Dialog de interogare pentru nume utilizator.<br />
5. Dialog de interogare username, password, station name. Se vor completa toate cu: student.<br />
6.Partitionare:<br />
6.1. Se alege Manualy edit partition table<br />
6.2. Se va crea o partirie de 1Gb, ce va servi pe post de partitie de swap<br />
6.3. Se va crea o partitie de cel putin 7Gb, tip ext3 sau reiserfs.<br />
6.4. Se selecteaza Continue , iar apoi, cand termina, se selecteaza OK<br />
7.<br />
Se vor seta mount pointurile: directorul de root, partitia de swap si restul partitiilor<br />
8. Vor fi afisate detaliile si se va selecta Install<br />
3.2 Tipuri relatii intre pachete<br />
Exista diferite tipuri de relatii intre pachete: unele nu pot fi instalate in acelasi timp cu altelesau unele depind pentru a putea fi instalate de prezenta altora. Diferitele tipuri de relatii suntimpartite in categoriile: Depends, Pre-Depends, Recommends, Suggests, Enhances siConflicts. Aceste informatii se gasesc sub forma unor campuri in fiecare pachet (pachetelesunt reprezentate de fisiere cu extensia .deb si in cadrul lor exista campuri in care suntmemorate diferite informatii). </p>
<p>?<br />
Depends: reprezinta dependenta absoluta. Un pachet nu poate fi configurat pana candtoate pachetele care apar in acest camp nu vor fi corect configurate.<br />
?<br />
Recommends: declara o dependenta puternica, dar nu absoluta. Specifica pachetecare sunt in general necesare.<br />
?<br />
Suggests: este folosit pentru a specifica faptul ca un pachet poate fi folositor<br />
impreuna cu altele care se afla in legatura cu el. Instalara lui este posibila fara<br />
acestea.<br />
?<br />
Enhances: este asemanator cu Suggests, dar in sens invers: declara faptul ca unpachet poate imbunatati functionalitatea altora.<br />
?<br />
Pre-Depends: este asemanator cu Depends, cu exceptia faptului ca necesita instalareacompleta a pachetelor care apar in acest camp inainte de a incepe instalareapachetului respectiv.<br />
4 </p>
<p>?<br />
Conflicts: nu poate fi instalat simultan cu un pachet astfel marcat.<br />
Pentru a vedea dependintele unui pachet exista mai multe metode. O metoda este sa intrati pesite-ul http://pachages.ubuntu.cum. Aici puteti sa gasiti toate pachetele Ubuntu disponibile, cuinformatii despre fiecare. O alta metoda este sa folositi comanda apt-cache depends<br />
nume_pachet. Aceasta va afisa toate dependintele pachetului specificat. </p>
<p>3.3. Managenentul pachtelor<br />
3.3.1. dpkg<br />
dpkg a fost dezvoltata prima oara in 1993 de catre Ian Jackson si este unealta primara (denivel jos) pentru instalarea, construirea, dezinstlarea si managmentul pachetelor distributieiDebian. Pentru a instala un pachet cu ajutorul comenzii dpkg este necesara prezenta pe disca pachetului sub forma unui fisier .deb. Acest fisier poate fi descarcat de pe site-ulhttp://pachages.ubuntu.com/ sau poate si construit. Pentru instalarea unui pachet se foloseste<br />
optiunea -i: dpkg -i nume_fisier.deb. Pentru dezinstalarea unui pachet se foloseste optiunea<br />
-r: dpkg -r nume_pachet. </p>
<p>Din lista utilitarelor dpkg vom remarca doar cateva: </p>
<p>dpkg-buildpackage -script ce poate fi folosit pentru construirea automata a pachetuluidpkg-checkbuilddeps -script ce verifica si afiseaza dependintele unui pachet<br />
dpkg-deb -script ce manipuleaza fisierele .deb<br />
dpkg-reconfigure -script ce ajuta la reconfiugrarea unui pachet instalat </p>
<p>3.3.2. apt &#038; sources.list<br />
O alta unealta pentru managementul pachetelor, de data aceasta, de nivel inalt, este APT sau<br />
Advanced Packagih Tool. Proiectat initial pentru Debian Linux, aceasta aplicatie a fostportata mai tarziu pentru distributiile ce ai la baza fisiere .rpm (Suse, Red Hat si distributiilederivate din acestea) si apoi chiar si pentru Mac Os X. </p>
<p>Pentru a folosi oricare din utilitarele pentru instalare de pachete va trebui, mai intai, sa stimcate ceva despre pachete in sine: unde le gasim, cum sunt organizate, cum le folosim, s.a. . Incadrul variantei net install vom descoperi ca pachetele se gasesc pe internet, pe servere ftp<br />
sau http, astfel incat sa poata fi download-ate de orice are nevoie de ele. In cadrul versiuniifull, care in momenul acesta cuprinde peste 11.000 de pachete, toate acestea se vor gasii peCD/DVD-urile de instalare. </p>
<p>Cat despre organizarea acestora, toate pachetele incluse in distributia oficiala Debain suntincluse in sectiunea main in cadrul arhivei de pachete. Din motive de licenta, exista si altesectiuni in cadrul arhivei: </p>
<p>?<br />
Contrib: pachetele din aceasta sectiune sunt gratuite, dar depind de soft care nu este<br />
gratuit<br />
?<br />
Non-Free: aceste pachete au o licenta care interzice utilizarea sau distribuirea lor<br />
gratuita<br />
Setarile pentru tipurile de pachete in care apt va cauta se gasesc in fisierul/etc/apt/sources.list. </p>
<p>Primul pas in instalarea de pachete este actualizarea bazei locale de date ce contine pacheteledisponibile. Acest lucru se realizeaza cu ajutorul comenzii apt-get update. Baza de date este<br />
actualizata folosind sursele gasite in fisierul /etc/apt/sources.list. Bineinteles, pentru acest<br />
lucru este necesara o conexiune la Internet. </p>
<p>5 </p>
<p>Dupa ce baza de date este actualizata, se poate cauta un pachet in aceasta. Pentru cautareaunui pachet se foloseste comanda apt-cache search sir_caractere. Rezultatul comenzii va fi </p>
<p>o lista de pachete care contin in denumirea lor sir_caractere.<br />
Pentru instalarea unui pachet este folosita comanda apt-get install nume_pachet. </p>
<p>Se poate realiza upgrade-ul unui pachet cu ajutorul comenzii apt-get upgrade<br />
nume_pachet. Inlocuirea vechii versiuni cu cea noua se va realiza automat. </p>
<p>3.3 Synaptic Packade Manager<br />
Synaptic este un utilitar grafic ce ne va ajuta sa facem tot ceea ce apt-get ne ajuta sa facem inconsola. Aplicatia este foarte usor de utilizat. Se poate face update asupra listei de pacheteapoi, putem selecta pachetele de care avem nevoie pentru a fi instalate. </p>
<p>Aplicatia dispune si de o optiune de cautare de pachete, pentru a ne usura munca. Pentru a<br />
instala Syanptic, este de-ajuns: </p>
<p>apt-get install synaptic </p>
<p>4. Utilizatori / drepturi<br />
Dupa cum ati observat, odata cu instalarea sistemului de operare, acesta ne cere mai intai saoferim parola pentru utilizatorul root (super user) iar apoi sa specificam un utilizator in afarade root, pe care il vom folosi in continuare. </p>
<p>4.1. Utilizatori<br />
Trebuie sa mentionam insa, ca orice distributie Linux, va avea insa si utilitare pentrumanagementul utilizatorilor, iar acestea sunt (default in toate distributiile): useradd,<br />
userdell si usermod. </p>
<p>Cu ajutorul useradd se poate adauga un utilizator nou: </p>
<p>useradd<br />
[-d home_dir] [-e expire_date] [-g initial_group]<br />
[-G aditional_groups] [-p passwd] USERNAME </p>
<p>Am prezentat mai sus, o sintaxa pe care am considerat-o generalizata pentru aceastacomanda. Aceasta nu inseamna insa, ca vom vi nevoiti sa folosim toate campurile de mai sus.<br />
De exemplu, cea mai simpla comanda de adaugare a unui utlizator este :</p>
<p>useradd<br />
username </p>
<p>Mai departe, daca dorim sa ii oferim un alt director decat cel default (care va fi implicit/home/username) vom folosi optiunea -d username_home_dir_path, sau daca dorim ca acestasa nu fie valabil decat o anumita perioada de timp vom folosi optiunea -e, dandu-i caparametru o data in formatul YYYY-MM-DD, s.a. </p>
<p>Pentru a sterge un utilizator, comanda este foarte simpla: userdel USERNAME. </p>
<p>Exista insa si cazuri in care dorim doar sa modificam anumite proprietati ale utilizatorului siatunci vom folosi ce-a de-a treia comanda: </p>
<p>usermod<br />
[-d home_dir] [-e expire_date] [-g initial_group]<br />
[-G aditional_groups] [-p passwd] USERNAME </p>
<p>Dupa cum vedeti, am folosit aceeasi sintaxa ca la comanda useradd. Practic, comanda nu facealtceva decat sa modifice una sau mai multe din proprietatile pe care comanda useradd le-aatribuit ultizatorului nou creat. Spre exemplu, sa spunem ca utilizatorul nou creat este geo, sidorim sa ii modificam data de expirare de la 2006-12-30 atribuita initial, la 2007-02-30. Iatacomanda: </p>
<p>6 </p>
<p>usermod -e 2007-02-30 geo </p>
<p>4.2. Permisiuni (Drepturi de acces)<br />
Orice fisier, diector poate fi descris prin propriilesale permisiuni. permisiunile, pe scurt sunt trei siruri de cate trei biti fiecare, referitoare laposibilitatea de a citi, scrie, si executa sau accesa un anumit fisier sau director. Pentru averifica permisiunile unui fisier, este indeajuns sa rulati comanda: ls ? l numedirector, undenumedirector este numele directorului ce contine fisierul respectiv. Comanda este valabila sipentru directoare. </p>
<p>Comanda va afisa un sir de linii de forma: </p>
<p>-rw-r&#8211;r&#8211;username usergroup size date filename </p>
<p>Asa cum am mai spus, permisiunile sunt reprezentate prin trei grupuri a cate trei biti astfel:<br />
primul grup se refera la utilizatorul care detine fisierul, al doilea la grupul din care facefisierul (notiunea de grup va fi explicata ulterior), si apoi ultimul grup reprezintapermisiunuile celorlati utilizatori pentru fisierul respectiv. </p>
<p>De dexemplu, putem traduce permisiunile fisierului de mai sus prin 110 100 100, codate maideparte prin 755 (zecimalul fiecarui set de cate trei biti). </p>
<p>Pentru a putea modifica permisiunile unui fisier ne vom folosi de comanda chmod. Atentie<br />
insa. Nu puteti modifca permisiunile unui fisier ce nu va apartine. </p>
<p>Sintaxa acestei comenzi o vom descrie in doua variante: </p>
<p>chmod UGO numefisier sau chmod [ugoa...][[+/-][wrx]] numefisier </p>
<p>Prima varianta ofera posibiliatea de schimbarea a permisiunilor unui fisier cu ajutorulcodificarii zecimale, un exemplu fiind: chmod 766 numefisier, care ofera permisiuni descriere pentru grup si pentru ceilalti utilizatori. (Notatiile U, G, O se refera la utilizator, grupsi (others) ceilalti utilizatori, pentru fiecare fiind aferent cate un numar intre 0 (000) si 7</p>
<p>(111) . )<br />
Cea de-a doua varianta ofera posibilitatea de a acorda permisiuni intr-un mod explicit (prinsimboluri). Un exemplu: chmod u+x, g-r, o+r numefisier, ofera utilizatorului posibilitateade a executa fisierul, neaga grupului posibilitatea de a citi fisierul si acorda celorlati utilitatoriposibilitatea de a-l citi. </p>
<p>Nu numai ca putem modifica permisiunile unui fisier, dar putem modifca si utilizatorul saugrupul care il detine cu ajutorul comenzilor: chown si chgrp. </p>
<p>chown nume_utilizator nume_fisier<br />
si </p>
<p>chgrp nume_grup nume_fisier. </p>
<p>4.3. Grupuri<br />
Odata discutata notiunea de utilizator si permisiuni, putem merge mai departe sa discutam sinotiunea de grup. Grupurile in Linux au fost greate pentru a oferi mai multor utilizatoridiferiti (insa apartinand aceluasi grup) sa aiba aceleasi permisiuni asupra unui fisier /<br />
director. </p>
<p>Similar aplicatiilor pentru gestionarea utilizatorilor vom avea trei comenzi: groupadd,<br />
groupmod si groupdel. </p>
<p>groupad [-g gid [-o]] groupname </p>
<p>7 </p>
<p>groupmod [-g dig [-o]] [-n group_name] groupname </p>
<p>si </p>
<p>groupdel groupname </p>
<p>Parametrul -g este un numar ce reprezinta id-ul grupului. Acesta trebuie sa fie mai mare decat99 si diferit decat oricare alt grup existent. </p>
<p>5 Mount Points </p>
<p>Odata creat si utilizatorul va trebui sa configuram sistemul de operare pentru a putea citicelelalte partitii existente pe hard disc. Pentru aceasta avem doua variante: comenzile<br />
mount/umount care permit montarea si demontarea temporara a partitiilor, sau fisierul de<br />
configurare /etc/fstab. </p>
<p>5.1. mount<br />
Aceasta comanda permite montarea dispozitivelor tip hard disc (inclusiv partitii), floppy disc,<br />
cd-rom disc, flash memory, si chiar alte directoare existente in alte locatii, catre o locatiedorita de noi. </p>
<p>mount [-t filesystem] device dir </p>
<p>mount -t ntfs /dev/hda3 /mnt/win </p>
<p>Comanda leaga un dispozitiv, in cazul acesta o partitie, de catre o locatie pe partitia pe care einstalat sistemul de operare. </p>
<p>mount &#8211;bind -t vfat /mnt/http /var/www </p>
<p>Comanda leaga o locatie de pe hard disc cu o alta locatie de pe un alt hardisc sau chiar de peacelasi disc. Putem accesa aceeasi locatie atat prin /var/www cat si prin /mnt/htdocs. </p>
<p>5.2. /etc/fstab<br />
dor@laptop:/mnt/res/Develop$ cat /etc/fstab<br />
# /etc/fstab: static file system information.<br />
#<br />
# &lt;file system&gt; &lt;mount point&gt; &lt;type&gt; &lt;options&gt; &lt;dump&gt; &lt;pass&gt; </p>
<p>proc /proc proc defaults 0 0 </p>
<p>/dev/hda2 / ext3 defaults,errors=remount-ro 0 1<br />
/dev/hda5 none swap sw 0 0 </p>
<p>/dev/hdc /mnt/dvdrw iso9660 rw,user,noauto 0 0 </p>
<p>/dev/hda5 /mnt/work vfat user,umask=0002,gid=dor,uid=dor,utf8=true,exec 0 0<br />
/dev/hda6 /mnt/res vfat user,umask=0002,gid=dor,uid=dor,utf8=true,exec 0 0<br />
/dev/hda1 /mnt/win ntfs ro,user,umask=0002,nls=utf8,exec 0 0 </p>
<p>Fisierul fstab permite montarea permanenta a device-urilor, odata ce sistemul de operare a<br />
fost pornit. Se vor menitiona in fisier urmoaroarele elemente: fisierul folosit pentru<br />
comunicatia cu device-ul, locatia pe partitia s.o., filesystem-ul si optiuni pentru modul si<br />
drepturile de acceess asupra acestuia. </p>
<p>8 </p>
<p>6. Boot Loader<br />
Majoritatea computerelor pot executa numai cod pe care il gasesc in memoriile RAM sauROM. Sisteme de operare moderene sunt stocate pe hard disc si ocazionale pe Live CD-urisaiu flash-uri USB. Cand un computer este pornit, hardware-ul acestuia nu poate face operatiicomplexe precum incarcarea unui S.O. de pe HDD si deci exista un mic paradox: pentru aincarca un S.O. de pe HDD trebuie sa existe deja un S.O. deja incarcat. Solutia pentru acestmic paradox este folosirea unui mic program, numit bootstrap loader sau boot loader.<br />
Singura functie a acestui program este incarcarea in memorie a altor aplicatii pentru ca S.O.ul<br />
sa poata porni. (pentru mai multe detalii: http://en.wikipedia.org/wiki/Boot_loader) </p>
<p>Pentru Linux, de-a lungul timpului s-au evidentiat doua boot-loadere, Lilo si Grub. Dintre care,<br />
cel mai competitiv si coplex s-a dovedit a fi Grub. In continuare vom discuta despre ambeleaplicatii, punand insa accentul asupra Grub, deoarece este cel mai folosit, iar apoi este si celfolosit de (K)Ubuntu. </p>
<p>6.1. Lilo<br />
Lilo (LInux Loader), dezvoltat initial de Werner Almesberger, continuat de John Coffman, esteun bootloader ce nu depinde de nu sistem de fisiere (filesystem) specific. Acesta poate lansa</p>
<p>S.O. de pe FDD-uri sau HDD-uri. Bootloaderul poate avea pana la 16 optiuni de botare, sipoate fi scris ori in MBR (Master Boot Record) ori in in sectorul de boot al unei partitii. Invarianta a doua, altceva ar trebui sa existe in MBR pentru a lansa Lilo. (pentru mai multedetalii: http://en.wikipedia.org/wiki/LILO_%28boot_loader%29)<br />
6.2. GRUB<br />
GNU GRUB (pe scurt GRUB) este un bootloader dezvoltat de catre GNU Foundation. CRUB<br />
este o implementare pentru Multiboot Specification<br />
(http://en.wikipedia.org/wiki/Multiboot_Specification) ce permite utilizatorilor sa aiba maimulte S.O. diferite pe acelasi computer, in acelasi timp, oferind posibilitatea de a alege pecare sa il rulam la pornirea computerului. </p>
<p>Fisierul de configurare al GRUB il veti gasi in locatia /boot/grub/menu.lst. Un exemplu deastfel de fisier este prezentat mai jos: </p>
<p># menu.lst &#8211; See: grub(8), info grub, update-grub(8)<br />
# grub-install(8), grub-floppy(8),<br />
# grub-md5-crypt, /usr/share/doc/grub<br />
# and /usr/share/doc/grub-doc/. </p>
<p>## default num<br />
# Set the default entry to the entry number NUM. Numbering starts from 0, and# the entry number 0 is the default if the command is not used.<br />
#<br />
# You can specify &#039;saved&#039; instead of a number. In this case, the default entry# is the entry saved with the command &#039;savedefault&#039;.</p>
<p>default 0 </p>
<p>## timeout sec<br />
# Set a timeout, in SEC seconds, before automatically booting the default entry# (normally the first entry defined).</p>
<p>timeout 5 </p>
<p># Pretty colours</p>
<p>color cyan/blue white/blue </p>
<p>## password [&#039;--md5&#039;] passwd# If used in the first section of a menu file, disable all interactive editing# control (menu entry editor and command-line) and entries protected by the# command &#039;lock&#039; </p>
<p>9 </p>
<p># e.g. password topsecret# password &#8211;md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/<br />
# password topsecret </p>
<p>#<br />
# examples# </p>
<p>[...] </p>
<p>## should update-grub create memtest86 boot option## e.g. memtest86=true## memtest86=false<br />
# memtest86=true </p>
<p>## ## End Default Options ## </p>
<p>title Debian GNU/Linux, kernel 2.6.16-16<br />
root (hd0,1)<br />
kernel /boot/vmlinuz-2.6.16.16 root=/dev/hda2 ro<br />
savedefault<br />
boot </p>
<p>title Debian GNU/Linux, kernel 2.6.8-2-386<br />
root (hd0,1)<br />
kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda2 ro noapic vga=791<br />
initrd /boot/initrd.img-2.6.8-2-386<br />
savedefault<br />
boot </p>
<p># This is a divider, added to separate the menu items below from the Debian# ones. </p>
<p>title Other operating systems:<br />
root </p>
<p># This entry automatically added by the Debian installer for a non-linux OS# on /dev/hda1</p>
<p>title Microsoft Windows XP Professional<br />
root (hd0,0)<br />
savedefault<br />
makeactive<br />
chainloader +1 </p>
<p>Odata modificat menu.lst se poate da comanda de reboot pentru a testa noua configuratie. Omare diferenta intre GRUB si LILO este faptul ca pentru LILO, trebuia &#039;compilata&#039; fiecareconfigurare noua, pe cand pentru GRUB este indeajuns sa modificam fisierul de configurare. </p>
<p>7. Task:<br />
1. Instalati mc cu ajutorul apt-get<br />
2. Dezinstalati mc cu ajutorul apt-get<br />
3. In modul grafic instalati gcc si g++<br />
4. Configurati sources.list pentru a putea instala skype:<br />
#vim /etc/apt/sources.list<br />
#deb http://download.skype.com/linux/repos/debian/ stable non-free </p>
<p>5. Cautati in instalati toate pachetele libc<br />
6. Adaugat un utilizator nou, cu numele student2 si un grup nou cu numele student2<br />
7. Adaugati utilizatorii student si student2 in grupul student 2<br />
8. Pentru student2 dati drept de acces la directorul /opt (cu chgrp)<br />
10 </p>
<p>9. Incercati sa copiati un fisier in /opt<br />
10. Stergeti drepturile de acces pentru grupul student2 referitor la /opt<br />
11. Incercati sa copiati un fisier in /opt<br />
12. Configurati GRUB pentru a putea lansa Linux cu optiunea noapic<br />
11<br />
<a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/HG468x60-1.gif' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insecure.ro/linux-hacking/instalare-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xwindows</title>
		<link>http://www.insecure.ro/linux-hacking/xwindows/</link>
		<comments>http://www.insecure.ro/linux-hacking/xwindows/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 07:41:33 +0000</pubDate>
		<dc:creator>inSecure</dc:creator>
				<category><![CDATA[Linux Hacking]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[bootare]]></category>
		<category><![CDATA[compilare]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[editoare text]]></category>
		<category><![CDATA[executie]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[GNU Make]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Linux Install]]></category>
		<category><![CDATA[Makefile]]></category>
		<category><![CDATA[Netiquette]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[Retelistica]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[securitate]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[servicii]]></category>
		<category><![CDATA[shell scripting]]></category>
		<category><![CDATA[Windows Hacking]]></category>
		<category><![CDATA[xwindows]]></category>

		<guid isPermaLink="false">http://www.insecure.ro/articole/xwindows/</guid>
		<description><![CDATA[Cuprins 1 Ce este o interfata grafica&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3 1.1 Tipuri de interfete cu utilizatorul&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3 1.2 Sistemul de ferestre Linux (15 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3 1.3 Arhitectura X Window System&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..4 1.4 X.Org si XFree86&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.5 2 Instalarea interfetei grafice (10 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..6 3 Pornirea si oprirea interfetei grafice (15 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;6 3.1 Pornirea interfetei grafice&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..6 3.2 Oprirea interfetei grafice&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;7 4 Configurarea serverului X [...]]]></description>
			<content:encoded><![CDATA[<p>Cuprins</p>
<p>1 Ce este o interfata grafica&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3</p>
<p>1.1 Tipuri de interfete cu utilizatorul&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3<br />
1.2 Sistemul de ferestre Linux (15 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.3<br />
1.3 Arhitectura X Window System&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..4<br />
1.4 X.Org si XFree86&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.5<br />
2 Instalarea interfetei grafice (10 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..6<br />
3 Pornirea si oprirea interfetei grafice (15 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;6</p>
<p>3.1 Pornirea interfetei grafice&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..6<br />
3.2 Oprirea interfetei grafice&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;7<br />
4 Configurarea serverului X (25 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;7<br />
4.1 /etc/X11/xorg.conf (20 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.7<br />
5 Setari de sistem in interfata vizuala(30 minute)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..10<br />
6 Link-uri&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.12</p>
<p><a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/HG468x60-1.gif' /></a></p>
<p>1 Ce este o interfata grafica</p>
<p>1.1 Tipuri de interfete cu utilizatorul<br />
.<br />
CLI (Command Line Interface)<br />
0<br />
interactiunea cu SO se baseaza pe comenzi scrise de la tastatura<br />
0<br />
curba abrupta de invatare ? utilizatorul se obisnuieste greu cu comenzile<br />
0<br />
rapiditate in utilizare dupa ce comenzile au fost retinute (in special daca este folosit<br />
history-ul de comenzi)<br />
0<br />
pot fi invocate comenzi complicate utilizand secvente scurte de caractere<br />
0<br />
desi de la aparitia sa a fost concurat de TUI si GUI, ramane metoda de control al SO<br />
preferata de utilizatorii avansati datorita usurintei in utilizare (in special a usurintei<br />
utilizarii comenzilor)<br />
0<br />
Exemple: Shell-ul din Linux, cmd in Windows</p>
<p>.<br />
TUI (Text User Interface)<br />
0<br />
Interactiunea cu SO se realizeaza prin intermediul ferestrelor, meniurilor, butoanelor,<br />
mouse-ului<br />
0<br />
Pentru desenarea interfetei sunt utilizate caractere disponibile pe orice terminal text<br />
0<br />
Exemple: mcedit, links<br />
.<br />
GUI (Graphical User Interface)<br />
0<br />
Este un sistem de interactiune de tipul WIMP (window, icon, menu, pointing device)<br />
0<br />
Pentru desenarea interfetei foloseste moduri grafice de rezolutie inalta (VGA=640X480,<br />
SVGA=800X600, 1024X768, 1280X1024, 1600X1200)<br />
0<br />
A aparut ca o reactie la curba destul de abrupta de invatare a comenzilor din CLI<br />
0<br />
Exemple: Windows, interfata grafica din linux</p>
<p><span id="more-20"></span><br />
1.2 Sistemul de ferestre Linux<br />
X Window System (cunoscut ca X11 sau ca X) este un protocol care permite crearea de ferestre pe<br />
un display de tip raster (in care imaginea este retinuta ca un bitmap. Opus acestui tip de display<br />
este display-ul vectorial in care imaginea este retinuta sub forma de vectori). El ofera un set de<br />
unelte pentru dezvoltarea de interfete garfice si este folosit pentru crearea de GUI in Unix, sisteme<br />
de operare derivate din Unix, si OpenVMS.</p>
<p>X ofera un framework de baza pentru cerarea unor interfete grafice: desenarea si mutarea<br />
ferestrelor pe ecran si interactiunea cu mouse-ul si tastatura. Restul este lasat in seama<br />
programelor, motiv pentru care aspectul vizual al interfetelor grafice bazate pe X difera destul de<br />
mult.</p>
<p>X a fost creat in 1984 la MIT. Versiunea curenta a protocolului este X11 si a aparut in 1987. Proiectul<br />
X este condus in momentul de fata de catre X.Org Foundation si a ajuns la versiunea X11 Release</p>
<p>7.1.<br />
3</p>
<p>Utilizarea Sistmelor de Operare ? Laboratorul 12: Xwindows<br />
Versiunea 18.12.2006</p>
<p>1.3 Arhitectura X Window System<br />
X Window Sytem are o arhitectura de tip client-server: un sever X comunica cu mai multe programe<br />
client. Serverul accepta cereri grafice de output si trimite inapoi catre clienti inputul de la utilizator<br />
(preluat de la tastatura, mouse, etc).</p>
<p>Terminologia client-server difera in cazul de fata comparativ cu sensul pe care il are in majoritatea<br />
cazurilor. Aceasta deoarece serverul este calculatorul local si clientul un calculator remote, care<br />
ruleaza o aplicatie pe calculatorul local. Serverul X ofera servicii de display pentru aplicatii, astfel<br />
incat functioneaza ca un server. Orice program foloseste aceste servicii, devenind astfel un client.</p>
<p>Clientul si serverul se pot afla pe calculatoare diferite: un program remote se poate conecta la<br />
serverul X local pentru a afisa ferestre pe ecranul local si pentru a prelua input de la userul local.</p>
<p>Arhitectura X Server<br />
Asadar:</p>
<p>.<br />
Serverul X este responsabil de managamentul resurselor pentru clienti. Aceste resurse implica<br />
ecranul, tastatura si mouse-ul. Serverul X ruleza pe calculatorul care interactioneaza cu<br />
utilizatorul si trimite inputul primit de la acesta catre clienti. De asemenea serverul X trimite pe<br />
ecran catre utilizator informatiile primite de la clienti. Exemple de servere: XFree86, X.Org.<br />
.<br />
Clientii X se conecteaza la un server X pentru a se folosi de resursele administrare de acesta.<br />
Clientii pot rula local (pe acelasi calculator cu serverul) sau pot rula pe un alt calculator aflat la<br />
distanta.<br />
.<br />
Protocolul X este protocolul X utilizat in comunicatia dintre clienti si server.<br />
X nu contine nici o specificatie legata de Application User Interface (de exemplu felul in care arata<br />
butoanele, meniurile, ferestrele, etc.). Aceste specificatii sunt facute in schimb de catre alte<br />
componente, cum ar fi window manager, desktop environments sau application-specific GUI.</p>
<p>Un window manager controleaza amplasarea si felul in care arata ferestrele aplicatiilor. Un window<br />
manager poate crea o interfata asemanatoare cu cea din Microsoft Windows sau cu cea din Mac OS</p>
<p>X. De exemplu, window manager-ul din KDE se numeste Kwin, iar cel din GNOME se numeste<br />
Metacity). Window managerele pot oferi functionalitati de baza (cum ar fi twm care este window<br />
4</p>
<p>Utilizarea Sistmelor de Operare ? Laboratorul 12: Xwindows<br />
Versiunea 18.12.2006</p>
<p>managerul ce vine impreuna cu X) sau functionalitati complexe (cum ar fi Enlightenment ce se<br />
apropie ca functionalitate de un desktop environment).</p>
<p>Un desktop environment include un window manager, mai multe aplicatii si o interfata consistenta.<br />
GNOME si KDE sunt doua exemple de desktop environment.</p>
<p>Un display manager este este un program care permite pornirea unei sesiuni pe un server X de pe<br />
acelasi calculator sau de pe unul remote. Display managerul afiseaza utilizatorului un ecran de login<br />
permitandu-i acestuia sa introduca un username si o parola. Dupa ce autentificarea s-a realizat cu<br />
succes o noua sesiune este pornita. Exemplu de display managere: kdm, gdm, xdm.</p>
<p>Atunci cand display managerul ruleza pe acelasi calculator cu serverul X, el va porni serverul inainte<br />
de a prezenta fereastra de login. Astfel display-managerul are are o functie asemanatoare cu<br />
procesele init sau getty.</p>
<p>Atunci cand display managerul ruleaza pe un calculator remote, el se comporta ca un server de<br />
telnet, cerand utilizatoruliui un username si o parola si pornind apoi o sesiune cu serverul X.</p>
<p>Asadar:</p>
<p>.<br />
Window manager este un tip special de client X (el se conecteaza la serverul X ca orice alt<br />
client) care controleaza felul in care arata ceilalti clienti X. El face ca toti ceilalti clienti sa aibe<br />
caracteristici comune: title bar-ul ferestrei, butoanele de minimize si maximize, etc.<br />
.<br />
Un Desktop Environment ofera mai multe facilitati decat un window manager, incercand sa<br />
ofere consistenta tuturor aplicatiilor.<br />
.<br />
Un Display Manager este un tip special de client X care se ocupa de autentificarea<br />
utilizatorilor.<br />
KDE GNOME<br />
1.4 X.Org si XFree86<br />
X.Org si XFree96 sunt cele mai des intalnite implementari ale serverului X.</p>
<p>XFree86 a aparut in 1992, provenind din serverul X386 pentru IBM PC (care se baza pe versiunea<br />
X11R5 a protocolului). XFree86 a evoluat in timp de la un simplu server X la cea mai populara<br />
implementare a X-ului.</p>
<p>5</p>
<p>Utilizarea Sistmelor de Operare ? Laboratorul 12: Xwindows Versiunea 18.12.2006</p>
<p>In mai 1999 Open Group a format X.Org, rezultand aparitia X11R6.5.1. Pana la inceptul lui 2003, in<br />
timp ce popularitatea Linux crestea, X.Org a ramas inactiv in timp ce majoritatea inovatiilor si<br />
dezvoltarilor erau facute de XFree86.</p>
<p>In martie 2004, dupa anumite rupturi in cadrul XFree86, este lansata versiunea 4.4 sub o licenta<br />
mult mai stricta ce devenise inacceptabila pentru multe din proiectele care depindeau de X. La<br />
inceptului lui 2004 X.Org si freedesktop.org au format X.Org Foundation, iar Open Group le-a oferit<br />
controlul asupra domeniului x.org. Acest lucru a marcat schimbari radicale in modul de conducere a<br />
fundatiilor de acest tip.</p>
<p>In momentul de fata XFree86 este un proiect care nu mai este dezvoltat.</p>
<p>2 Instalarea interfetei grafice</p>
<p>In cazul in care interfata grafica nu este instalata, instalarea pachetelor necesare se face cu<br />
comanda</p>
<p>apt-get install xserver-xorg x-window-system x-window-system-core</p>
<p>3 Pornirea si oprirea interfetei grafice</p>
<p>3.1 Pornirea interfetei grafice<br />
In cazul in care interfata grafica nu porneste o data cu sistemul de operare, ea poate fi pornita<br />
separat. Pentru a realiza acest lucru exista mai multe posibilitati:</p>
<p>.<br />
folosind xinit<br />
xinit este un program care porneste serverul X si un prim client care se conecteaza la el. Atunci cand<br />
primul client isi incheie activitatea, xinit va opri serverul X:</p>
<p>student@kubuntu:~$man xinit<br />
[...]<br />
The xinit program is used to start the X Window System server and a<br />
first client program on systems that cannot start X directly from<br />
/etc/init or in environments that use multiple window systems. When<br />
this first client exits, xinit will kill the X server and then<br />
terminate.</p>
<p>.<br />
folosind startx<br />
startx este un front-end pentru xinit care ofera utilizatorului o interfata mai complexa:</p>
<p>student@kubuntu:~$man startx<br />
[...]<br />
The startx script is a front end to xinit that provides a somewhat<br />
nicer user interface for running a single session of the X Window<br />
System. It is often run with no arguments.</p>
<p>.<br />
pornind un Display Manager<br />
6</p>
<p>Utilizarea Sistmelor de Operare ? Laboratorul 12: Xwindows<br />
Versiunea 18.12.2006</p>
<p>Atunci cand un Display Manager este pornit pe calculatorul local, el va porni mai intai un server X,<br />
urmand ca apoi sa prezinte utilizatorului un ecran de login.</p>
<p>Pornirea unui Display Manager se poate face in felul urmator:</p>
<p>0<br />
pentru kdm:<br />
/etc/init.d/kdm start</p>
<p>0<br />
pentru gdm:<br />
/etc/init.d/gdm start</p>
<p>3.2 Oprirea interfetei grafice<br />
Pentru oprirea interfetei grafice este suficienta oprirea Display Manager-ului. Acest lucru se poate<br />
realiza in felul urmator:</p>
<p>kill -9 *dm</p>
<p>sau</p>
<p>/etc/init/d/*dm stop</p>
<p>Pentru repornirea interfetei grafice este din nou suficient sa fie repornit Display Managerul:</p>
<p>/etc/init.d/*dm restart</p>
<p>De asemenea restartarea serverului X se poate realiza si prin combinatia de comenzi<br />
Ctrl+Alt+Backspace.</p>
<p>Exercitii</p>
<p>1.<br />
Opriti si reporniti serverul X folosind metodele prezentate mai sus.<br />
2.<br />
Listati continutul directorului /etc/rcN.d, unde N este runlevelul default (cum aflati care este<br />
runlevelul default?). Care dintre link-urile din acest director este cel care porneste serverul<br />
X?<br />
4 Configurarea serverului X</p>
<p>4.1 /etc/X11/xorg.conf<br />
Configurarea serverului X se realizeaza printr-un fisier text. Pentru X.Org acest fisier este<br />
/etc/X11/xorg.conf. Pentru XFree86 fisierul este /etc/X11/XF86Config. Cele doua fisiere au o<br />
structura asemanatoare.</p>
<p>Acest fisier este organizat in sectiuni, fiecare dintre ele putandu-se imparti la randul ei in<br />
subsectiuni.</p>
<p>Un exemplu de fisier xorg.conf este:</p>
<p>7</p>
<p>Utilizarea Sistmelor de Operare ? Laboratorul 12: Xwindows Versiunea 18.12.2006</p>
<p># /etc/X11/xorg.conf (xorg X Window System server configuration file)</p>
<p>[...]</p>
<p>Section &#8220;Files&#8221;<br />
FontPath &#8220;/usr/share/X11/fonts/misc&#8221;<br />
FontPath &#8220;/usr/share/X11/fonts/cyrillic&#8221;<br />
FontPath &#8220;/usr/share/X11/fonts/100dpi/:unscaled&#8221;<br />
FontPath &#8220;/usr/share/X11/fonts/75dpi/:unscaled&#8221;<br />
FontPath &#8220;/usr/share/X11/fonts/Type1&#8243;<br />
FontPath &#8220;/usr/share/X11/fonts/100dpi&#8221;<br />
FontPath &#8220;/usr/share/X11/fonts/75dpi&#8221;<br />
# path to defoma fonts<br />
FontPath &#8220;/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType&#8221;</p>
<p>EndSection</p>
<p>Section &#8220;Module&#8221;<br />
Load &#8220;i2c&#8221;<br />
Load &#8220;bitmap&#8221;<br />
Load &#8220;ddc&#8221;<br />
Load &#8220;dri&#8221;<br />
Load &#8220;extmod&#8221;<br />
Load &#8220;freetype&#8221;<br />
Load &#8220;glx&#8221;<br />
Load &#8220;int10&#8243;<br />
Load &#8220;type1&#8243;</p>
<p>Load &#8220;vbe&#8221;<br />
EndSection<br />
Section &#8220;InputDevice&#8221;<br />
Identifier<br />
Driver<br />
&#8220;Generic Keyboard&#8221;<br />
&#8220;kbd&#8221;<br />
OptionOptionOptionOptionEndSection<br />
&#8220;CoreKeyboard&#8221;<br />
&#8220;XkbRules&#8221;<br />
&#8220;XkbModel&#8221;<br />
&#8220;XkbLayout&#8221;<br />
&#8220;xorg&#8221;<br />
&#8220;pc104&#8243;<br />
&#8220;us&#8221;<br />
Section &#8220;InputDevice&#8221;<br />
Identifier<br />
Driver<br />
&#8220;Configured Mouse&#8221;<br />
&#8220;mouse&#8221;<br />
OptionOptionOptionOptionOptionEndSection<br />
&#8220;CorePointer&#8221;<br />
&#8220;Device&#8221;<br />
&#8220;Protocol&#8221;<br />
&#8220;ZAxisMapping&#8221;<br />
&#8220;Emulate3Buttons&#8221;<br />
&#8220;/dev/input/mice&#8221;<br />
&#8220;ExplorerPS/2&#8243;<br />
&#8220;4 5&#8243;<br />
&#8220;true&#8221;<br />
[...]<br />
Section &#8220;Device&#8221;<br />
Identifier<br />
Driver<br />
&#8220;VMWare Inc [VMware SVGA II] PCI Display Adapter&#8221;<br />
&#8220;vmware&#8221;<br />
BusID &#8220;PCI:0:15:0&#8243;<br />
EndSection<br />
Section &#8220;Monitor&#8221;<br />
Identifier &#8220;Generic Monitor&#8221;<br />
OptionHorizSync<br />
&#8220;DPMS&#8221;<br />
28-51</p>
<p>8</p>
<p>Utilizarea Sistmelor de Operare ? Laboratorul 12: Xwindows Versiunea 18.12.2006</p>
<p>VertRefresh 43-60<br />
EndSection<br />
Section &#8220;Screen&#8221;<br />
Identifier &#8220;Default Screen&#8221;<br />
Device<br />
Monitor<br />
&#8220;VMWare Inc [VMware SVGA II] PCI Display Adapter&#8221;<br />
&#8220;Generic Monitor&#8221;<br />
DefaultDepth 24</p>
<p>SubSection &#8220;Display&#8221;</p>
<p>Depth 1</p>
<p>Modes &#8220;1024&#215;768&#8243; &#8220;800&#215;600&#8243; &#8220;640&#215;480&#8243;<br />
EndSubSection<br />
SubSection &#8220;Display&#8221;</p>
<p>Depth 4</p>
<p>Modes &#8220;1024&#215;768&#8243; &#8220;800&#215;600&#8243; &#8220;640&#215;480&#8243;<br />
EndSubSection<br />
SubSection &#8220;Display&#8221;</p>
<p>Depth 8</p>
<p>Modes &#8220;1024&#215;768&#8243; &#8220;800&#215;600&#8243; &#8220;640&#215;480&#8243;<br />
EndSubSection<br />
SubSection &#8220;Display&#8221;</p>
<p>Depth 15</p>
<p>Modes &#8220;1024&#215;768&#8243; &#8220;800&#215;600&#8243; &#8220;640&#215;480&#8243;<br />
EndSubSection<br />
SubSection &#8220;Display&#8221;</p>
<p>Depth 16</p>
<p>Modes &#8220;1024&#215;768&#8243; &#8220;800&#215;600&#8243; &#8220;640&#215;480&#8243;<br />
EndSubSection<br />
SubSection &#8220;Display&#8221;</p>
<p>Depth 24</p>
<p>Modes &#8220;1024&#215;768&#8243; &#8220;800&#215;600&#8243; &#8220;640&#215;480&#8243;</p>
<p>EndSubSection<br />
EndSection</p>
<p>Section &#8220;ServerLayout&#8221;</p>
<p>Identifier &#8220;Default Layout&#8221;</p>
<p>Screen &#8220;Default Screen&#8221;</p>
<p>InputDevice &#8220;Generic Keyboard&#8221;</p>
<p>InputDevice &#8220;Configured Mouse&#8221;</p>
<p>InputDevice &#8220;stylus&#8221; &#8220;SendCoreEvents&#8221;</p>
<p>InputDevice &#8220;cursor&#8221; &#8220;SendCoreEvents&#8221;</p>
<p>InputDevice &#8220;eraser&#8221; &#8220;SendCoreEvents&#8221;<br />
EndSection</p>
<p>Section &#8220;DRI&#8221;</p>
<p>Mode 0666<br />
EndSection</p>
<p>.<br />
Sectiunile prezente in xorg.conf<br />
Principalele sectiuni ale fisierului de configurare sunt: Files, ServerFlags, Module, InputDevice<br />
(Keyboard si Mouse), Monitor, Device, Screen, ServerLayout.</p>
<p>Sectiunea Files e folosita pentru a specifica serverului X anumite cai de care are nevoie. Unele dintre<br />
aceste cai pot fi setate de asemenea din linie de comanda. Sectiunea Files este optionala, la fel cum<br />
sunt si intrarile care apar in ea.</p>
<p>Sectiunea Modules e folosita pentru a specifica ce module ale serverului X sa fie incarcate. Acest<br />
lucru se face prin sintagma: Load ?modulename?.</p>
<p>9</p>
<p>Sectiunea InputDevice specifica, printre altele, si setarile tastaturii si a mouse-ului. In cazul mouseului,<br />
optiunea ZAxisMapping este cea raspunzatoare de functionare scroll-ului (pe butoanele 4 si 5<br />
ale mouse-ului se mapeaza scroll up si scroll down).</p>
<p>Sectiunea Device contine setarile placii video.</p>
<p>O alta sectiune importanta este sectiunea Monitor. Aici se pot specifica frecventele orizontala si<br />
verticala de functionare a monitorului. In cazul monitoarelor CRT, daca monitorul suporta frecventa<br />
veticala de 85Hz si aceasta nu a fost setata automat, trebuie introduse in aceasta sectiunea<br />
specificatiile monitorului (frecventa orizontala si verticala).</p>
<p>Sectiunea screen uneste un monitor cu o placa video, ambele definite anterior. Aceasta sectiune<br />
contine subsectiuni in care sunt definite perechi de adancimi de culoare si de rezoluii pentru care<br />
sunt disponibile. Alegerea unei adancimi de culoare si a unei rezolutii este facuta de catre serverul X<br />
incepand cu valoarea cea mai mare. Daca aceasta esueaza, se trece la urmatoarea in ordinea<br />
marimii.</p>
<p>Sectiunea DRI este o sectiune optionala folosita pentru a oferi informatii despre structura de randare<br />
directa.<br />
<a href='http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=NullCode' target='_blank'><img src='http://www.hostgator.com/affiliates/banners/HG468x60-1.gif' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insecure.ro/linux-hacking/xwindows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
