<?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>Void and Null &#187; bsd</title>
	<atom:link href="http://blog.ivanatora.info/tag/bsd/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ivanatora.info</link>
	<description>Code, Linux and Shits</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:48:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Готин Bash хак за изтриване на път</title>
		<link>http://blog.ivanatora.info/2009/11/24/%d0%b3%d0%be%d1%82%d0%b8%d0%bd-bash-%d1%85%d0%b0%d0%ba-%d0%b7%d0%b0-%d0%b8%d0%b7%d1%82%d1%80%d0%b8%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%8a%d1%82/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b3%25d0%25be%25d1%2582%25d0%25b8%25d0%25bd-bash-%25d1%2585%25d0%25b0%25d0%25ba-%25d0%25b7%25d0%25b0-%25d0%25b8%25d0%25b7%25d1%2582%25d1%2580%25d0%25b8%25d0%25b2%25d0%25b0%25d0%25bd%25d0%25b5-%25d0%25bd%25d0%25b0-%25d0%25bf%25d1%258a%25d1%2582</link>
		<comments>http://blog.ivanatora.info/2009/11/24/%d0%b3%d0%be%d1%82%d0%b8%d0%bd-bash-%d1%85%d0%b0%d0%ba-%d0%b7%d0%b0-%d0%b8%d0%b7%d1%82%d1%80%d0%b8%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%8a%d1%82/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 08:58:55 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[пинизи]]></category>

		<guid isPermaLink="false">http://blog.ivanatora.info/?p=352</guid>
		<description><![CDATA[Забелязъл съм нещо интересно, което може да се прави в csh, но работи по друг начин в bash. Да речем че съм написал някакъв дълъг път: /mnt/storage/mp3/Manowar ... и се сетя че всъщност не съм имал предвид "Manowar" като последна директория, а "rammstein". Единия начин да оправя това е като набия 7 backspace-а и да [...]]]></description>
			<content:encoded><![CDATA[<p>Забелязъл съм нещо интересно, което може да се прави в csh, но работи по друг начин в bash.<br />
Да речем че съм написал някакъв дълъг път:</p>
<blockquote><p>/mnt/storage/mp3/Manowar</p></blockquote>
<p>... и се сетя че всъщност не съм имал предвид "Manowar" като последна директория, а "rammstein". Единия начин да оправя това е като набия 7 backspace-а и да изтрия всяка буква поотделно, докато стигна до наклонената черта. Ами ако се сетя че "rammstein" не е в "mp3", а в "/mnt/storage/Music"? Тогава чаткането по backspace става още повече.<br />
В csh това става елементарно с CTRL-W - комбинацията изтрива всичко от командния ред до предната наклонена черта.<br />
Така </p>
<blockquote><p>/mnt/storage/mp3/Manowar</p></blockquote>
<p>става </p>
<blockquote><p>/mnt/storage/mp3/</p></blockquote>
<p>с един CTRL-W. Следващия CTRL-W ще махне "mp3/", следващия ще махне "storage/" и т.н.<br />
Гугъл върна един резултат на това търсене - тук в <a href='http://www.shallowsky.com/blog/linux/bash-word-erase.html'>Shallow Thoughts</a>.<br />
На кракто решението е следното:<br />
Това отива в ~/.inputrc:</p>
<pre>
set bind-tty-special-chars Off
</pre>
<p>А това отива в ~/.bash_profile:</p>
<pre>
bind '\C-w:backward-kill-word'
</pre>
<p>Шела се рестартира (logout -> login) и трябва да работи.<br />
Обяснение на дълго защо се случва това - в горния линк.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/11/24/%d0%b3%d0%be%d1%82%d0%b8%d0%bd-bash-%d1%85%d0%b0%d0%ba-%d0%b7%d0%b0-%d0%b8%d0%b7%d1%82%d1%80%d0%b8%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%8a%d1%82/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Мониторинг качеството на нета</title>
		<link>http://blog.ivanatora.info/2009/03/11/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%ba%d0%b0%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be%d1%82%d0%be-%d0%bd%d0%b0-%d0%bd%d0%b5%d1%82%d0%b0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25bc%25d0%25be%25d0%25bd%25d0%25b8%25d1%2582%25d0%25be%25d1%2580%25d0%25b8%25d0%25bd%25d0%25b3-%25d0%25ba%25d0%25b0%25d1%2587%25d0%25b5%25d1%2581%25d1%2582%25d0%25b2%25d0%25be%25d1%2582%25d0%25be-%25d0%25bd%25d0%25b0-%25d0%25bd%25d0%25b5%25d1%2582%25d0%25b0</link>
		<comments>http://blog.ivanatora.info/2009/03/11/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%ba%d0%b0%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be%d1%82%d0%be-%d0%bd%d0%b0-%d0%bd%d0%b5%d1%82%d0%b0/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 23:03:24 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[пинизи]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=267</guid>
		<description><![CDATA[Терминът "качество на нета" по-скоро е взет от някой тинейджърски журнал, но уцелва точно нуждите на крайния клиент. Аз като клиент на моя ISP се нуждая от две неща - ниска (по възможност - никаква) загуба на пакети и ниско (по възможност - никакво) забавяне на пакетите. Това трябва да ми се поднесе разбираемо, с [...]]]></description>
			<content:encoded><![CDATA[<p>Терминът "качество на нета" по-скоро е взет от някой тинейджърски журнал, но уцелва точно нуждите на крайния клиент. Аз като клиент на моя ISP се нуждая от две неща - ниска (по възможност - никаква) загуба на пакети и ниско (по възможност - никакво) забавяне на пакетите. Това трябва да ми се поднесе разбираемо, с картинка.<br />
Нужен софтуер:</p>
<ul>
<li><a href='http://oss.oetiker.ch/rrdtool/'>RRDtool</a> - има страхотни възможности за представяне на числова информация. За примерни графики вижте <a href='http://oss.oetiker.ch/rrdtool/gallery/index.en.html'>галерията</a> им.</li>
<li>ping - резултата от изпълнението на ping съдържа всичко необходимо за изграждане на статистиката ни - Round trip time и Packet loss</li>
<li>Perl - или друг удобен ви език. Трябва ви за парсване на изхода от ping</li>
<li>crontab - искаме статистиката да се събира през определен интервал от време</li>
</ul>
<p>Системата може да бъде разделена на две части: част за събиране на статистика и част за графично представяне на данните.<br />
<strong>Събиране на статистика</strong><br />
На всеки 5 минути ще се пуска ping до няколко избрани хоста в различни зони на пиъринга. Естествено върнатите резултати ще са субективни, защото зависят от параметрите на отсрещната точка. Все пак цялото задание "качество на нета" е субективно, така че да продължаваме <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Избрал съм единия хост да бъде шлюза на доставчика ми, втория хост да бъде dir.bg (тест на bg пиъринга) и третия хост да бъде ivanatora.info (за тест на международната свързаност).<br />
Логът се изгражда от следния скрипт:<br />
/home/ivanatora/perl_razni/ping_stats.pl</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/perl</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$target</span> = <span class="re0">$ARGV</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>; <span class="co1"># тук ще идва адреса на целта</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span> = <span class="re0">$ARGV</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>; <span class="co1"># тук ще идва в коя база ще се записва</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$dump</span> = <span class="st0">&quot;/home/ivanatora/stats_ping/$target.log&quot;</span>; <span class="co1"># лога с крайните резултати</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$rrd_path</span> = <span class="st0">&quot;/home/ivanatora/rrd/temps/pings&quot;</span>; <span class="co1"># директорията с RRD базите</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://perldoc.perl.org/functions/open.html"><span class="kw3">open</span></a> <span class="br0">&#40;</span>FH, <span class="st0">&quot;&gt;&gt;&quot;</span>, <span class="re0">$dump</span><span class="br0">&#41;</span> <span class="kw1">or</span> <a href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a> <span class="st0">&quot;$!&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="re0">$sec</span>,<span class="re0">$min</span>,<span class="re0">$hour</span>,<span class="re0">$mday</span>,<span class="re0">$mon</span>,<span class="re0">$year</span>,<span class="re0">$wday</span>,<span class="re0">$yday</span>,<span class="re0">$isdst</span><span class="br0">&#41;</span> = <a href="http://perldoc.perl.org/functions/localtime.html"><span class="kw3">localtime</span></a><span class="br0">&#40;</span><a href="http://perldoc.perl.org/functions/time.html"><span class="kw3">time</span></a><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$mon</span>++;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$year</span> += <span class="nu0">1900</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$time</span> = <a href="http://perldoc.perl.org/functions/sprintf.html"><span class="kw3">sprintf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%02d/%02d/%4d %02d:%02d:%02d&quot;</span>, <span class="re0">$mday</span>, <span class="re0">$mon</span>, <span class="re0">$year</span>, <span class="re0">$hour</span>, <span class="re0">$min</span>, <span class="re0">$sec</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$output</span> = `/bin/ping -<a href="http://perldoc.perl.org/functions/q.html"><span class="kw3">q</span></a> -c100 -w100 <span class="re0">$target</span>`; <span class="co1"># пуска ping със 100 пакета и чака максимално 100 секунди за изпълнението на командата</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$output</span> =~ /<span class="br0">&#40;</span>\d+?<span class="br0">&#41;</span>% packet loss/<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$loss</span> = $<span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$percent</span> = <a href="http://perldoc.perl.org/functions/sprintf.html"><span class="kw3">sprintf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%3d&quot;</span>, $<span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$output</span> =~ /rtt min\/avg\/max\/mdev = .+?\/<span class="br0">&#40;</span>.+?<span class="br0">&#41;</span>\//<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$avg</span> = $<span class="nu0">1</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> FH <span class="st0">&quot;$time : $percent% loss to $target Average: $1 ms<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># update RRD</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ts</span> = <a href="http://perldoc.perl.org/functions/time.html"><span class="kw3">time</span></a>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mod</span> = <span class="re0">$ts</span> % <span class="nu0">300</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ts</span> -= <span class="re0">$mod</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$avg</span> =~ /^<span class="br0">&#40;</span>.+?<span class="br0">&#41;</span>\./;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$rtt</span> = $<span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; `/home/ivanatora/rrd/bin/rrdtool update <span class="re0">$rrd_path</span>/<span class="re0">$db</span>.rrd <span class="re0">$ts</span>:<span class="re0">$loss</span>:<span class="re0">$rtt</span>`; <span class="co1"># командата за ъпдейт на базата; TODO: да направя пътя до изпълнимия файл на rrdtool в променлива</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://perldoc.perl.org/functions/close.html"><span class="kw3">close</span></a> <span class="br0">&#40;</span>FH<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>Малко изпреварвам времето, защото още не сме създали RRD базите. Каква е идеята на RRD? Round Robin Database е способ за запазване на постоянно изменяща се информация във времето, като всяка промяна се регистрира в цикличен буфер. Ако имаме един буфер със 12 слота и ъпдейтваме базата през 5 минути, във всеки момент ще имаме данните от предния час. Какво става с по-старите данни - губят ли се? Да. Ако ни трябват ще направим още един буфер, който ще се ъпдейтва на всяко цялостно извъртане на часовия буфер - ще взима средната стойност на всички измервания и ще го записва в един негов слот. Така ако този буфер има 24 слота ще имаме статистика на средната часова стойност на измерванията. Може да имате колкото си искате вторични буфери и всички се съхраняват в една и съща база и се ъпдейтват автоматично. Освен това в един буфер може да пазите стойностите на няколко променливи. Предимствата на RRD е че всяка промяна се регистрира, като размера на базата не нараства линейно във времето.<br />
До тук вероятно имаме лог с нещо такова:<br />
/home/ivanatora/stats_ping/dir.bg.log<br />
<code><br />
11/03/2009 00:05:01 :   0% loss to dir.bg Average: 7.271 ms<br />
11/03/2009 00:10:01 :   0% loss to dir.bg Average: 9.091 ms<br />
11/03/2009 00:15:01 :   0% loss to dir.bg Average: 7.466 ms<br />
11/03/2009 00:20:01 :   1% loss to dir.bg Average: 7.152 ms<br />
11/03/2009 00:25:01 :   0% loss to dir.bg Average: 8.273 ms<br />
11/03/2009 00:30:01 :   0% loss to dir.bg Average: 6.863 ms<br />
11/03/2009 00:35:01 :   0% loss to dir.bg Average: 11.690 ms<br />
</code><br />
Този лог може да използваме за каквото си искаме, а може и въобще да не го правим. Горния скрипт работи ъпдейтва директно rrdtool, така че ако не искате излишни логове да се пазят на машината ви насочете $dump = "/dev/null"; <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<br />
<strong>Създаване на RRD бази.</strong><br />
За всеки изследван хост ще направим по една база. В тази база ще се съхраняват стойностите за Round Trip Time и Packet Loss.<br />
Правим си следното bash скриптче (освен ако не ви мързи да го пишете на ръка за всяка база - може да имате и повече от три бази):</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">NOW=</span>`<span class="kw2">date</span> +%s`</div>
</li>
<li class="li1">
<div class="de1">rrdtool create $<span class="nu0">1</span>.rrd --start <span class="re1">$NOW</span> --step <span class="nu0">300</span> \</div>
</li>
<li class="li2">
<div class="de2">DS:PacketLoss:GAUGE:<span class="nu0">300</span>:<span class="nu0">0</span>:<span class="nu0">100</span> \</div>
</li>
<li class="li1">
<div class="de1">DS:RTT:GAUGE:<span class="nu0">300</span>:<span class="nu0">0</span>:<span class="nu0">10000</span> \</div>
</li>
<li class="li1">
<div class="de1">RRA:LAST:<span class="nu0">0.5</span>:<span class="nu0">1</span>:<span class="nu0">288</span> \</div>
</li>
<li class="li1">
<div class="de1">RRA:AVERAGE:<span class="nu0">0.5</span>:<span class="nu0">6</span>:<span class="nu0">336</span> \</div>
</li>
<li class="li1">
<div class="de1">RRA:AVERAGE:<span class="nu0">0.5</span>:<span class="nu0">24</span>:<span class="nu0">360</span> \</div>
</li>
<li class="li2">
<div class="de2">RRA:AVERAGE:<span class="nu0">0.5</span>:<span class="nu0">288</span>:<span class="nu0">365</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Подробностите за синтаксиса можете да намерите в документацията на RRDtool. На кратко - създаваме база с 2 източника на данни (променливи, които ще следим): PacketLoss и RTT. Задават се интервалите на ъпдейт на всеки източник,минимални и максимални допустими стойности. След това се правят 4 Round Robin Archives (буферите, за които говорихме по-рано).<br />
Създаваме трите бази:<br />
<code><br />
[ivanatora@~/rrd/temps/pings]$ sh create_script.sh bg<br />
[ivanatora@~/rrd/temps/pings]$ sh create_script.sh gw<br />
[ivanatora@~/rrd/temps/pings]$ sh create_script.sh int<br />
</code><br />
Слагаме cronjob за изпълнение на ъпдейтващия скрипт на 5 минути:<br />
<code><br />
*/5 * * * * perl /home/ivanatora/perl_razni/ping_stats.pl 87.120.194.1 gw<br />
*/5 * * * * perl /home/ivanatora/perl_razni/ping_stats.pl dir.bg bg<br />
*/5 * * * * perl /home/ivanatora/perl_razni/ping_stats.pl ivanatora.info int<br />
</code><br />
Както видяхме скрипта приема два аргумента: адрес за ping и име на базата, която ъпдейтва.<br />
<strong>Рисуване на графиките</strong><br />
Ще имаме отделна графика за всяка следена величина. Може да комбинираме няколко от графиките на една, но само ако очаквате там приблизително еднакви резултати. Големите отклонения на величините карат rrdtool да измества разделителната способност на графиката и една от графиките в общата картинка не се вижда добре. Ще имаме два скрипта за чертане на графики - един за Round Trip Time и един за Packet Loss.<br />
/home/ivanatora/rrd/temps/pings/loss_graph.sh</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">PATH=</span><span class="re1">$PATH</span>:/home/ivanatora/rrd/bin</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">DIR=</span>/home/ivanatora/rrd/temps/pings/</div>
</li>
<li class="li2">
<div class="de2">rrdtool graph <span class="re1">$DIR</span>/img/loss-$<span class="nu0">1</span>.png \</div>
</li>
<li class="li1">
<div class="de1">--<span class="re2">title=</span><span class="st0">&quot;&lt;$1&gt; Packet loss&quot;</span> \</div>
</li>
<li class="li1">
<div class="de1">--color CANVAS<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color BACK<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color GRID<span class="re3">#<span class="nu0">006600</span> \</span></div>
</li>
<li class="li2">
<div class="de2">--color MGRID<span class="re3">#<span class="nu0">003300</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color AXIS<span class="re3">#00ff00 \</span></div>
</li>
<li class="li1">
<div class="de1">--color FONT<span class="re3">#00ff00 \</span></div>
</li>
<li class="li1">
<div class="de1">--color SHADEA<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color SHADEB<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li2">
<div class="de2">--slope-mode \</div>
</li>
<li class="li1">
<div class="de1">--upper-limit <span class="nu0">100</span> \</div>
</li>
<li class="li1">
<div class="de1">--rigid \</div>
</li>
<li class="li1">
<div class="de1">--width <span class="nu0">480</span> \</div>
</li>
<li class="li1">
<div class="de1">--height <span class="nu0">300</span> \</div>
</li>
<li class="li2">
<div class="de2">--font DEFAULT:<span class="nu0">10</span>:Arial \</div>
</li>
<li class="li1">
<div class="de1">DEF:<span class="re2">loss=</span><span class="re1">$DIR</span>/$<span class="nu0">1</span>.rrd:PacketLoss:LAST \</div>
</li>
<li class="li1">
<div class="de1">DEF:<span class="re2">rtt=</span><span class="re1">$DIR</span>/$<span class="nu0">1</span>.rrd:RTT:LAST \</div>
</li>
<li class="li1">
<div class="de1">AREA:loss<span class="re3">#00FF00:</span><span class="st0">&quot;Packet loss (%)&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>/home/ivanatora/rrd/temps/pings/rtt_graph.sh</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">PATH=</span><span class="re1">$PATH</span>:/home/ivanatora/rrd/bin</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">DIR=</span>/home/ivanatora/rrd/temps/pings/</div>
</li>
<li class="li2">
<div class="de2">rrdtool graph <span class="re1">$DIR</span>/img/rtt-$<span class="nu0">1</span>.png \</div>
</li>
<li class="li1">
<div class="de1">--<span class="re2">title=</span><span class="st0">&quot;&lt;$1&gt; Round trip time&quot;</span> \</div>
</li>
<li class="li1">
<div class="de1">--color CANVAS<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color BACK<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color GRID<span class="re3">#<span class="nu0">006600</span> \</span></div>
</li>
<li class="li2">
<div class="de2">--color MGRID<span class="re3">#<span class="nu0">003300</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color AXIS<span class="re3">#00ff00 \</span></div>
</li>
<li class="li1">
<div class="de1">--color FONT<span class="re3">#00ff00 \</span></div>
</li>
<li class="li1">
<div class="de1">--color SHADEA<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li1">
<div class="de1">--color SHADEB<span class="re3">#<span class="nu0">000000</span> \</span></div>
</li>
<li class="li2">
<div class="de2">--slope-mode \</div>
</li>
<li class="li1">
<div class="de1">--width <span class="nu0">480</span> \</div>
</li>
<li class="li1">
<div class="de1">--height <span class="nu0">300</span> \</div>
</li>
<li class="li1">
<div class="de1">--font DEFAULT:<span class="nu0">10</span>:Arial \</div>
</li>
<li class="li1">
<div class="de1">DEF:<span class="re2">loss=</span><span class="re1">$DIR</span>/$<span class="nu0">1</span>.rrd:PacketLoss:LAST \</div>
</li>
<li class="li2">
<div class="de2">DEF:<span class="re2">rtt=</span><span class="re1">$DIR</span>/$<span class="nu0">1</span>.rrd:RTT:LAST \</div>
</li>
<li class="li1">
<div class="de1">AREA:rtt<span class="re3">#00FF00:</span><span class="st0">&quot;Round trip time (ms)&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Тук можем да си поиграем с цветовете и крайния резултат да е доста eye-candy. Важните редове са DEF - където се извличат стойностите на променливите от базата и AREA - самото изчертаване. За повече подробности - документацията на RRDtool.<br />
След това правим един скрипт, който да задейства изчертаване на всички графики:<br />
/home/ivanatora/rrd/temps/pings/graph_all.sh</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re3">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">DIR=</span>/home/ivanatora/rrd/temps/pings/</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$DIR</span>/loss_graph.<span class="kw2">sh</span> int</div>
</li>
<li class="li2">
<div class="de2"><span class="re1">$DIR</span>/loss_graph.<span class="kw2">sh</span> <span class="kw3">bg</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$DIR</span>/loss_graph.<span class="kw2">sh</span> gw</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$DIR</span>/rtt_graph.<span class="kw2">sh</span> int</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$DIR</span>/rtt_graph.<span class="kw2">sh</span> <span class="kw3">bg</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$DIR</span>/rtt_graph.<span class="kw2">sh</span> gw</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>И поставяме съответната задача в crontab:<br />
<code><br />
*/5 * * * * sh /home/ivanatora/rrd/temps/pings/graph_all.sh<br />
</code><br />
В резултат всичките изображения се намират в директорията pings/img/. Остава да направим красива HTML страничка, която да събира всичко в едно.<br />
Резултата можете да го видите <a href='http://87.120.194.120/tests/netstat/'>тук</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/03/11/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%ba%d0%b0%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be%d1%82%d0%be-%d0%bd%d0%b0-%d0%bd%d0%b5%d1%82%d0%b0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Какво е HFSC и има ли почва у нас</title>
		<link>http://blog.ivanatora.info/2009/01/29/%d0%ba%d0%b0%d0%ba%d0%b2%d0%be-%d0%b5-hfsc-%d0%b8-%d0%b8%d0%bc%d0%b0-%d0%bb%d0%b8-%d0%bf%d0%be%d1%87%d0%b2%d0%b0-%d1%83-%d0%bd%d0%b0%d1%81/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25ba%25d0%25b0%25d0%25ba%25d0%25b2%25d0%25be-%25d0%25b5-hfsc-%25d0%25b8-%25d0%25b8%25d0%25bc%25d0%25b0-%25d0%25bb%25d0%25b8-%25d0%25bf%25d0%25be%25d1%2587%25d0%25b2%25d0%25b0-%25d1%2583-%25d0%25bd%25d0%25b0%25d1%2581</link>
		<comments>http://blog.ivanatora.info/2009/01/29/%d0%ba%d0%b0%d0%ba%d0%b2%d0%be-%d0%b5-hfsc-%d0%b8-%d0%b8%d0%bc%d0%b0-%d0%bb%d0%b8-%d0%bf%d0%be%d1%87%d0%b2%d0%b0-%d1%83-%d0%bd%d0%b0%d1%81/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 12:59:23 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[нет]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=214</guid>
		<description><![CDATA[Снощи нямах какво да правя, та взех и преведох текст от разни места и го събрах в едно материалче което разглежда принципа на действие на HFSC. Има примери как се прави това в Linux и *BSD. Статията може да е скучна за доста хора, така че който го интересува да чете навътре Има различни реализации [...]]]></description>
			<content:encoded><![CDATA[<p>Снощи нямах какво да правя, та взех и преведох текст от разни места и го събрах в едно материалче което разглежда принципа на действие на HFSC. Има примери как се прави това в Linux и *BSD.</p>
<p>Статията може да е скучна за доста хора, така че който го интересува да чете навътре <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-214"></span></p>
<p>Има различни реализации на алгоритми за подобряване Качеството на услугата (QoS), които са известни още под името "планировчици". Повечето от тях използват клас-базирани опашки (CBQ) - трафика се разделя по класове. Всеки клас има лимит (част от общия лимит на връзката), който не може да се надвиши от сесиите, които попадат в класа. Различни планировчици са: RED, ECN, CBQ, HTB, WFQ, WRR, HFSC... "HFSC" означава "честна йерархична крива на услугата". Целта на алгоритъма е да гарантира адаптивно и гъвкаво изменение на трафика в реално време; плавно споделяне между йерархчно разположените класове. Какви са ползите от подобен тип алгоритъм:</p>
<ul>
<li>може да се направи филтър, който вкарва ACK пакетите в клас с по-висок приоритет. Така трансферите ще преминават с нормална скорост, дори и при натоварена връзка.</li>
<li>може да се контролира забавянето на пакетите (latency) както и скоростта им на преминаване (bandwidth)</li>
<li>може да се задават точни параметри на пиковите трансфери (burst), които са с малка продължителност, но използват връзката на максимум. Тези параметри включват големина на пика и плавното му намаляване след максимално определената продължителност. По този начин кратки трансфери ще преминават по-бързо (каквито са HTTP заявки и отговорите), докато големите трансфери ще се ограничават и няма да заемат целия капацитет на връзката.</li>
<li>гарантиране поведение на услугата във всички крайни класове</li>
<li>честно разпределение на свободния трафик към крайните класове</li>
</ul>
<p>Планирането чрез HFSC се основава на два принципа: предаване на трафик в реално време, което гарантира сервизната крива на крайните класове и споделяне между класовете, което се стреми да разпредели свободните ресурси. Политиката на планировчика е да активира първия принцип, когато има опастност крайните класове да не могат да получат минималния им гарантиран ресурс. През останалото време е активиран втория критерий. За да се разбере принципа на действие на HFSC трябва да се вникне в няколко модела на управление на качеството на услугата.</p>
<h3 id="section-HFSC-_D0_9C_D0_BE_D0_B4_D0_B5_D0_BB_D0_9D_D0_B0_D0_A3_D0_BF_D1_80_D0_B0_D0_B2_D0_BB_D0_B5_D0_BD_D0_B8_D0_B5_D0_9A_D0_B0_D1_87_D0_B5_D1_81_D1_82_D0_B2_D0_BE_D1_82_D0_BE_D0_9D_D0_B0_D0_A3_D1_81_D0_BB_D1_83_D0_B3_D0_B0_D1_82_D0_B0_D0_A7_D1_80_D0_B5_D0_B7_D0_A1_D0_B5_D1_80_D0_B2_D0_B8_D0_B7_D0_BD_D0_B0_D0_9A_D1_80_D0_B8_D0_B2_D0_B0">Модел на управление качеството на услугата чрез сервизна крива</h3>
<p>Сервизна крива - Service curve - това е графика на преминалите данни за единица време.</p>
<table class=".." style="margin-left: auto; margin-right: auto;" border="0">
<tbody>
<tr>
<td><img src="http://ivanatora.info/test/service_curve.jpg" alt="" width=".." height=".." /></td>
</tr>
</tbody>
</table>
<p>Кривата има три параметъра:</p>
<ul>
<li><em>m1</em> - наклон на първия сегмент</li>
<li><em>m2</em> - наклон на втория сегмент</li>
<li><em>d</em>- пресечна точка на двата сегмента по оста Х</li>
</ul>
<p>Според подобра на параметрите могат да се направят криви с различен наклон, вдлъбнати или изпъкнали. Вдлъбнатата крива работи добре с кратки пикове, които не стигат до максимално разрешеното време - точката d. Тази крива пропуска началото на трансфера и го ограничава ако се окаже че той не е пик, а изисква голям ресурс по цялата си дължина. Изпъкналата крива потиска първоначалния трафик и дава приоритет на връзки, които преминат точката d. Естествено може да се постигне и линейна сервизна крива, когато двата наклона са еднакви: m1 = m2.<br />
Настройването на сервизна крива дава основен инструмент за управление качеството на услугата. Все пак това не стига за честно разпределяне на свободните ресурси между крайните класове.</p>
<h3 id="section-HFSC-_D0_9C_D0_BE_D0_B4_D0_B5_D0_BB_D0_9D_D0_B0_D0_92_D0_B8_D1_80_D1_82_D1_83_D0_B0_D0_BB_D0_BD_D0_BE_D1_82_D0_BE_D0_92_D1_80_D0_B5_D0_BC_D0_B5">Модел на виртуалното време</h3>
<p>Всеки от класовете в йерархията има параметър vt - виртуално време, който представлява броя обслужени байтове за единица време. ВТ е въведено за първи път в PFQ (Packet Fair Queueing) алгоритъма и целта на параметъра е да синхронизира дъщерните класове в йерархията в принципа за споделяне на връзката. Когато стане възможно да се изпрати пакет се претърсва всеки от класовете в йерархията за най-малка стойност на виртуалното време. Крайният клас, който съвпадне с това изискване изпраща пакет и виртуалното време на този и на всеки друг клас нагоре по йерархията (до коренния клас) се увеличава. Винаги когато един клас изпраща пакет виртуалното му време се увеличава.</p>
<h3 id="section-HFSC-_D0_9C_D0_BE_D0_B4_D0_B5_D0_BB_D0_9D_D0_B0_D0_A3_D0_BF_D1_80_D0_B0_D0_B2_D0_BB_D0_B5_D0_BD_D0_B8_D0_B5_D0_9A_D0_B0_D1_87_D0_B5_D1_81_D1_82_D0_B2_D0_BE_D1_82_D0_BE_D0_9D_D0_B0_D0_A3_D1_81_D0_BB_D1_83_D0_B3_D0_B0_D1_82_D0_B0_D0_A7_D1_80_D0_B5_D0_B7_D0_A0_D0_B0_D0_B7_D0_BF_D1_80_D0_B5_D0_B4_D0_B5_D0_BB_D1_8F_D0_BD_D0_B5_D0_98_D0_A7_D0_B5_D1_81_D1_82_D0_BD_D0_B0_D0_A1_D0_B5_D1_80_D0_B2_D0_B8_D0_B7_D0_BD_D0_B0_D0_9A_D1_80_D0_B8_D0_B2_D0_B0">Модел на управление качеството на услугата чрез разпределяне и честна сервизна крива</h3>
<p>Не само крайните класове, а всеки клас в йерархията има собствена сервизна крива. Целта е едновременно да се задоволят сервизните криви на крайните класове и излишъка от ресурс да бъде честно разпределен. HFSC използва този модел.<br />
Всеки краен клас има следните три параметъра:</p>
<ul>
<li><em>d</em> - максимално допустимото време на престой за пакет на края на опашката на класа</li>
<li><em>e</em> - желателното време за престой</li>
<li><em>v</em> - виртуалното време, свързано с класа</li>
</ul>
<p>Класовете, които не са крайни имат само v параметър. Максималните времена на престой се изчисляват така че, сервизната крива е гарантирана когато всички пакети от дадена сесия имат време по-малко от d. Времето e се използва за избор на кой от двата планиращи принципа ще се активира за следващия пакет. Ако текущия пакет е престоял по-малко от времето e - продължил е нататък по връзката за кракто време, алгоритъма преценява има излишък от ресурс и се стреми да го разпредели. Ако текущия пакет е престоял повече от желателното време e, това е сигнал за потенциално претоварване и алгоритъма активира критерия за минимален гарантиран ресурс.</p>
<h3 id="section-HFSC-_D0_98_D0_BC_D0_BF_D0_BB_D0_B5_D0_BC_D0_B5_D0_BD_D1_82_D0_B0_D1_86_D0_B8_D1_8F_D0_92Linux">Имплементация в Linux</h3>
<p>За контролиране качеството на услугата в Linux може да се използва инструмента tc, който е част от комплекта iproute2. Този документ няма да описва действието на tc и се предполага че читателите са запознати с него. Първата стъпка е да се инсталира обслужваща дисциплина (qdisc) към мрежовия интерфейс. Може да се добави и опция за използване на клас по подразбиране, в който ще попадне некласифицирания трафик. Общ синтаксис:<br />
<tt>tc qdisc add dev $dev root handle $ID: hfsc [default $classID]</tt><br />
Пример:<br />
<tt>tc qdisc add dev eth0 root handle 1: hfsc default 10</tt><br />
Добавяне на класове и изграждане на йерархия, чрез връзката parrent &lt;-&gt; classid.<br />
Общ синтаксис:<br />
<tt>tc add class dev $dev parent parentID classid $ID hfsc [ [ rt SC ] [ ls SC ] | [ sc SC ] ] [ ul SC ]</tt><br />
<tt>SC := [ umax bytes dmax ms ] rate BPS </tt><br />
Крайните класове могат да имат параметър за гарантиран ресурс в реално време (rt) както и параметър за сервизната крива, когато е активиран принципа за споделяне (ls). Вътрешните класове имат само параметъра ls, който е свързан с виртуалното време. Параметъра ul показва максимално заделения трафик, който може да попадне в класа. Параметрите rt и ls могат да бъдат изпуснати и вместо тях да се ползва описание на сервизната крива (sc). Тя се описва чрез:</p>
<ul>
<li><em>rate</em> - скорост на предаване - височина на втория сегмент на кривата</li>
<li><em>dmax</em> - максимално закъснение - времето където се съединяват двата сегмента</li>
<li><em>umax</em> - скорост на предаване - височина на първия сегмент на кривата</li>
</ul>
<h4 id="section-HFSC-_D0_9F_D1_80_D0_B8_D0_BC_D0_B5_D1_80_D0_BD_D0_B0_D0_99_D0_B5_D1_80_D0_B0_D1_80_D1_85_D0_B8_D1_8F_D0_9E_D1_82_D0_9A_D0_BB_D0_B0_D1_81_D0_BE_D0_B2_D0_B5">Примерна йерархия от класове</h4>
<p><tt>tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate 1000kbit ul rate 1000kbit<br />
tc class add dev eth0 parent 1:1 classid 1:10 hfsc sc rate 500kbit ul rate 1000kbit<br />
tc class add dev eth0 parent 1:1 classid 1:20 hfsc sc rate 500kbit ul rate 1000kbit<br />
tc class add dev eth0 parent 1:10 classid 1:11 hfsc sc umax 1500b dmax 53ms rate 400kbit ul rate 1000kbit<br />
tc class add dev eth0 parent 1:10 classid 1:12 hfsc sc umax 1500b dmax 30ms rate 100kbit ul rate 1000kbit </tt><br />
Другата част, която не засяга HFSC планировчика и няма да бъде разглеждана е създаване на филтър, който да класифицира трафика.<br />
Пример:<br />
<tt>tc filter add dev eth0 protocol ip parent 1: u32 match ip sport 80 0xffff classid 1:10</tt></p>
<h3 id="section-HFSC-_D0_98_D0_BC_D0_BF_D0_BB_D0_B5_D0_BC_D0_B5_D0_BD_D1_82_D0_B0_D1_86_D0_B8_D1_8F_D0_92BSD">Имплементация в *BSD</h3>
<p>HFSC за първи път бива вградено в open source решение за контрол качеството на услугата - това е ALTQ. ALTQ се използва в комбинация с пакетния филтър pf. Този документ няма за цел да описва пакетния филтър, така че ще се концентрираме върху HFSC. Използват се следните параметри:</p>
<ul>
<li><em>bandwidth</em> - капацитета на връзката за даден клас. Стойността за bandwidth на дъщерните класове винаги трябва да е по-малка от bandwidth на родителския клас. Стойността за подразбиране на bandwidth е 100% от възможното за родителския клас. Стойността може да се задава в проценти, mbit, kbit...</li>
<li><em>priority</em> - приоритет на обслужване на класовете. Тази директива е прост начин за определяне на кои класове ще могат да изпратят пакет. Допустимите стойности за priority в HFSC и CBQ са от 0 до 7, като колкото по-високо е числото, толкова по-голям е приоритета. Също така priority влиза в сила когато връзката е натоварена и има опастност да не може да се изпълни принципа за гарантиране на минимална скорост.</li>
<li><em>qlimit</em> - брой "клетки" във FIFO опашка, използвана за запазване на изходящите пакети. Това се налага когато капацитетът на връзката не е достатъчен. В случай на насищане може да се случи някой от класовете да не може да предава. Тогава класовете запазват пакетите в определен брой клетки от паметта по реда им на пристигане. Когато се освободи ресурс, опашката ще бъде изпразнена навън. Използването на qlimit трябва да е само в крайни случаи, тъй като FIFO опашка противоречи на идеята за адаптивност и проспособимост на HFSC алгоритъма. Все пак запазване в паметта е по-добрата алтернатива от изпускане на пакети. Стойността на qlimit по подразбиране е 50.</li>
<li><em>realtime</em> - минимална гарантирана скорост, с която краен клас може да предава, независимо какво става с другите класове. Стойността на realtime може да бъде от 0% до 80% от общия капацитет на връзката.</li>
<li><em>upperlimit</em> - капацитет, който краен клас никога не може да надвиши.</li>
<li><em>linkshare</em> - същото като bandwidth, но важи само за вътрешните класове по йерархията. Ако за клас е сложена стойност на bandwidth, може да не се задава стойност за linkshare</li>
</ul>
<p>Общ синтаксис за опашките в pf.conf:<br />
<tt>altq on $interface $scheduler bandwidth $bw [priority $pri] [qlimit $qlim] queue { $q1, $q2, $q3...}}}<br />
</tt></p>
<ul>
<li><em>interface</em> - мрежовия интерфейс, където се инсталира дисциплината за обслужване</li>
<li><em>scheduler</em> - алгоритъм на планировчика</li>
<li><em>bandwidth</em> - капацитет на връзката. Задава се в b, Kb, Mb за bits, kilobits, megabits за една секунда. Стойността за подразбиране е 100% от капацитета на родителския клас.</li>
<li><em>q1, q2, q3 ...</em> - списък с имена на класове, които се описват по-долу</li>
</ul>
<p>Общ синтаксис за описване на опашка (клас):<br />
<tt>queue $name [on $interface] bandwidth $bw [priority $pri] [qlimit $qlim] $scheduler ( $sched_options ) { $queue_list } </tt></p>
<ul>
<li><em>name</em> - име на опашката. Трябва да съвпада с някое от имената на класовете, описани в списъка { $q1, $q2, $q3...} на родителския клас. Максималната дължина на името е 15 символа</li>
<li>sched_options - допълнителни настройки и опции, които контролират поведението на планировчика
<ul>
<li><em>default</em> - дефинира класа като клас в който попада всичкия некласифициран трафик. Трябва да има само една default дефиниция за всички класове, които са към един мрежов интерфейс.</li>
<li><em>red</em> - активира алгоритъма Random Early Detection (RED) за опашката</li>
<li><em>ecn</em> - активира алгоритъма Explicit Congestion Notification (ECN) за опашката</li>
<li><em>realtime</em> $bw - задава параметъра realtime в HFSC</li>
<li><em>upperlimit</em> $bw - задава параметъра upperlimit в HFSC</li>
<li><em>linkshare</em> $bw - задава параметъра linkshare в HFSC</li>
</ul>
</li>
</ul>
<h4 id="section-HFSC-_D0_9F_D1_80_D0_B8_D0_BC_D0_B5_D1_80_D0_BD_D0_B0_D0_99_D0_B5_D1_80_D0_B0_D1_80_D1_85_D0_B8_D1_8F_D0_9E_D1_82_D0_9A_D0_BB_D0_B0_D1_81_D0_BE_D0_B2_D0_B5">Примерна йерархия от класове</h4>
<p><tt>altq on rl0 bandwidth 744Kb hfsc queue { ack, dns, ssh, bulk, bittor, spamd }<br />
queue ack bandwidth 80% priority 7 qlimit 500 hfsc (realtime 50%)<br />
queue dns bandwidth  7% priority 6 qlimit 500 hfsc (realtime  5%)<br />
queue ssh bandwidth 10% priority 5 qlimit 500 hfsc (realtime 10%) {ssh_bulk, ssh_login}<br />
queue 	ssh_login bandwidth 90% priority 5 qlimit 500 hfsc<br />
queue 	ssh_bulk bandwidth 10% priority 4 qlimit 500 hfsc<br />
queue bulk bandwidth  1% priority 4 qlimit 500 hfsc (realtime 5% default)<br />
queue bittor bandwidth  1% priority 3 qlimit 500 hfsc (upperlimit 99%)<br />
queue spamd bandwidth  1% priority 2 qlimit 500 hfsc (upperlimit 1%)</tt></p>
<h3 id="section-HFSC-_D0_98_D0_B7_D0_BF_D0_BE_D0_BB_D0_B7_D0_B2_D0_B0_D0_BD_D0_B0_D0_9B_D0_B8_D1_82_D0_B5_D1_80_D0_B0_D1_82_D1_83_D1_80_D0_B0">Използвана литература</h3>
<p><a class="external" href="http://www.cs.cmu.edu/%7Ehzhang/papers/SIGCOM97.pdf">http://www.cs.cmu.edu/~hzhang/papers/SIGCOM97.pdf</a><img class="outlink" src="http://dsnet.tu-plovdiv.bg/wiki/images/out.png" alt="" /> - A Hierarchical Fair Service Curve Algorithm for LinkSharing, RealTime and Priority Services<br />
<a class="external" href="http://linux-ip.net/articles/hfsc.en/">http://linux-ip.net/articles/hfsc.en/</a><img class="outlink" src="http://dsnet.tu-plovdiv.bg/wiki/images/out.png" alt="" /> - HFSC Scheduling with Linux<br />
<a class="external" href="https://calomel.org/pf_hfsc.html">https://calomel.org/pf_hfsc.html</a><img class="outlink" src="http://dsnet.tu-plovdiv.bg/wiki/images/out.png" alt="" /> - Hierarchical Fair Service Curve (HFSC) of OpenBSD<br />
<a class="external" href="http://www.openbsd.org/faq/pf/queueing.html">http://www.openbsd.org/faq/pf/queueing.html</a><img class="outlink" src="http://dsnet.tu-plovdiv.bg/wiki/images/out.png" alt="" /> - PF: Packet Queueing and Prioritization</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/01/29/%d0%ba%d0%b0%d0%ba%d0%b2%d0%be-%d0%b5-hfsc-%d0%b8-%d0%b8%d0%bc%d0%b0-%d0%bb%d0%b8-%d0%bf%d0%be%d1%87%d0%b2%d0%b0-%d1%83-%d0%bd%d0%b0%d1%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Изгасяне на монитора след вечерния филм</title>
		<link>http://blog.ivanatora.info/2009/01/20/%d0%b8%d0%b7%d0%b3%d0%b0%d1%81%d1%8f%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b0-%d1%81%d0%bb%d0%b5%d0%b4-%d0%b2%d0%b5%d1%87%d0%b5%d1%80%d0%bd%d0%b8%d1%8f-%d1%84%d0%b8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b8%25d0%25b7%25d0%25b3%25d0%25b0%25d1%2581%25d1%258f%25d0%25bd%25d0%25b5-%25d0%25bd%25d0%25b0-%25d0%25bc%25d0%25be%25d0%25bd%25d0%25b8%25d1%2582%25d0%25be%25d1%2580%25d0%25b0-%25d1%2581%25d0%25bb%25d0%25b5%25d0%25b4-%25d0%25b2%25d0%25b5%25d1%2587%25d0%25b5%25d1%2580%25d0%25bd%25d0%25b8%25d1%258f-%25d1%2584%25d0%25b8</link>
		<comments>http://blog.ivanatora.info/2009/01/20/%d0%b8%d0%b7%d0%b3%d0%b0%d1%81%d1%8f%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b0-%d1%81%d0%bb%d0%b5%d0%b4-%d0%b2%d0%b5%d1%87%d0%b5%d1%80%d0%bd%d0%b8%d1%8f-%d1%84%d0%b8/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 11:13:47 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[пинизи]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=204</guid>
		<description><![CDATA[Пускате си да гледате филмче, завивате се на топло, гасите си лампите... идилия Само че филма свършва, mplayer приключва и десктопа ви с всичките си милион и триста хиляди светещи пиксела се забива под клепачите ви. Сега трябва да ставате от топлото легло, да се разхождате до PC-то и да гасите монитора. За мързеливите има [...]]]></description>
			<content:encoded><![CDATA[<p>Пускате си да гледате филмче, завивате се на топло, гасите си лампите... идилия <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Само че филма свършва, mplayer приключва и десктопа ви с всичките си милион и триста хиляди светещи пиксела се забива под клепачите ви. Сега трябва да ставате от топлото легло, да се разхождате до PC-то и да гасите монитора. За мързеливите има следния трик:</p>
<blockquote><p>
mplayer <опции>; xset dmps force off
</p></blockquote>
<p>След приключване на процеса на mplayer се изпълнява и втората команда, която управлява <a href='http://en.wikipedia.org/wiki/VESA_Display_Power_Management_Signaling'>Power managment</a> на монитора ви (standby, suspend, on, off) го изключва.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2009/01/20/%d0%b8%d0%b7%d0%b3%d0%b0%d1%81%d1%8f%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b0-%d1%81%d0%bb%d0%b5%d0%b4-%d0%b2%d0%b5%d1%87%d0%b5%d1%80%d0%bd%d0%b8%d1%8f-%d1%84%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Бутона DEL и стоте му превъплъщения</title>
		<link>http://blog.ivanatora.info/2008/11/03/%d0%b1%d1%83%d1%82%d0%be%d0%bd%d0%b0-del-%d0%b8-%d1%81%d1%82%d0%be%d1%82%d0%b5-%d0%bc%d1%83-%d0%bf%d1%80%d0%b5%d0%b2%d1%8a%d0%bf%d0%bb%d1%8a%d1%89%d0%b5%d0%bd%d0%b8%d1%8f/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b1%25d1%2583%25d1%2582%25d0%25be%25d0%25bd%25d0%25b0-del-%25d0%25b8-%25d1%2581%25d1%2582%25d0%25be%25d1%2582%25d0%25b5-%25d0%25bc%25d1%2583-%25d0%25bf%25d1%2580%25d0%25b5%25d0%25b2%25d1%258a%25d0%25bf%25d0%25bb%25d1%258a%25d1%2589%25d0%25b5%25d0%25bd%25d0%25b8%25d1%258f</link>
		<comments>http://blog.ivanatora.info/2008/11/03/%d0%b1%d1%83%d1%82%d0%be%d0%bd%d0%b0-del-%d0%b8-%d1%81%d1%82%d0%be%d1%82%d0%b5-%d0%bc%d1%83-%d0%bf%d1%80%d0%b5%d0%b2%d1%8a%d0%bf%d0%bb%d1%8a%d1%89%d0%b5%d0%bd%d0%b8%d1%8f/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 15:30:23 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[пинизи]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=175</guid>
		<description><![CDATA[Във FreeBSD-то имах един проблем, който ми тровеше нервите - бутона DEL или не работеше или имаше собствено мнение какво трябва да прави. Това му поведение се държеше както в шела (csh), така и във Vim. Какво точно ставаше: DEL се държи като BACKSPACE - трие знака от ляво на курсора при натискане на DEL [...]]]></description>
			<content:encoded><![CDATA[<p>Във FreeBSD-то имах един проблем, който ми тровеше нервите - бутона DEL или не работеше или имаше собствено мнение какво трябва да прави. Това му поведение се държеше както в шела (csh), така и във Vim.<br />
Какво точно ставаше:</p>
<ul>
<li>DEL се държи като BACKSPACE - трие знака от ляво на курсора</li>
<li>при натискане на DEL се изписва ?^ или ?H или нещо подобно</li>
<li>при натискане на DEL просто не се случва нищо</li>
</ul>
<p>Изметох Гугъл за отговори какво става с мен и накрая се оказа че имам полтъргайст в контролера на клавиатурата.<br />
Майтап <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ама се оказа че проблема с клавишите DEL и BACKSPACE е толкова заплетен, че чак ми стана чудно как в Windows и Linux до сега не съм имал проблеми. Ето ви един <a href='http://www.ibb.net/~anne/keyboard/keyboard.html'>примерен документ</a> да прочетете за какво става въпрос.<br />
Е, оказа се че тъпия проблем има тъпо решение. Във Vim командата</p>
<blockquote><p>:fixdel</p></blockquote>
<p>оправя всичко и съответно може да бъде добавена в ~/.vimrc<br />
За csh има подобна магия и това е:</p>
<blockquote>
<p>if ($term == "xterm" || $term == "vt100" || $term == "rxvt" \<br />
                || $term == "vt102" || $term !~ "con*") then<br />
# bind keypad keys for console, vt100, vt102, xterm<br />
bindkey "\e[1~" beginning-of-line  # Home<br />
bindkey "\e[7~" beginning-of-line  # Home rxvt<br />
bindkey "\e[2~" overwrite-mode     # Ins<br />
bindkey "\e[3~" delete-char        # Delete<br />
bindkey "\e[4~" end-of-line        # End<br />
bindkey "\e[8~" end-of-line        # End rxvt<br />
endif<br />
bindkey ^? delete-char # for console<br />
bindkey ^[[3~ delete-char # for xterm
</p></blockquote>
<p>Идеята на последните два реда обезмисля целия if-endif блок преди това. При мен работи само така - и с двете неща накуп <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/11/03/%d0%b1%d1%83%d1%82%d0%be%d0%bd%d0%b0-del-%d0%b8-%d1%81%d1%82%d0%be%d1%82%d0%b5-%d0%bc%d1%83-%d0%bf%d1%80%d0%b5%d0%b2%d1%8a%d0%bf%d0%bb%d1%8a%d1%89%d0%b5%d0%bd%d0%b8%d1%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Енкодване на клипове за k800 с mencoder и ffmpeg</title>
		<link>http://blog.ivanatora.info/2008/09/01/%d0%b5%d0%bd%d0%ba%d0%be%d0%b4%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%bb%d0%b8%d0%bf%d0%be%d0%b2%d0%b5-%d0%b7%d0%b0-%d1%82%d0%b5%d0%bb%d0%b5%d1%84%d0%be%d0%bd%d0%b0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b5%25d0%25bd%25d0%25ba%25d0%25be%25d0%25b4%25d0%25b2%25d0%25b0%25d0%25bd%25d0%25b5-%25d0%25bd%25d0%25b0-%25d0%25ba%25d0%25bb%25d0%25b8%25d0%25bf%25d0%25be%25d0%25b2%25d0%25b5-%25d0%25b7%25d0%25b0-%25d1%2582%25d0%25b5%25d0%25bb%25d0%25b5%25d1%2584%25d0%25be%25d0%25bd%25d0%25b0</link>
		<comments>http://blog.ivanatora.info/2008/09/01/%d0%b5%d0%bd%d0%ba%d0%be%d0%b4%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%bb%d0%b8%d0%bf%d0%be%d0%b2%d0%b5-%d0%b7%d0%b0-%d1%82%d0%b5%d0%bb%d0%b5%d1%84%d0%be%d0%bd%d0%b0/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 17:37:18 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[k800i]]></category>
		<category><![CDATA[mplayer]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=131</guid>
		<description><![CDATA[От месеци се мъчех да си смачкам някое друго видео, което да мога да си го гледам на телефона. GSM е Sony Ericsson k800. По спецификации поддържа: - видео 3GPP (H263, H264), MP4, Real8 - аудио MP4 (AAC, AAC+, E-AAC+), MP3, M4A, WMA, 3GP, AMR, WAV, G-MIDI 1, Real 8 - максимална разделителна способност 320х240 [...]]]></description>
			<content:encoded><![CDATA[<p>От месеци се мъчех да си смачкам някое друго видео, което да мога да си го гледам на телефона. GSM е Sony Ericsson k800. По спецификации поддържа:<br />
- видео 3GPP (H263, H264), MP4, Real8<br />
- аудио MP4 (AAC, AAC+, E-AAC+), MP3, M4A, WMA, 3GP, AMR, WAV, G-MIDI 1, Real 8<br />
- максимална разделителна способност 320х240<br />
- максимален битрейт - 400 kb/s - като това е общо видео битрейт + аудио битрейт<br />
До сега имам поне към 500 неуспешни опита да енкодна видео с mencoder и то да тръгне на телефона. Във файловия мениджър се появява една иконка с пакетче и контекстен бутон Send (като на всички непознати файлове) и толкоз. Никакъв опит за по-съществен дебъг. Какво не му харесва? Тук вече става въпрос за много сложна комбинация от видео енкодер, аудио енкодер, видео формат, видео контейнер, аудио кодек, битрейти...<br />
Ето някой от неуспешните опити с mencoder:</p>
<blockquote><p>mencoder input.avi -ovc lavc -lavcopts acodec=ac3:abitrate=64:vcodec=mpeg4:vbitrate=300 -oac mp3lame -lameopts br=64 -vf scale=320:240 -of lavf -lavfopts format=mp4 -o output.mp4</p></blockquote>
<p>Сега като го гледам този, не ми е чудно че не тръгва. Опитвам се да ползвам за аудио кодек АС3, а телефона май не го поддържа</p>
<blockquote><p>mencoder input.avi -ovc x264 -x264encopts bitrate=350 -oac mp3lame -lameopts br=64 -vf scale=320:240 -o output.mp4</p></blockquote>
<p>Едно време си мислех че x264 == MPEG-4, сега си мисля че не е точно така. Вече почнах да се обърквам кое е енкодер, кое е кодек и кое е контейнер...<br />
Та това са само последните два от няколкостотин опита и килограми изхабени нерви по mencoder. Не искам да кажа че mencoder си върши работата зле - виновно е задклавиатурното устройство <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  В други случаи mencoder върши чудесна работа, примерно това рипване на DVD:</p>
<blockquote><p>mencoder dvd://3 -dvd-device /mnt/cdrom/ -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate="800" -oac mp3lame -lameopts br=128 -o dvd.avi</p></blockquote>
<p>По едно време ми писна и се залових за алтернативния софтуер - ffmpeg. Не ми хареса man страницата му, където са описани по-малко от половината опции. Въпреки това, работата горе долу стана.<br />
Първо пробвах да преобразувам клипчето в 3GP, но се оказа че формата има комплект валидни разделителни способности, най-високата от които да ми върши работа беше 176х144. Не мерси.<br />
Съсредоточих се върху MP4:</p>
<blockquote><p>ffmpeg -i input.avi -ar 8000 -ac 1 -acodec libfaac -vcodec mpeg4 -s 320x240 -r 24 -b 300000 -ab 48000 -t 30 output.mp4</p></blockquote>
<p>Видеото излезе с подходящия thumbnail в мениджъра на телефона, даже и тръгна. Единствения кусур беше звука, който беше с отвратително качество.<br />
Ето подобрение:</p>
<blockquote><p>ffmpeg -i input.avi -ar 44100 -ac 1 -acodec libfaac -vcodec mpeg4 -s 320x240 -r 24 -b 250000 -ab 64000 output.mp4</p></blockquote>
<p>Аудио енкодера не ми даде да вдигна аудио битрейта докато не вдигнах и sampling rate-а. Намалих и видео битрейта, понеже на някои места видеото забавяше и се получаваше framedrop ефект. Накрая всичко тръгна на сто процента <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/09/01/%d0%b5%d0%bd%d0%ba%d0%be%d0%b4%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%bb%d0%b8%d0%bf%d0%be%d0%b2%d0%b5-%d0%b7%d0%b0-%d1%82%d0%b5%d0%bb%d0%b5%d1%84%d0%be%d0%bd%d0%b0/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Странни логове</title>
		<link>http://blog.ivanatora.info/2008/08/12/%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%bd%d0%b8-%d0%bb%d0%be%d0%b3%d0%be%d0%b2%d0%b5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d1%2581%25d1%2582%25d1%2580%25d0%25b0%25d0%25bd%25d0%25bd%25d0%25b8-%25d0%25bb%25d0%25be%25d0%25b3%25d0%25be%25d0%25b2%25d0%25b5</link>
		<comments>http://blog.ivanatora.info/2008/08/12/%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%bd%d0%b8-%d0%bb%d0%be%d0%b3%d0%be%d0%b2%d0%b5/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 15:15:57 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[линукс]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=113</guid>
		<description><![CDATA[Внезапно закъсах за място на линукския дял и проведеното разследване показа, че имам 300МВ *неща* в /var/spool/clientmqueue Дълги са по около килобайт и са толкова много че rm не иска да ги трие # rm * /bin/rm: Argument list too long. # ls &#124;wc -l 92562 Ето какво представлява едно от тези *неща*: cat dfm2C0t6aE007318 [...]]]></description>
			<content:encoded><![CDATA[<p>Внезапно закъсах за място на линукския дял и проведеното разследване показа, че имам 300МВ *неща* в /var/spool/clientmqueue Дълги са по около килобайт и са толкова много че rm не иска да ги трие <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<code> # rm * /bin/rm: Argument list too long.<br />
# ls |wc -l 92562<br />
</code><br />
Ето какво представлява едно от тези *неща*:<br />
<code> cat dfm2C0t6aE007318</p>
<p>array(6) { [0]=&gt; string(52) "? (192.168.0.3) at 00:C0:95:EC:B7:93 [ether] on eth0"</p>
<p>[1]=&gt; string(55) "? (85.187.229.129) at 00:30:48:8C:21:7A [ether] on eth1"</p>
<p>[2]=&gt; string(55) "? (85.187.229.200) at 00:1B:24:16:B3:2B [ether] on eth1"</p>
<p>[3]=&gt; string(55) "? (85.187.229.242) at 00:19:E0:0C:02:47 [ether] on eth1"</p>
<p>[4]=&gt; string(55) "? (85.187.229.183) at 00:13:8F:EA:CB:F3 [ether] on eth1"</p>
<p>[5]=&gt; string(0) ""</p>
<p>}<br />
</code> Помня че едно време си играх с arpwatch и той имаше някаква опция да праща отчети при смяна на MAC адрес по пощата, ама това не си е отчет ами просто някакъв дъмп от print_r() функцията в PHP. Шаш <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Изтриха се де:<br />
<code><br />
# rm *0<br />
# rm *1<br />
# rm *2<br />
.....<br />
</code> Сега да открия какво е оставило такива спомени там <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/08/12/%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%bd%d0%b8-%d0%bb%d0%be%d0%b3%d0%be%d0%b2%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как да монтираме файловата система на FreeBSD в Linux</title>
		<link>http://blog.ivanatora.info/2008/08/05/%d0%ba%d0%b0%d0%ba-%d0%b4%d0%b0-%d0%bc%d0%be%d0%bd%d1%82%d0%b8%d1%80%d0%b0%d0%bc%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%b0%d1%82%d0%b0-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0-%d0%bd%d0%b0-fr/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25ba%25d0%25b0%25d0%25ba-%25d0%25b4%25d0%25b0-%25d0%25bc%25d0%25be%25d0%25bd%25d1%2582%25d0%25b8%25d1%2580%25d0%25b0%25d0%25bc%25d0%25b5-%25d1%2584%25d0%25b0%25d0%25b9%25d0%25bb%25d0%25be%25d0%25b2%25d0%25b0%25d1%2582%25d0%25b0-%25d1%2581%25d0%25b8%25d1%2581%25d1%2582%25d0%25b5%25d0%25bc%25d0%25b0-%25d0%25bd%25d0%25b0-fr</link>
		<comments>http://blog.ivanatora.info/2008/08/05/%d0%ba%d0%b0%d0%ba-%d0%b4%d0%b0-%d0%bc%d0%be%d0%bd%d1%82%d0%b8%d1%80%d0%b0%d0%bc%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%b0%d1%82%d0%b0-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0-%d0%bd%d0%b0-fr/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 08:57:48 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[линукс]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=111</guid>
		<description><![CDATA[Това го има на няколко места в нета, но на всичките по нещо куцаше, така че реших да напиша как стана при мен. 1) В ядрото трябва да имате: CONFIG_UFS_FS (Filesystems -> Miscellanious -> UFS filesystem support) - можете да го сложите като модул, но ако искате по-късно автоматично монтиране от fstab, ще трябва да [...]]]></description>
			<content:encoded><![CDATA[<p>Това го има на няколко места в нета, но на всичките по нещо куцаше, така че реших да напиша как стана при мен.<br />
1) В ядрото трябва да имате:<br />
CONFIG_UFS_FS (Filesystems -> Miscellanious -> UFS filesystem support) - можете да го сложите като модул, но ако искате по-късно автоматично монтиране от fstab, ще трябва да го вкарате в ядрото. Ако го сложите като модул, във fstab ще опишете файловата система с noauto (иначе mount протестира че няма такава файлова система ufs - поне при мен не си зарежда автоматично модула) и в rc.local си добавете "modprobe ufs"<br />
CONFIG_BSD_DISKLABEL (Filesystems -> Partition types -> Advanced partition selection -> PC BIOS -> BSD disklabel) - това няма опция за компилиране на модул - само директно в ядрото</p>
<p>2) Ако ядрото ви е наред, време е да откриете точно кое устройство ви носи UFS файловата система.<br />
<code><br />
dmesg | grep bsd<br />
</code><br />
Ще се види нещо като:<br />
<code><br />
 sdb1: &lt;bsd: sdb6 sdb7 &gt;<br />
</code><br />
Тук Linux вижда 1 устройство - sdb1, но FreBSD си има по-особена организация на файловите системи. Вероятно сте запознати с това, така че ще ви го спестя. Да видим как са разпознати от boot процеса на Linux - sdb6 и sdb7.<br />
Едното ми е swap дяла, а другото root на файловата система. Ако се съмнявам кое кое е, ще пробвам по отделно:</p>
<p>3) Монтиране с mount:<br />
- изберете типа на UFS - при съвременните BSD-та (или поне на FreeBSD7) е ufs2<br />
<code><br />
# mount -r -t ufs -o ufstype=ufs2 /dev/sdb6 /mnt/bsd/<br />
# ls /mnt/bsd<br />
COPYRIGHT  boot   compat  dist     etc   lib      media  proc    root  sys  usr<br />
bin        cdrom  dev     entropy  home  libexec  mnt    rescue  sbin  tmp  var<br />
</code><br />
Уцелих от първия път <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>4) Описване в /etc/fstab<br />
<code><br />
/dev/sdb6       /mnt/bsd        ufs     ro,ufstype=ufs2    0       0<br />
</code><br />
По желание можете да сложите<br />
noauto - ако сте компилирали ufs support на модул вместо директно в ядрото<br />
users - за монтиране от обикновени потребители без root привилегии</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/08/05/%d0%ba%d0%b0%d0%ba-%d0%b4%d0%b0-%d0%bc%d0%be%d0%bd%d1%82%d0%b8%d1%80%d0%b0%d0%bc%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%b0%d1%82%d0%b0-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0-%d0%bd%d0%b0-fr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Здравей, Opera!</title>
		<link>http://blog.ivanatora.info/2008/07/24/%d0%b7%d0%b4%d1%80%d0%b0%d0%b2%d0%b5%d0%b9-opera/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b7%25d0%25b4%25d1%2580%25d0%25b0%25d0%25b2%25d0%25b5%25d0%25b9-opera</link>
		<comments>http://blog.ivanatora.info/2008/07/24/%d0%b7%d0%b4%d1%80%d0%b0%d0%b2%d0%b5%d0%b9-opera/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 10:02:14 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[нет]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=109</guid>
		<description><![CDATA[На скоро Firefox си изтегли последния ъпдейт от 2.х.х.х серията и се почнаха едни забивания, увивания... За няколко дена бях вбесен. А за версия 3 още дума не може да става да ми дойде вкъщи. Преди това бях забелязъл че в complete install-a на FreeBSD-то се включва и Opera, та реших да й дам шанс. [...]]]></description>
			<content:encoded><![CDATA[<p>На скоро Firefox си изтегли последния ъпдейт от 2.х.х.х серията и се почнаха едни забивания, увивания... За няколко дена бях вбесен. А за версия 3 още дума не може да става да ми дойде вкъщи.<br />
Преди това бях забелязъл че в complete install-a на FreeBSD-то се включва и Opera, та реших да й дам шанс. Поразцъках я малко... и се влюбих <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Това няма нищо общо с онова отроче на софтуерната индустрия, което помня от преди години. Дръпнали са светлинни години напред. Няма 'дай пари за лиценз', няма 'иди да хапнеш докато ти заредя страницата'...<br />
<b>Скорост</b> - браузъра зарежда за 1/3 от времето за което зареждаше FF. Отваря нови табове още преди да си кликнал два пъти и сменя от таб на таб за същото време. Това елементарно упражнение в FF си беше мъка. Всъщност сменянето от таб на таб беше единственото нещо, което правеше лампичката за HDD activity да свети непрекъснато.<br />
<b>Speed dial</b> - може да задавате няколко страници, на които да се прехвърлите. Нещо като bookmarks @ home page, но тук виждате в реално време съдържанието на страниците още преди да сте ги посетили в малки thumbnails.<br />
<b>Преотваряне на затворени табове</b> - до колкото помня във FF тази функционалност се добавяше от Tab Mix Plus и подобните му добавки.<br />
<b>Zoom</b> - реален zoom на страниците, а не само увеличаване на шрифта както беше във 2.х версиите на FF. Разликата между двете е че, когато се увеличава само шрифта, другите елементи остават несъразмерни и страницата започва да се размества (я пъхнете голям шрифт в малък div елемент)<br />
<b>Skins</b> - само си тегли скиновете, като имате прозорче за preview. Можете да четете коментари, да гледате ревюта и рейтинг на същото място.<br />
<b>Mail, Chat, RSS</b> - Opera има вградени клиенти. Обаче съм свикнал като цъкна на RSS линк да ми се отваря страницата за добавяне към Google Reader и малко ми е мъчно за FF <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />
<b>Още thumbnails</b> - има опция за добавяне на thumbnails към Ctrl+Tab превключването и към самите табове. Като задържите мишката върху затворен таб, пада един thumbnail със съдържанието на страницата. Не ми допада много, ама си е екстра гъзария.<br />
<b>Image control</b> - може да се изключи показването на картинки, или да се направи да се показват от локалния кеш.<br />
<b>User stylesheets</b> - ако не ви харесва как изглежда някоя страница, можете да й зададете ваш stylesheet, който да ползва. Във FF това ставаше с добавка.<br />
<b>Mouse gestures</b> - никога няма да привикна към каквито и да е жестове с мишката, така че това влиза в категория 'гъзария' <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />
<b>Notes</b> - има си прозорче за добавяне на кратки бележки. Аз отдавна съм си свикнал да си пазя бележките в браузъро-независима среда като тесктови файлове, така че това ми изглежда още една ненужна 'гъзария'.<br />
<b>AdBlock</b> - забрана за зареждане на определени елементи от страниците - които вие посочите. Много голям плюс - мразя да гледам банери. Това ставаше с добавка във FF.</p>
<p>Липсва ми Web Developer добавката от FF. Тук има нещо подобно - Tools -> Advanced -> Developer Tools, но е далече от версията на FF.<br />
В заключение на сравнението Opera <> Firefox (без да усетя съм почнал да ги сбивам <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) ще кажа че Opera ми изглежда като всичко добро от FF събрано на куп и на стероиди. Бързината на зареждане - ако някога FF стигне до там, ще стане революция.<br />
И все пак навика си е навик, и ако в някой скорошен ъпдейт на FF оправят забиванията и memory usage-то - пак ще почна да си го ползвам.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/07/24/%d0%b7%d0%b4%d1%80%d0%b0%d0%b2%d0%b5%d0%b9-opera/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Дяволчето е вече вкъщи</title>
		<link>http://blog.ivanatora.info/2008/07/18/%d0%b4%d1%8f%d0%b2%d0%be%d0%bb%d1%87%d0%b5%d1%82%d0%be-%d0%b5-%d0%b2%d0%b5%d1%87%d0%b5-%d0%b2%d0%ba%d1%8a%d1%89%d0%b8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b4%25d1%258f%25d0%25b2%25d0%25be%25d0%25bb%25d1%2587%25d0%25b5%25d1%2582%25d0%25be-%25d0%25b5-%25d0%25b2%25d0%25b5%25d1%2587%25d0%25b5-%25d0%25b2%25d0%25ba%25d1%258a%25d1%2589%25d0%25b8</link>
		<comments>http://blog.ivanatora.info/2008/07/18/%d0%b4%d1%8f%d0%b2%d0%be%d0%bb%d1%87%d0%b5%d1%82%d0%be-%d0%b5-%d0%b2%d0%b5%d1%87%d0%b5-%d0%b2%d0%ba%d1%8a%d1%89%d0%b8/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 16:04:46 +0000</pubDate>
		<dc:creator>ivanatora</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[линукс]]></category>

		<guid isPermaLink="false">http://ivanatora.info/?p=107</guid>
		<description><![CDATA[От няколко дни съм вкъщи с native-installed FreeBSD 7.0. Как стана това - взех си нов хард (WD3200AAKS), хвана ме летния саклет... и айде Инсталацията мина горе-долу като инсталация на Slackware. Малко се видях в чудо с местния еквивалент на fdisk - FreeBSD-то се инсталира на част от цял partition, който се нарича slice. Т.е. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ivanatora.info/test/freebsd-logo.gif" alt="FreeBSD logo" /><br />
От няколко дни съм вкъщи с native-installed FreeBSD 7.0. Как стана това - взех си нов хард (WD3200AAKS), хвана ме летния саклет... и айде <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Инсталацията мина горе-долу като инсталация на Slackware. Малко се видях в чудо с местния еквивалент на fdisk - FreeBSD-то се инсталира на част от цял partition, който се нарича slice. Т.е. partitions се състоят от по-малки дялове - slices. Инструмента за разделянето на диска си има автоматични настройки, но само като видях как ми разхвърля мястото в 3-4 mount points ми стана лошо и взех операцията на ръчно. Всъщност много хора подкрепят гъвкавото разпределение на файловата система - един partition за /home, един за /var, един за /usr и т.н... но до сега съм имал повече проблеми с такова разпределение, от колкото ползи.<br />
Повече четете надолу:<br />
<span id="more-107"></span><br />
Следващия готин момент беше избора на софтуер, който ще се качи. FreeBSD си е *истинска* операционна система и си идва с базов пакет софтуер, който ми е познат от линукс като gnu utils. След това се надграждат - Х, среди за разработка, документация и т.н. Пуснах го на lame install и качих всичко. Общо излезе към 4-5 GB.<br />
Първия проблем с който се сблъсках беше как да си инсталирам някакво приложение. До сега бях свикнал на ./configure &#038;& make &#038;& make install и ми беше писнало от това. Преродих се със системата на портовете. Какво са портовете? Колекция от 18000+ приложения, заемаща към 400MB дисково пространство. Всичко това е категоризирано по директории и приложения. Ако ти се прииска да инсталираш приложението Y, намираш в коя категория е и:<br />
cd /usr/ports/категория/Y<br />
make install clean<br />
Приложението се сваля от FreeBSD repositority, компилира се на твоята машина и се инсталира.<br />
Оказа се че има и по-бърз начин -<br />
pkg_add -r приложението<br />
Така се сваля готов прекомпилиран пакет и цялата инсталация отнема минимално време. Естествено и в двата случая се следят зависимостите на пакетите и ако трябва се свалят, инсталират или ъпгрейдват.<br />
Един голям плюс е че цялата система може да се ъпгрейдне през нета до нещо като CURRENT. Не питайте обаче колко време отнема. На прясно сложено FreeBSD 7.0 отне към два дни. Неприятно е - през 10 минути трябва да съм на компютъра за да му избирам опции за конфигурирането на някое приложение. Явно има начин тази стъпка да се автоматизира, но още не съм го намерил. За утешение ще кажа че всеки следващ ъпгрейд на пакетите става все по-безболезнено. Ако се прави 1-2 пъти седмично отнема не повече от час-два.<br />
А нали и Вуте е хакер - трябва да може сам да си прекомпилира ядрото. Ами не видях различни версии на това ядро, осен тази която идва с операционната система. Няма 2.4.26, няма 17.05.1543... има FreeBSD 6 и FreeBSD 7 <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Конфигурационния файл е абсолютно елементарен - на стотина реда са описани какви устройства трябва да поддържа и какви специални опции трябва да са активирани. Ядрото се компилира с точно две команди, след което може да се направи рестарт. Няма такова понятие като kernel panic (или поне още не съм се сблъсквал <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Няма стотици хиляди настройки от типа да укажете какъв е чипа на лан картата ви, с колко пина е и на каква тактова честота работи <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Единствения минус е, че ако сте объркали нещо в конфигурационния файл, ще го разберете доста късно. При мен първия път се случи - навици - да разкарам всички Wireless устройства, и след това някъде около 30 минути след като е започнало make, да изреве. Даде ми грешка, която се дължеше на това че съм махнал Wireless support като цяло, а съм забравил да махна едно от тези устройства, което е по-надолу в USB секцията. Та, един configcheck tool ще е много полезен.<br />
А после се оказа че въобще няма нужда да се съкращава конфигурационния файл, защото което го няма вътре бива компилирано... на модул. Дори е препоръчително ядрото да не се бара - освен ако искате да си начешете крастата, друга файда няма. Някои неща е добре да не се вкарват директно в ядрото - примерно направих грешката да си сложа firewall:<br />
options IPFIREWALL<br />
options IPFIREWALL_VERBOSE<br />
optins IPDIVERT<br />
След инсталация се оказа че съм firewall-нат отвсякъде - default drop policy <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ама аз съм тъп и упорит, сложих си правило за allow на всички пакети и продължих с омазването на ядрото. Тук има няколко приложения, които се занимават с kernel level packet mangling - ipfw (горното), ipf и pf. Реших да пробвам ipf и съответно набухах:<br />
options IPFILTER<br />
След рестарт имаше същата ситуация на тотално откъсване отвсякъде, а това се оправяше само с въвеждането на:<br />
ipf -D<br />
И така след всеки рестарт.<br />
Идеята е ясна - каквото не ви трябва в ядрото, не го тъпчете там. Всичко си го има на модули.<br />
Хайде да направя едно обобщение за това какво ми харесва и какво не ми харесва.<br />
<b>Не ми харесаха:</b><br />
1) Няма файлова система /proc. Свикнал съм си на нея. Всичките опции са достъпни и през sysctl (както е и в Slackware), ама просто ме дразни липсата.<br />
2) Reiserfs се монтира само с права за четене.<br />
3) Някои много важни програми, които са разработени специално за линукс липсват тук. Няма iptraf, skype, flash player. Някои от тези вървят през линукс емулация (skype върви даже по-добре тук отколкото в линукс), но дори само за липсата на Flash Player си заслужава да се сложи точка в 'не ми хареса'. Даже две точки.<br />
4) Пак - няма флаш. Из нета са изписани стотици форуми и документи как да се подкара емулация - че било през линукс порта на firefox, че било то през странични плъгини, през съвсем трети компилации... При мен не стана.<br />
5) Няма free - онова спретнато приложение, което дава информация колко памет имате свободна (плюс-минус буфери и кешове). Тук пак може да се види свободната памет, ама не е сметната така... просто е насипана - всичко, заето, заето-буфери, заето-кешове, та върви да си го смяташ.<br />
6) Липсата на ALSA. Всичко минава през OSS, а така и още не мога да пусна arts.</p>
<p><b>Харесаха ми:</b><br />
1) 18 000 приложения в port системата. Това число се увеличава.<br />
2) Светкавичната инсталация на прекомпилирани пакети.<br />
3) Елементарния механизъм на прекомпилация на ядро.<br />
4) Дори и да се забрави нещо при конфигурацията на ядрото - то ще бъде компилирано на модул.<br />
5) В ps -Af мернах процес с PID - число по-голямо от 65535. Което ме изненада, защото в Slackware номерата на процесите след 65535 се връщат обратно и започват от 0 - където има свободно число. Не знам защо го споменавам като плюс, просто ме изненада приятно.<br />
6) Има съвместимост с конфигурационните файлове на всяка *nix система. Примерно, взех си всичките скрити папки от /home/ivanatora на линукса, и си ги копирах тук. Резултат - всичките програми работят със същите настройки, с каквито са били преди - на другата система.<br />
7) Монтира без проблеми FAT/NTFS/EXT2/3 с права за четене и запис.<br />
8 ) Документация - на всичко. Тук man pages са издигнати на едно доста по-високо ниво - това не са само справочници за опциите на приложенията. Това вече си е пълна документация на почти всеки процес, който протича в системата. Примери:<br />
man rc - информация за организацията на стартиращите rc скриптове<br />
man ports - информация за портовете - какво представляват, как се работи<br />
man rl - информация за Realtek лан карти <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Доста хардуер е описан по този начин, което си е HOWTO за пускане и работа.</p>
<p>Заключение: FreeBSD е идеално за домашна система. Лесен ъпгрейд и поддръжка - това ми беше липсвало до сега <img src='http://blog.ivanatora.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ivanatora.info/2008/07/18/%d0%b4%d1%8f%d0%b2%d0%be%d0%bb%d1%87%d0%b5%d1%82%d0%be-%d0%b5-%d0%b2%d0%b5%d1%87%d0%b5-%d0%b2%d0%ba%d1%8a%d1%89%d0%b8/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

