<?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>Kamenitza Notepad</title>
	<atom:link href="http://kamenitza.org/feed" rel="self" type="application/rss+xml" />
	<link>http://kamenitza.org</link>
	<description>Още една халба с акъл...</description>
	<lastBuildDate>Sun, 08 Jan 2012 21:38:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Send email with attachment in bash shell</title>
		<link>http://kamenitza.org/archives/784</link>
		<comments>http://kamenitza.org/archives/784#comments</comments>
		<pubDate>Sun, 08 Jan 2012 21:35:57 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[attach]]></category>
		<category><![CDATA[attachment]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[mutt]]></category>
		<category><![CDATA[send]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=784</guid>
		<description><![CDATA[Да изпратим писмо с прикачени файлове в bash. Удобно и лесно това става с меил-клиента mutt: # echo &#34;Body&#34; &#124; mutt -s &#34;Subject&#34; -a file1 -a file2 user@domain.tld]]></description>
			<content:encoded><![CDATA[<p>Да изпратим писмо с прикачени файлове в bash.<br />
Удобно и лесно това става с меил-клиента <strong>mutt</strong>:<br />
<code># echo &quot;Body&quot; | mutt -s &quot;Subject&quot; -a file1 -a file2 user@domain.tld</code></p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/784/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sendmail relay to Gmail</title>
		<link>http://kamenitza.org/archives/774</link>
		<comments>http://kamenitza.org/archives/774#comments</comments>
		<pubDate>Sat, 07 Jan 2012 09:03:35 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[authenticate]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[relay]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[smarthost]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=774</guid>
		<description><![CDATA[Най-сигурният начин за изпращане на поща от какъвто и да е сървър е препращането на писмата към пощенски сървър, който отговаря на всички стандарти, така че кореспонденцията идваща от него да не се счита за спам и да не бъде филтрирана. Ще дам пример как sendmail ще &#8220;релейва&#8221; през пощенските сървъри на Гугъл. Това означава, [...]]]></description>
			<content:encoded><![CDATA[<p>Най-сигурният начин за изпращане на поща от какъвто и да е сървър е препращането на писмата към пощенски сървър, който отговаря на всички стандарти, така че кореспонденцията идваща от него да не се счита за спам и да не бъде филтрирана.<br />
Ще дам пример как sendmail ще &#8220;релейва&#8221; през пощенските сървъри на Гугъл. Това означава, че задължително трябва да имаме активен пощенски акаунт в gmail.com.</p>
<p>В <strong>/etc/mail/sendmail.mc</strong> намираме следният ред:<br />
<code>dnl define(`SMART_HOST&#039;, `smtp.your.provider&#039;)dnl</code><br />
и го корегираме на:<br />
<code>define(`SMART_HOST&#039;, `smtp.gmail.com&#039;)dnl</code></p>
<p>Следва компилация на направените промени:<br />
<code># m4 /etc/mail/sendmail.mc &gt; /etc/mail/sendmail.cf</code><br />
<em>(Необходимо е пакета sendmail-cf да бъде инсталиран)</em></p>
<p>В /etc/mail/access добавяме реда с данните за аутентикация:<br />
<code>AuthInfo:smtp.gmail.com &quot;U:username@gmail.com&quot; &quot;P:password&quot; &quot;M:PLAIN&quot;</code></p>
<p>Следва отново &#8220;компилация&#8221; на направената промяна:<br />
<code># makemap hash /etc/mail/access &lt; /etc/mail/access</code></p>
<p>Всички домейни писмата, до които не трябва да се изпращат към smart host-а се описват в <strong>/etc/mail/local-host-names</strong> по един на ред:<br />
<pre><code>loclahost
localhost.localdomain
hostmaster.kamenitza.org</code></pre><br />
Така ще избегнете всички писма генерирани от локалните демони да излизат в Интернет.</p>
<p>И рестартиране на sendmail:<br />
<code># /etc/init.d/sendmail restart</code></p>
<p>Не забравяйте да настроите sendmail да се стартира автоматично с операционната система:<br />
<code># chkconfig sendmail on</code></p>
<p>Туй то <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/774/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Пловдивските наркомани</title>
		<link>http://kamenitza.org/archives/766</link>
		<comments>http://kamenitza.org/archives/766#comments</comments>
		<pubDate>Sun, 04 Dec 2011 18:17:27 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Мрън-мрън]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=766</guid>
		<description><![CDATA[И все пак личната собственост не е неприкосновена&#8230; Ей така си заварих колата тази сутрин. Мамка му!]]></description>
			<content:encoded><![CDATA[<p>И все пак личната собственост не е неприкосновена&#8230;<br />
Ей така си заварих колата тази сутрин.<br />
<a href="http://kamenitza.org/wp-content/uploads/04122011.jpg"><img class="size-medium wp-image-767 aligncenter" title="04122011" src="http://kamenitza.org/wp-content/uploads/04122011-300x225.jpg" alt="" width="300" height="225" /></a><br />
<a href="http://kamenitza.org/wp-content/uploads/04122011001.jpg"><img class="size-medium wp-image-768 aligncenter" title="04122011(001)" src="http://kamenitza.org/wp-content/uploads/04122011001-300x225.jpg" alt="" width="300" height="225" /></a><br />
Мамка му!</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/766/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DRBD &#8211; replicated filesystem</title>
		<link>http://kamenitza.org/archives/752</link>
		<comments>http://kamenitza.org/archives/752#comments</comments>
		<pubDate>Sat, 26 Nov 2011 16:48:05 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[drbd]]></category>
		<category><![CDATA[ext3]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[redundant]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[sync]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=752</guid>
		<description><![CDATA[За да сме сигурни, че няма да загубим някаква информация обикновено я архивираме, нали? Веднъж месечно, веднъж седмично, веднъж дневно? Ами ако ни е необходимо по-често архивиране, на ресурс, който постоянно се актуализира, като база данни например? Някои сървъри за бази данни (като mysql) осигуряват собствено репликиране върху отдалечен сървър. Нещо по-добро е репликирането на [...]]]></description>
			<content:encoded><![CDATA[<p>За да сме сигурни, че няма да загубим някаква информация обикновено я архивираме, нали? Веднъж месечно, веднъж седмично, веднъж дневно? Ами ако ни е необходимо по-често архивиране, на ресурс, който постоянно се актуализира, като база данни например? Някои сървъри за бази данни (като mysql) осигуряват собствено репликиране върху отдалечен сървър.</p>
<p>Нещо по-добро е репликирането на цяла файлова система на блоково ниво. Всяка една промяна върху диска се репликира моментално каквато и да е тя &#8211; и то без софтуерът, който ползва тази файлова система да разбере.</p>
<p>Удобен начин да се направи това в линукс е чрез <a href="http://www.drbd.org/" target="_blank">DRBD</a>. Тъй като репликацията е на много ниско ниво, не можем да репликираме отделни директории или файлове &#8211; работим с цели дискове или дялове (партишъни). Тъй като не всеки разполага със свободен диск/дял, който да ползва за репликацията, ще дам пример с &#8220;изкуствен&#8221; диск, създаден във файл върху текущата файлова система (loopback image). Т.е. правим един файл с размер 1GB, присъединяваме го като виртуален локален диск, правим му файлова система по желание и вече е в бизнеса <img src='http://kamenitza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Създаваме файл с размер 1GB (на двата сървъра между, които ще репликираме):<br />
<code># dd if=/dev/zero of=/root/disk.img bs=1M count=1024</code></p>
<p>Сега да го прилепим към локално устройство <strong>/dev/loop0</strong>:<br />
<code># losetup /dev/loop0 /root/disk.img</code></p>
<p>Това до тук ще работи, но докато не рестартираме машината. За тази цел правим един init-скрипт, който да върши тази работа при стартиране на операционната система:<br />
<pre><code>#!/bin/bash
# lofsd:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Loopback filesystem
#
# chkconfig:&nbsp;&nbsp;&nbsp;&nbsp;- 10 80
# description:&nbsp;&nbsp;Creates loopback device
DRBD_SRC=&quot;/root/disk.img&quot;
DRBD_DEVICE=&quot;/dev/loop0&quot;
LOSETUP_CMD=&quot;/sbin/losetup&quot;
RETVAL=0
start() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Connecting loop devices $DRBD_DEVICE&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$LOSETUP_CMD $DRBD_DEVICE $DRBD_SRC
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $RETVAL
}
stop() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Releasing loop devices $DRBD_DEVICE&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$LOSETUP_CMD -d $DRBD_DEVICE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $RETVAL
}
restart() {
&nbsp;&nbsp;&nbsp;&nbsp;stop
&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;start
}
case &quot;$1&quot; in
&nbsp;&nbsp;&nbsp;&nbsp;start)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;stop)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;restart)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;restart
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*)
&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Usage: $0 {start|stop|restart}&quot;
&nbsp;&nbsp;&nbsp;&nbsp;exit 1
esac
exit $?
exit $RETVAL</code></pre><br />
Записваме го под името <strong>/etc/init.d/lofsd</strong>. След това го правим изпълним:<br />
<code># chkmod +x /etc/init.d/lofsd</code></p>
<p>Регистрираме скрипта като системна услуга и го активираме:<br />
<pre><code># chkconfig --add lofsd
# chkconfig lofsd on</code></pre></p>
<p>До тук вече имаме един локален виртуален диск на <strong>/dev/loop0</strong> и нищо повече. Сега е ред да инсталираме и самото DRBD:<br />
<code># yum -y install drbd kmod-drbd</code></p>
<p>Конфигурационният му файл /etc/drbd.conf, е съвсем празен веднага след инсталацията, но има много добре коментиран примерен такъв в <strong>/usr/share/doc/drbd</strong>. Набързо спретвам следната конфигурация, която изглежда сложна само на пръв поглед (еднаква е и за двата сървъра):<br />
<pre><code>global { usage-count no; }
resource repdata {
&nbsp;&nbsp;&nbsp;&nbsp;protocol C;
&nbsp;&nbsp;&nbsp;&nbsp;startup { wfc-timeout 0; degr-wfc-timeout&nbsp;&nbsp;&nbsp;&nbsp; 120; }
&nbsp;&nbsp;&nbsp;&nbsp;disk { on-io-error detach; }
&nbsp;&nbsp;&nbsp;&nbsp;net {&nbsp;&nbsp;cram-hmac-alg &quot;sha1&quot;; shared-secret &quot;ie74t6384&quot;; }
&nbsp;&nbsp;&nbsp;&nbsp;syncer { rate 10M; }
&nbsp;&nbsp;&nbsp;&nbsp;on n1.kamenitza.org {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device /dev/drbd0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disk /dev/loop0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address 10.0.0.1:7788;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta-disk internal;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;on n2.kamenitza.org {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device /dev/drbd0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disk /dev/loop0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address 10.0.0.2:7788;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meta-disk internal;
&nbsp;&nbsp;&nbsp;&nbsp;}
}</code></pre></p>
<p>Няма да коментирам кой ред какво върши &#8211; вероятно само очевидните неща като, пътища до устройства и адреси ще трябва да редактирате &#8211; останалото е почти универсално. Все пак, ако се интересувате &#8211; разгледайте примерният <strong>drbd.conf</strong>, който е изключително добре коментиран. Когато приключите с конфигурацията &#8211; копирайте я и на вторият сървър.</p>
<p>Време е да инициализираме мета-данните (и на двата сървъра):<br />
<pre><code># drbdadm create-md repdata
v08 Magic number not found
v07 Magic number not found
v07 Magic number not found
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.</code></pre></p>
<p>Сигурно веднага ще опитате да стартирате услугата, но може да ударите стена:<br />
<pre><code># /etc/init.d/drbd start
Restarting all DRBD resourcesNo response from the DRBD driver! Is the module loaded?
Command &#039;/sbin/drbdsetup /dev/drbd0 down&#039; terminated with exit code 20
command exited with code 20
ERROR: Module drbd does not exist in /proc/modules</code></pre></p>
<p>Ами това помага <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> :<br />
<code># modprobe drbd</code></p>
<p>След като сте стартирали сървиса (и на двата сървъра), можете да наблюдавате статуса на дисковия ресурс ето така:<br />
<pre><code># cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11:30:17
 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
&nbsp;&nbsp;&nbsp;&nbsp;ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:1048508</code></pre></p>
<p>Ако някой забелязва &#8211; и двете копия са вторични (secondary). Такива ще си останат, докато ние не изберем, кой да е водещият сървър и в неговия шел пуснем ето това:<br />
<code># drbdadm -- --overwrite-data-of-peer primary repdata</code></p>
<p>Я да видим статуса:<br />
<pre><code># cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11:30:17
 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
&nbsp;&nbsp;&nbsp;&nbsp;ns:16932 nr:0 dw:0 dr:19168 al:0 bm:1 lo:0 pe:4 ua:70 ap:0 oos:1031676
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&gt;....................] sync&#039;ed:&nbsp;&nbsp;2.0% (1031676/1048508)K
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finish: 0:00:59 speed: 16,832 (16,832) K/sec</code></pre></p>
<p>Сякаш работи и вече тече репликация, а? <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Остана да направим една файлова система на DRBD диска:<br />
<code># mkfs -t ext3 /dev/drbd0</code></p>
<p>И да го монтираме (създайте директорията /mnt/disk и на двата сървъра, но го монтирайте само на първия):<br />
<code>mount /dev/drbd0 /mnt/disk</code></p>
<p>След приключване на репликацията, нещата изглеждат горе долу така:<br />
<pre><code># cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
 0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
&nbsp;&nbsp;&nbsp;&nbsp;ns:56 nr:1412 dw:1468 dr:21 al:2 bm:3 lo:0 pe:0 ua:0 ap:0 oos:0</code></pre></p>
<p>Ами можем вече да го изпробваме. Копирайте някакви файлове на диска преди това.<br />
Ръчно размонтираме и правим вторичен първият сървър (n1):<br />
<code># umount /mnt/disk ; drbdadm secondary repdata</code></p>
<p>Сега отиваме на втория (n2) и правим следното:<br />
<code># drbdadm primary repdata ; mount /dev/drbd0 /mnt/disk</code></p>
<p>И трябва да виждаме същите файлове, които преди това копирахме от сървър n1.</p>
<p>За да си улесним живота в бъдеще можем да редактираме и /etc/fstab, който до момента изглежда горе-долу така:<br />
<pre><code>LABEL=/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 1
tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/shm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
devpts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/dev/pts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devpts&nbsp;&nbsp;gid=5,mode=620&nbsp;&nbsp;0 0
sysfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /sys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
LABEL=SWAP-sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0</code></pre></p>
<p>Добавяме следният ред най-долу:<br />
<pre><code>/dev/drbd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/mnt/disk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;noauto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
</code></pre></p>
<p>Така, че файлът да придобие този вид:<br />
<pre><code>LABEL=/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 1
tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/shm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
devpts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/dev/pts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devpts&nbsp;&nbsp;gid=5,mode=620&nbsp;&nbsp;0 0
sysfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /sys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
LABEL=SWAP-sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0
/dev/drbd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/mnt/disk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;noauto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0</code></pre></p>
<p>Цялата тази глезотия става изключително полезна, когато се съвмести с <strong>Heartbeat</strong>. Тогава в <strong>/etc/ha.d/haresources</strong> добавяме следният ред:<br />
<pre><code>n1.kamenitza.org&nbsp;&nbsp; drbddisk::repdata Filesystem::/dev/drbd0::/mnt/disk::ext3::rw
</code></pre></p>
<p>Ще се радвам, ако някой успее да приложи това някъде и сподели коментари <img src='http://kamenitza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/752/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iptables: Unknown error 18446744073709551615</title>
		<link>http://kamenitza.org/archives/749</link>
		<comments>http://kamenitza.org/archives/749#comments</comments>
		<pubDate>Sun, 13 Nov 2011 15:02:13 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[18446744073709551615]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=749</guid>
		<description><![CDATA[Неизвестна грешка&#8230; Никаква представа нямам какво я поражда &#8211; появява се когато си поиска при задаване на правила в iptables. Ядрото е: Linux xxx 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux Реших проблема като разреших centos-plus хранилището на yum: /etc/yum.repos.d/CentOS-Base.repo: [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&#38;arch=$basearch&#38;repo=centosplus #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 [...]]]></description>
			<content:encoded><![CDATA[<p>Неизвестна грешка&#8230;<br />
Никаква представа нямам какво я поражда &#8211; появява се когато си поиска при задаване на правила в iptables.<br />
Ядрото е:<br />
<code>Linux xxx 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux</code><br />
Реших проблема като разреших centos-plus хранилището на yum:<br />
<strong>/etc/yum.repos.d/CentOS-Base.repo:</strong><br />
<pre><code>[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;arch=$basearch&amp;repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5</code></pre></p>
<p>И актуализирах ядрото с<br />
<code>yum upgrade</code></p>
<p>Към явно по-прилична компилация:<br />
<code>Linux xxx 2.6.18-274.7.1.el5.centos.plus #1 SMP Thu Oct 20 19:28:06 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux</code></p>
<p>Проблема повече не се е появявал <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/749/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transfer RRD files to another platform</title>
		<link>http://kamenitza.org/archives/745</link>
		<comments>http://kamenitza.org/archives/745#comments</comments>
		<pubDate>Sun, 23 Oct 2011 20:40:05 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[32bit]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[rrd]]></category>
		<category><![CDATA[rrdtool]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=745</guid>
		<description><![CDATA[Имам предвид трансферирането на RRD базите данни от 64 битова платформа на 32 битова. Да, това не става просто с копиране на самите RRD файлове &#8211; те са различни в зависимост от това на каква платформа са създадени за по-добра оптимизация и бързодействие. При просто копиране на файловете ще получаваме грешки от сорта на: rrd_graph() [...]]]></description>
			<content:encoded><![CDATA[<p>Имам предвид трансферирането на RRD базите данни от 64 битова платформа на 32 битова. Да, това не става просто с копиране на самите RRD файлове &#8211; те са различни в зависимост от това на каква платформа са създадени за по-добра оптимизация и бързодействие.</p>
<p>При просто копиране на файловете ще получаваме грешки от сорта на:<br />
<code>rrd_graph() ERROR: This RRD was created on another architecture</code></p>
<p>Най-доброто, което може да се направи е базите данни да се експортират в XML формат, след това тези XML файлове да се копират и да се конвертират обратно в RRD.</p>
<p>Експортиране в XML:<br />
<code>for i in `find -name &quot;*.rrd&quot;`; do rrdtool dump $i &gt; $i.xml; done</code></p>
<p>Конвертиране обратно в RRD:<br />
<code>for i in `find -name &quot;*.xml&quot;`; do rrdtool restore $i `echo $i | sed s/.xml//g`; done</code></p>
<p>Енжой <img src='http://kamenitza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/745/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Squid and proxy authentication</title>
		<link>http://kamenitza.org/archives/742</link>
		<comments>http://kamenitza.org/archives/742#comments</comments>
		<pubDate>Sun, 25 Sep 2011 17:09:28 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=742</guid>
		<description><![CDATA[Целта е да се изконфигурира прокси, което да допуска всеки &#8220;регистриран&#8221; клиент &#8211; такъв с име и парола. Squid поддържа много методи за уторизация на потребители, но най-лесен ми се струва NCSA. Ще дам пример със squid на CentOS 5.6 64bit. Създаваме файла с потребителските имена и пароли: # htpasswd -c /etc/squid/passwd user Само ще [...]]]></description>
			<content:encoded><![CDATA[<p>Целта е да се изконфигурира прокси, което да допуска всеки &#8220;регистриран&#8221; клиент &#8211; такъв с име и парола.</p>
<p>Squid поддържа много методи за уторизация на потребители, но най-лесен ми се струва NCSA. Ще дам пример със squid на CentOS 5.6 64bit.</p>
<p>Създаваме файла с потребителските имена и пароли:<br />
<code># htpasswd -c /etc/squid/passwd user</code><br />
Само ще попита за парола.</p>
<p>Модула ncsa_auth обикновено е инсталиран заедно със squid. Можете да проверите ето така:<br />
<code># rpm -ql squid | grep ncsa_auth</code></p>
<p>Следните няколко реда се добавят в <strong>squid.conf</strong>:<br />
<pre><code>auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Please authenticate!
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off</code></pre></p>
<p>Без ACL запис няма да минем естествено <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<pre><code>acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users</code></pre></p>
<p>Необходим е рестарт на squid.</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/742/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Спомени от Механото и инж. Гацев</title>
		<link>http://kamenitza.org/archives/663</link>
		<comments>http://kamenitza.org/archives/663#comments</comments>
		<pubDate>Sat, 20 Aug 2011 17:08:13 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Фун]]></category>
		<category><![CDATA[гацев]]></category>
		<category><![CDATA[механото]]></category>
		<category><![CDATA[пазарджик]]></category>
		<category><![CDATA[тмт]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=663</guid>
		<description><![CDATA[Средното си образование изкарах в тогавашното ТМТ – Пазарджик, специалност електрообзавеждане на промишлени предприятия (ЕОПП). В 3-ти и 4-ти курс имахме часове при г-н Г. Гацев, който още е ярък спомен в съзнанието на всички ни. Не само с наученото в часовете при него, ами и с всичко преживяно. Меко казано е, че той беше [...]]]></description>
			<content:encoded><![CDATA[<p>Средното си образование изкарах в тогавашното ТМТ – Пазарджик, специалност електрообзавеждане на промишлени предприятия (ЕОПП). В 3-ти и 4-ти курс имахме часове при г-н Г. Гацев, който още е ярък спомен в съзнанието на всички ни. Не само с наученото в часовете при него, ами и с всичко преживяно. Меко казано е, че той беше голям чешит. Та в часовете при него си водех дневник с по-интересни фрази и на гърба на тетрадките си. Скоро попаднах на това и отново се смях доста. Ето и препис от почти всичко. Посмейте се.<br />
Повечето ни часове бяха в електрическата лаборатория – стая напълно електро-обезопасена – дебел гумен балатум (2см), радиаторите, тръбите и всички метални хави бяха заградени с дървени решетки, влизаше се със специални „електроизолационни“ пантофи, за които събрахме по 11лв в началото на годината… другото си го представете.<br />
(правописът следва интонацията и произношението)</p>
<p>(кара се на Ицо)<br />
А уе м&#8217;че, не приказвай кат&#8217; вятърна мелница !</p>
<p>(обяснява, че директорката иска да носим ръкавици по време на работа, за да не ни удари ток)<br />
А… „изгъзици“, дет` му викате виъ…</p>
<p>(разяснява охрана на труда и първа помощ)<br />
Ако… нали… са узувеш под напрежение…..</p>
<p>(разказва как някакъв ученик навремето изпитвал трансформатор)<br />
Добре, че тогава камъните бяха меки и ни гу утрепа токъ…</p>
<p>(обяснява как да си правим протоколите)<br />
Не бъди бълък!</p>
<p>(и на контролното упражнение който не е учил…)<br />
Ша стани тчва детч ни са-а случвало…</p>
<p>(обяснява как се влиза в Енерго-то)<br />
Тряа да има стратегия и тактика в тоя живот.</p>
<p>(показва ни една изпитваща програмка на Правец-осмаците)<br />
Е т&#8217;ва тука, е машинка за писане на двойки !</p>
<p>(обяснява какво става с ученик (който е преписал) на изпит когато учителя пита)<br />
„Защо?“ – и той умира прав</p>
<p>(говори за един от нашия клас, който отиде до ксерокса да снима)<br />
Тя… Томата си знае работата…</p>
<p>(домашна работа)<br />
На лис&#8217; голям формат – устно…</p>
<p>(говори за тия от трети курс)<br />
Въртят са кат&#8217; индянци пред компютър…</p>
<p>(оформяне на срочните оценки)<br />
Срока свършва &#8216;неска, утре започва на ново.</p>
<p>(става въпрос за Томата, когато беше болен)<br />
Трудолюбив, ама изпуснал влака.</p>
<p>(три пъти му заби компютъра (осмака, който е поправял поне 60 пъти сам))<br />
(мърмори си)<br />
Толко са ми силите… или акъла… не знам…</p>
<p>(пак обяснява какво е на изпит)<br />
&#8216;Секи си гледа гъзъ до стената и не го интересува…</p>
<p>(девизът)<br />
Работата по спасяване на давещия се е работа предимно на ръцете на самия давещ се.</p>
<p>(обяснява, че ако не учиш…)<br />
Недей чакай да падне тавана! Киното е лятно.</p>
<p>(дава допълнителна (трудна) задача за домашна)<br />
Внимание!!! – Задачата е орех.</p>
<p>(обяснява една схема)<br />
Ако… ммм… и сега ! ммм…</p>
<p>(говори за Топалов, щото нали не учел, но пак минал)<br />
Пие бира, плаща лимонада.</p>
<p>(Томата идва и вика „Ма той Топалов не носи &#8216;серокопията“)<br />
Ша му спукам гьона!</p>
<p>(защо техниката е стара и потрошена)<br />
Работата е държавна!<br />
Организацията е българска.</p>
<p>(когато искаш да имаш по-висока оценка)<br />
Ааа… Играта е „ти гониш !“</p>
<p>(защо тия, които са учили имат тройки, а Топалов, койъо не учи &#8211; също)<br />
Даа… той Топалов прави инфлация на оценките… начи… ша дигнем &#8216;сички останали уценки с една единица.</p>
<p>(редовния мохабет когато си пропуснал нещо в протокола)<br />
Ууубаче…</p>
<p>(излиза директорката от стаята и той са развиква)<br />
Събрани сте повече народ за по-евтино!</p>
<p>(как се влиза в Енергото)<br />
Тактиката печели битката, а стратегията войната!</p>
<p>(говори за наща група след контролното (имахме хубави оценки))<br />
Хмм… групата има смисъл!</p>
<p>(някои не може да си направи задачата)<br />
Тя… работата е мозъчна!</p>
<p>(пак)<br />
Плуване се учи с плуване.</p>
<p>(говори за преговор)<br />
Ако са задълбаеме в теорията по машини…</p>
<p>(началото на втория срок. пише двойка на Ицо)<br />
Аз така… да та свикна, че сме след ваканция.</p>
<p>(разказва за някакъв ученик, който не учел)<br />
Ай да видим дали ша остане на изпит!<br />
ОПАААА! – Изпит.</p>
<p>(директорката отново му плямпа за ръкавици, но той вади едно ръководство поне 500 стр. и вика „Е тва е правилника &#8211; покажи ми къде пише нещо за ръкавици!“, директорката излиза след малко, той ни гледа и се хили)<br />
Е т&#8217;ва е удар под… ребрата.</p>
<p>(нали техниката е стара и счупена…)<br />
Аз съм длъжен да направя от нищо нещо.</p>
<p>(Гацев светка директорката по някав въпрос)<br />
Директорката: „А-а-ами… ?!“<br />
Гацев: „… ти командваш парада !“</p>
<p>(някой дето учи, ама не редовно)<br />
То… тя… кокошката зела да мъти яйца, ама… не ги доизмътила.</p>
<p>(говори за Томата, който имаше няколко двойки)<br />
Той тря&#8217;а да изкара поне две тройки… и едното да е четири !</p>
<p>(сочи на дъската)<br />
Пиши заглавието &#8211; отзад на пред !</p>
<p>(иска да каже „трябва да си по-нисък от тревата“, нали, ако не си си научил урока)<br />
Тря&#8217;а да си по-нисък от… ко беше там…</p>
<p>(диктува ни след упражнение на края на часа)<br />
Пиши!<br />
„Ако се появя по лаборатория без протокол – ще ме блъсне влак!“</p>
<p>(започва да диктува)<br />
Хмм… Пиши!<br />
Хмм… не, то&#8217;о волтметър не му е мястото тука…<br />
Пиши!<br />
И сега… ако латера беше на максимум, хммм, чай да видим к&#8217;о щеше да стане…<br />
Добре. Пиши!<br />
(влиза Христев: „Добър ден.“, Гацев: „Ай сядай, сядай, че няма време“)<br />
И сега… Пиши!<br />
(и би звънеца)</p>
<p>(навиква Ицо)<br />
Ш, м&#8217;че бръкни в контакта, почувствай закона на Ом и си сядай на мястото бе!</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/663/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HDD free space monitoring</title>
		<link>http://kamenitza.org/archives/659</link>
		<comments>http://kamenitza.org/archives/659#comments</comments>
		<pubDate>Fri, 12 Aug 2011 20:14:02 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=659</guid>
		<description><![CDATA[Важно е да следим, с колко свободно пространство разполагаме. Давам пример на едно роботче писано на bash, което изпраща e-mail (sms), когато свободното пространство на посочен дял от диска падне под определена граница: #!/bin/bash #------Configuration #Send alert to this email address EMAIL=&#34;35988xxxxxxx@sms.mtel.net&#34; #Partition which should be monitored PARTITION=&#34;/dev/md1&#34; #If free space is less than this [...]]]></description>
			<content:encoded><![CDATA[<p>Важно е да следим, с колко свободно пространство разполагаме. Давам пример на едно роботче писано на bash, което изпраща e-mail (sms), когато свободното пространство на посочен дял от диска падне под определена граница:<br />
<pre><code>
#!/bin/bash

#------Configuration

#Send alert to this email address
EMAIL=&quot;35988xxxxxxx@sms.mtel.net&quot;

#Partition which should be monitored
PARTITION=&quot;/dev/md1&quot;

#If free space is less than this value in KB - send email
SPACELIMIT=1000000

#How long to wait in minutes to send another email
REMINDTIMEOUT=120

#Time format used in the message
TIME=`date +&quot;%d.%m.%y %H:%M&quot;`

#The marker prevents sending of too many messages
#Must be unique for each partition monitored.
#Add different numbers at the end of the file name for each partition
MARKER=&quot;/tmp/freespacereached&quot;

#------END of Configuration

if [ -f $MARKER ]; then
&nbsp;&nbsp;&nbsp;&nbsp;MARKERAGE=$(($((`date +%s`-`stat -c %Z $MARKER`)) / 60))
else
&nbsp;&nbsp;&nbsp;&nbsp;MARKERAGE=0
fi

if [ $MARKERAGE -gt $REMINDTIMEOUT ]; then
&nbsp;&nbsp;&nbsp;&nbsp;rm -f $MARKER
fi

FREESPACE=`df | grep &quot;$PARTITION&quot; | awk &#039;{ print $4}&#039;`
# Prevent crash in case of wrong partition configuration or data extraction
FREESPACE=$((FREESPACE+0));

if [ $FREESPACE -lt $SPACELIMIT ]; then
&nbsp;&nbsp;&nbsp;&nbsp;MSG=&quot;$TIME - Spacecheck WARNING! - $((FREESPACE/1024))MB available on $PARTITION&quot;
&nbsp;&nbsp;&nbsp;&nbsp;if [ ! -f &quot;$MARKER&quot; ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $MSG | mail $EMAIL
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touch $MARKER
&nbsp;&nbsp;&nbsp;&nbsp;fi
else
&nbsp;&nbsp;&nbsp;&nbsp;rm -f $MARKER
fi
</code></pre></p>
<p>Изпълнението на скрипта се предоставя на cron, като се създава конфигурационен ред, подобен на този:<br />
<pre><code>
0 9-21 * * * /scripts/spacecheck.sh
</code></pre><br />
Т.е. прави проверка на всеки кръгъл час, но няма да ни безпокои през нощта <img src='http://kamenitza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Машината, на която се изпълнява трябва да може да изпраща електронна поща, т.е. трябва да има работещ sendmail, postfix или друга алтернатива.</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/659/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Има сигнал да та утрепе&#8230;</title>
		<link>http://kamenitza.org/archives/648</link>
		<comments>http://kamenitza.org/archives/648#comments</comments>
		<pubDate>Fri, 08 Jul 2011 12:29:55 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Фун]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=648</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://kamenitza.org/wp-content/uploads/signal.jpg"></a><a href="http://kamenitza.org/wp-content/uploads/signal.jpg"><img class="size-medium wp-image-649 aligncenter" title="Адския обхват" src="http://kamenitza.org/wp-content/uploads/signal-300x97.jpg" alt="" width="300" height="97" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/648/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cisco router dual ISP</title>
		<link>http://kamenitza.org/archives/488</link>
		<comments>http://kamenitza.org/archives/488#comments</comments>
		<pubDate>Wed, 29 Jun 2011 08:33:43 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[dual isp]]></category>
		<category><![CDATA[dual wan]]></category>
		<category><![CDATA[kamenitza]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[каменица]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=488</guid>
		<description><![CDATA[Конкретен пример как да се направи автоматично прехвърляне към втори Интернет доставчик (или трасе) при пропадане на главната линия. Рутер (IOS 12.4): fe0 &#8211; 192.168.0.1/24 &#8211; вътрешна мрежа fe1 &#8211; 100.100.100.123/24, GW: 100.100.100.1 &#8211; трасе1 fe2 &#8211; 200.200.200.123/24, GW: 200.200.200.1 &#8211; трасе2 Приемаме трасе1 за главна линия, а трасе2 за резервна, която ще се ползва [...]]]></description>
			<content:encoded><![CDATA[<p>Конкретен пример как да се направи автоматично прехвърляне към втори Интернет доставчик (или трасе) при пропадане на главната линия.</p>
<p>Рутер (IOS 12.4):<br />
fe0 &#8211; 192.168.0.1/24 &#8211; вътрешна мрежа<br />
fe1 &#8211; 100.100.100.123/24, GW: 100.100.100.1 &#8211; трасе1<br />
fe2 &#8211; 200.200.200.123/24, GW: 200.200.200.1 &#8211; трасе2</p>
<p>Приемаме трасе1 за главна линия, а трасе2 за резервна, която ще се ползва единствено, когато трасе1 не работи. За диагностика дали трасето работи ще ползвам ping.<br />
И двете трасета са за предоставяне на достъп до Интернет, така че за диагностика ще се пингва адрес някъде в Интернет. Избрах един от DNS сървърите на OpenDNS &#8211; 208.67.222.222.</p>
<p>Превключването между трасетата ще става като бива сменян шлюзът по подразбиране за рутера (default gateway). За тази цел трябва статично да рутираме заявките до 208.67.222.222 през трасе1 (главното трасе).</p>
<p><code>ip route 208.67.222.222 255.255.255.255 100.100.100.1</code></p>
<p>От предишната ми статия вече знаете как се правят пингващи роботчета в Cisco IOS, сега ще разширим малко възможностите на едно такова роботче:</p>
<p><pre><code>ip sla 1
 icmp-echo 208.67.222.222 source-ip 192.168.0.1
 frequency 30
ip sla schedule 1 life forever start-time now
ip sla reaction-configuration 1 react timeout action-type triggerOnly</code></pre></p>
<p>Бързо стават ясни фактите:<br />
- пингва 208.67.222.222, като изпраща заявките от името на 192.168.0.1<br />
- пингва през 30 секунди<br />
- цикълът продължава вечно<br />
- когато имаме timeout, това ще предизвика trigger събитие, което сега ще уловим:</p>
<p><code>track 1 ip sla 1</code></p>
<p>Пингачката вече трябва да работи, а това можете да проверите с:</p>
<p><pre><code>debug ip icmp
term mon</code></pre></p>
<p>Сега е момента да нагласим и самата маршрутизираща таблица на рутера така, че да се съобразява с пингачката и събитията генерирани от нея:</p>
<p><pre><code>ip route 0.0.0.0 0.0.0.0 100.100.100.1 track 1
ip route 0.0.0.0 0.0.0.0 200.200.200.1 10</code></pre></p>
<p>Сега какво означава това &#8211; първият ред ни дава шлюзът по подразбиране на главното трасе, но &#8220;track 1&#8243; означава, че този route ще е валиден само, ако &#8220;спусъкът&#8221; track 1 разрешава, т.е. ако пингачката работи и пингвания IP адрес отговаря.<br />
Вторият ред ни дава втори шлюз по подразбиране &#8211; този на резервното трасе. Но този route е с по-нисък приоритет (по-голяма метрика &#8211; 10), т.е. ще работи, само ако няма route с по-висок приоритет от него (по-ниска метрика).</p>
<p>Можете да видите статуса на track-а в рутиращата таблица ето така:</p>
<p><pre><code>sh ip route track-table
 ip route 0.0.0.0 0.0.0.0 100.100.100.1 track 1 state is [down]</code></pre></p>
<p>Когато е down (т.е. пингачката получава таймаути от пингвания адрес) &#8211; този route изобщо не съществува в таблицата за рутиране и рутера подхваща следващото налично трасе &#8211; през 200.200.200.1.</p>
<p>Дали има NAT или не на рутера няма значение.</p>
<p>Наздраве! <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/488/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cisco IOS icmp/ping keepalive</title>
		<link>http://kamenitza.org/archives/473</link>
		<comments>http://kamenitza.org/archives/473#comments</comments>
		<pubDate>Fri, 10 Jun 2011 07:26:07 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[icmp]]></category>
		<category><![CDATA[kamenitza]]></category>
		<category><![CDATA[keepalive]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[каменица]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=473</guid>
		<description><![CDATA[Примера представлява просто изпращане на echo заявки към определен хост през определено време от Cisco IOS. За да повишим фън-фактора, самият cisco рутер ще изпраща тези заявки, а не потребителска машина от вътрешната мрежа. Конкретно на мен това ми беше необходимо, за да поддържа установен site-to-site VPN, понеже, ако няма трафик през тунела &#8211; той [...]]]></description>
			<content:encoded><![CDATA[<p>Примера представлява просто изпращане на echo заявки към определен хост през определено време от Cisco IOS. За да повишим фън-фактора, самият cisco рутер ще изпраща тези заявки, а не потребителска машина от вътрешната мрежа.</p>
<p>Конкретно на мен това ми беше необходимо, за да поддържа установен site-to-site VPN, понеже, ако няма трафик през тунела &#8211; той се самоизключва, а включването му след това може да отнеме няколко ценни секунди или да провали опит за <strong>телефонен разговор</strong> (Call Manager Express).</p>
<p>При не-установен тунел и опит за телефонно (VoIP) обаждане от едната мрежа до другата, UDP трафикът който се генерира понякога е недостатъчен да &#8220;събуди&#8221; и установи VPN тунела. В резултат на което &#8211; провален разговор.</p>
<p>Ето и самият пример:</p>
<p><pre><code>ip sla 1
 icmp-echo 192.168.10.1 source-ip 192.168.11.1
 frequency 30
ip sla schedule 1 life forever start-time now
</code></pre></p>
<p>Тук пингваме през 30 секунди ИП адреса 192.168.10.1 от името на 192.168.11.1 (интерфейса на рутера към вътрешната мрежа), като задачата ще се изпълнява до безкрайност &#8211; forever. Можете да си поиграете с параметрите спрямо вашите нужди.</p>
<p>Примерът е от IOS 15.1.</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/473/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Measure HDD temperature through SNMP</title>
		<link>http://kamenitza.org/archives/459</link>
		<comments>http://kamenitza.org/archives/459#comments</comments>
		<pubDate>Wed, 08 Jun 2011 22:02:39 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[hdd]]></category>
		<category><![CDATA[kamenitza]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[SNMP]]></category>
		<category><![CDATA[temperature]]></category>
		<category><![CDATA[каменица]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=459</guid>
		<description><![CDATA[SNMP е най-удобния протокол да следим състоянието на&#8230; всичко &#8211; натоварване на мрежовите интерфейси, на процесора, на паметта и на какво ли още не. За темата на тази статия съм загатнал тук, но сега ще дам по-точен пример. Ще споделя как може да се следи температурата на хард дисковете с негова помощ. Приемам, че сте [...]]]></description>
			<content:encoded><![CDATA[<p>SNMP е най-удобния протокол да следим състоянието на&#8230; всичко &#8211; натоварване на мрежовите интерфейси, на процесора, на паметта и на какво ли още не. За темата на тази статия съм загатнал <a href="http://kamenitza.org/archives/364">тук</a>, но сега ще дам по-точен пример.</p>
<p>Ще споделя как може да се следи температурата на хард дисковете с негова помощ. Приемам, че сте конфигурирали snmpd правилно и демонът работи (за справка &#8211; <a href="http://kamenitza.org/archives/259">тук</a>).</p>
<p>В конфигурацията на демона &#8211; <code>/etc/snmp/snmpd.conf</code> добавяте това:</p>
<p><code>exec hdd1temp /root/hdd1temp.sh</code></p>
<p>Това е съдържанието на <code>/root/hdd1temp.sh</code>:</p>
<p><pre><code>#!/bin/bash
/usr/sbin/smartctl -A /dev/sda | grep -i temperatur | awk &#039;{print&nbsp;&nbsp;$10}&#039;</code></pre></p>
<p>Задължително файлът да е изпълним (chmod +x &#8230;).</p>
<p>Рестарт на <code>snmpd</code> и нека проверим какво се случи:</p>
<p><code># snmpwalk -v2c -c communitypass localhost UCD-SNMP-MIB::extOutput</code></p>
<p>Този пример със <code>snmpwalk </code>ще &#8220;изплюе&#8221; всички <code>exec</code> редове от <code>snmpd.conf</code> по ред на номерата им.</p>
<p>От тук нататък е въпрос на фантазия какво ще правите със събираните данни. Можете да си настроите аларма при превишаване на температурата с подходящ bash скрипт, както и да рисувате статистика с RRD или MRTG.</p>
<p>Ето така ще получите само конкретната стойност готова за по-нататъшна обработка:</p>
<p><code># snmpwalk -v2c -Oqv -c communitypass localhost UCD-SNMP-MIB::extOutput.1</code></p>
<p>Примерът е от CentOS. За други дистрибуции файлът snmpd.conf може да е в друга директория, но останалото остава същото <img src='http://kamenitza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Енджой!</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/459/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One router &#8211; two Internet Service Providers</title>
		<link>http://kamenitza.org/archives/447</link>
		<comments>http://kamenitza.org/archives/447#comments</comments>
		<pubDate>Tue, 07 Jun 2011 12:16:50 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[dual isp]]></category>
		<category><![CDATA[dual wan]]></category>
		<category><![CDATA[kamenitza]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[каменица]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=447</guid>
		<description><![CDATA[Постановката е следната: Линукс рутер който се ползва за NAT-ване на домашна/офис мрежа за достъп до Интернет. Два Интернет доставчика за да има някаква резервираност. В най-простия пример линукс рутера е с 3 лан-карти &#8211; Доставчик1, Доставчик2 и Вътрешна мрежа. Приемам, че можете да си конфигурирате маскирането (NAT) така, че вътрешната мрежа да има Интернет, [...]]]></description>
			<content:encoded><![CDATA[<p>Постановката е следната:<br />
Линукс рутер който се ползва за NAT-ване на домашна/офис мрежа за достъп до Интернет.<br />
Два Интернет доставчика за да има някаква резервираност.<br />
В най-простия пример линукс рутера е с 3 лан-карти &#8211; Доставчик1, Доставчик2 и Вътрешна мрежа. Приемам, че можете да си конфигурирате маскирането (NAT) така, че вътрешната мрежа да има Интернет, но проблема ви е, че рутера не може да има едновременно два шлюза по подразбиране (default gateway). Добре де, за тези, които не знаят ще дам кратко примерче и за това <img src='http://kamenitza.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Доставчик1:<br />
закачен е към eth0<br />
IP: 100.100.100.12/255.255.255.0<br />
GW: 100.100.100.1</p>
<p>Доставчик2:<br />
закачен е към eth1<br />
IP: 200.200.200.56/255.255.255.0<br />
GW: 200.200.200.1</p>
<p>Вътрешна мрежа:<br />
закачена е към eth2<br />
192.168.1.1/24</p>
<p>Транслиране на изходящия трафик през интерфейсите към Интернет доставчиците:<br />
<code># iptables -t nat -A POSTROUTING -j MASQUERADE</code><br />
Маскирането по този начин работи дори и IP адреса да е динамичен.</p>
<p>От тук нататък дали ще ползваме Доставчик1 или Доставчик2 зависи само от това кой шлюз по подразбиране ще оставим активен на рутера &#8211; 100.100.100.1 или 200.200.200.1.</p>
<p>Сега едно малко скрипт-роботче ще проверява през 5 минути (или колкото вие решите) дали има връзка към Интернет. Проверката ще става като пингва един от ДНС сървърите на OpenDNS 208.67.222.222 (може и ИП адреса на някой root-DNS да сложите, няма значение &#8211; нещо което е винаги винаги на линия). Механизъмът е устроен така, че ако не получи отговор, ще подмени шлюза с този на другия доставчик.</p>
<p><pre><code>#!/bin/bash
GW1=100.100.100.1
GW2=200.200.200.1
CHECK_HOST=208.67.222.222

DEFAULT_GW=`ip route list | grep default | awk &#039;{print $3}&#039;`
if /bin/ping -n -c 5 $CHECK_HOST 1&gt;/dev/null 2&gt;/dev/null; then
&nbsp;&nbsp;echo &quot;Link OK&quot;
else
&nbsp;&nbsp;echo &quot;Link down! Switching...&quot;
&nbsp;&nbsp;if [ $DEFAULT_GW==GW1 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;ip route del default
&nbsp;&nbsp;&nbsp;&nbsp;ip route add default via $GW2
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;ip route del default
&nbsp;&nbsp;&nbsp;&nbsp;ip route add default via $GW1
&nbsp;&nbsp;fi
fi</code></pre></p>
<p>Копирайте този скрипт в текстов файл, направете го изпълним (chmod +x filename) и го добавете в crontab за изпълнение през определено време.</p>
<p>В този пример и двата доставчика са еднакво предпочитани. Т.е. когато от Д1 отпадне и преминем на Д2 &#8211; ще останем на Д2 дори и след като Д1 възстанови нормална работа. И така докато ползваният в момента доставчик не отпадне.</p>
<p>В следващ пост ще покажа и пример с 2 доставчика, в който се следи състоянието на 2те линии едновременно и можем да конфигурираме предпочитан и резервен доставчик.</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/447/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrade linux password hashing security</title>
		<link>http://kamenitza.org/archives/444</link>
		<comments>http://kamenitza.org/archives/444#comments</comments>
		<pubDate>Tue, 07 Jun 2011 14:52:16 +0000</pubDate>
		<dc:creator>Тодор</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[kamenitza]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[каменица]]></category>

		<guid isPermaLink="false">http://kamenitza.org/?p=444</guid>
		<description><![CDATA[По подразбиране в RHEL/CentOS паролите на потребителите се съхраняват под формата на MD5 hash. Дали е така може да се провери с тази команда: # authconfig --test &#124; grep hashing За да променим алгоритъма за генериране на hash-ове пишем това: # authconfig --passalgo=sha512 --update Всички нови пароли ще бъдат в SHA512 формат.]]></description>
			<content:encoded><![CDATA[<p>По подразбиране в RHEL/CentOS паролите на потребителите се съхраняват под формата на MD5 hash.<br />
Дали е така може да се провери с тази команда:<br />
<code># authconfig --test | grep hashing</code></p>
<p>За да променим алгоритъма за генериране на hash-ове пишем това:<br />
<code># authconfig --passalgo=sha512 --update</code></p>
<p>Всички нови пароли ще бъдат в SHA512 формат.</p>
]]></content:encoded>
			<wfw:commentRss>http://kamenitza.org/archives/444/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

