<?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>Reborn &#187; Code</title>
	<atom:link href="http://www.getoto.net/tag/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.getoto.net</link>
	<description>And from the ashes the Phoenix rose reborn</description>
	<lastBuildDate>Fri, 20 Aug 2010 13:39:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Trac + SVN The setup</title>
		<link>http://www.getoto.net/2009/12/06/trac-svn-the-setup/</link>
		<comments>http://www.getoto.net/2009/12/06/trac-svn-the-setup/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 19:24:19 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[256 mb ram]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=63</guid>
		<description><![CDATA[Тъй като се занимавам с много и най-вече различни проекти, стана ясно че имам мужда от система за управление на проекти. И докато това ми се търкаляше в главата реших че ще е добре ако може да се използва за множество проекти с множество хора. Почна се търсенето, като минах през dotProject, TikiWiki, Mantis и някои други. Но просто някак си не ми допадаха. В крайна сметка се спрях на Trac и SVN.]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Disclaimer: </strong>Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.</p>
<p><strong>История</strong></p>
<ul>
<li>25.01.2007 &#8211; Първа версия</li>
</ul>
</blockquote>
<p>Тук ще се постарая да опиша по какъв начин съм настроил система състояща се от Trac и SVN която използвам за управление на проекти.</p>
<p><strong>Идеята</strong><br />
Тъй като се занимавам с много и най-вече различни проекти, стана ясно че имам мужда от система за управление на проекти. И докато това ми се търкаляше в главата реших че ще е добре ако може да се използва за множество проекти с множество хора. Почна се търсенето, като минах през dotProject, TikiWiki, Mantis и някои други. Но просто някак си не ми допадаха. В крайна сметка се спрях на Trac и SVN.</p>
<p><strong>Мотивацията</strong><br />
Избрах комбинацията Trac + SVN по следните причини</p>
<ul>
<li>Свикнал съм със SVN пък макар и от конзола</li>
<li>Trac се разработва относително активно</li>
<li>Вече имах инсталиран Python заради част от системата ми</li>
<li>В самия Trac има вградено wiki което ще се ползва за описанието на проектите и документацията</li>
<li>Има билетчета за проблеми</li>
<li>Куп други дреболии</li>
</ul>
<p>След всичко казано Trac се оказа едно добро решение.</p>
<p><strong>Желязото</strong><br />
Машината на която работи всичко това е следната</p>
<blockquote><p>Debian Unstable<br />
600 Mhz CPU<br />
256 MB Ram<br />
20G HDD</p></blockquote>
<p>Върху нея работят доста услуги: mysql, apache, exim, routing/shaping/nat, dns, dhcp, ntp, ftp, shell, samba (в режим на Master Browser) и други.</p>
<p>Като цяло доста слабичка машинка по днешни стандарти, но полезна и гледана с любоФ</p>
<p><strong>Необходим Софтуер</strong><br />
За да може системата да работи като хората ни трябва следният софтуер</p>
<ul>
<li>Trac</li>
<li>subversion</li>
<li>libneon</li>
<li>Python</li>
<li>pysqlite</li>
<li>python-subversion-bindings</li>
<li>mod_python</li>
<li>clearsilver</li>
<li>xinetd</li>
<li>други дреболии</li>
</ul>
<p>Като цяло най-лесно е ако си имате дебиан. Ако е такъв случая процедурата е пределно проста</p>
<pre>apt-get install trac libapache2-mod-python xinetd</pre>
<p>И започва веселбата :)</p>
<p>Допълнително към Python сме инсталирали python-setuptools, tracwebadmin, tracaccountmanager.</p>
<p><strong>Разположение на файловете</strong><br />
Тъй като ще има няколко проекта, ще отделим специално място за цялата система. Препоръчително е да е на отделен дял.<br />
При мен се спрях на директорията <strong>/home/projects</strong> която има следната структура</p>
<pre class="brush: plain;">/home/projects/
/home/projects/trac
/home/projects/trac/project1
/home/projects/trac/project2
... ... ...
/home/projects/svn
/home/projects/svn/project1
/home/projects/svn/project2
... ... ...</pre>
<p>Възможно е Trac и SVN инстанциите да се намират в директориите на проектите но така се усложнява млко конфигурацията</p>
<p><strong>Същинското изпълнение</strong><br />
Създайте си директорната структура която ще ви е удобна:</p>
<pre class="brush: bash;">mkdir -p /home/projects/{trac,svn}</pre>
<p>Създайте си съответните проекти (това става с trac-admin)</p>
<pre class="brush: bash;">trac-admin /home/projects/trac/project1 initenv</pre>
<p>Ще ви бъдат зададени няколко въпроса и по точно: Име на проекта, База данни (sqlite е добър избор), тип на хранилището за код, къде се намира самото хранилище.<br />
Ограничение е че хранилището на код трябва задължително да е на същата машина (не се поддържат отдалечени), но това може лесно да се заобиколи с помощта на nfs</p>
<p>Създайте съответните хранилища за код (svnadmin)</p>
<pre class="brush: bash;">svnadmin create /home/projects/svn/project1[code]
Променете правата на така създадените директории съответно на потребителя като който вървят Trac системата и svn сървъра
[code lang=bash]chown -R www-data:www-data /home/projects/trac/project1
chown -R svnserv:svnserv /home/projects/svn/project1</pre>
<p>Използваме www-data тъй като под този потребител работи Apache сървъра. Потребителя svnserv сме създали предварително като за домашна директория сме му задали <strong>/home/projects/svn</strong></p>
<p>След като имаме вече създадени проектите време е да можем да ги покажем в браузър (иначе са безполезни).<br />
Trac може да работи като самостоятелен демон (tracd), като CGI процес (trac.cgi, trac.fcgi) или в контекста на Apache (което сме и избрали) с помощта на mod_python.</p>
<p>В конфигурацията на Apache добавяме</p>
<pre class="brush: plain;">LoadModule python_module modules/mod_python.so
# или го разрешаваме с помощта на дистрибуцията си
 
&lt;location /projects&gt;
    # с какво ще обработваме съдържанието
    SetHandler mod_python
    # точно с какво (trac)
    PythonHandler trac.web.modpython_frontend
    # коя информация точно ще сервираме
    PythonOption TracEnvParentDir /home/projects/trac
    # от какво ще генерираме индекса (не е задължителен)
    PythonOption TracEnvIndexTemplate /home/projects/trac/listing.cs
    # debug mode ON
    PythonDebug on
&lt;/location&gt;</pre>
<p>Рестартираме сървъра и проверяваме. Трябва да се вижда нещо подобно на следната картинка<br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/trac-1.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/trac-1.png" alt="trac-1" title="trac-1" width="296" height="154" class="aligncenter size-full wp-image-64" /></a></p>
<p>Ако ли пък не … почвайте да гледате в логовете какво пише.</p>
<p>Следва да пуснем svn сървър. Това се прави с помощта на svnserve. В случая съм избрал да го стартирам през xinetd понеже няма да е толкова натоварен. За по голяма сигурност ще работи като отделен потребител (svnserv)</p>
<p>Конфигурацията на xinetd е следната</p>
<pre class="brush: plain;">service subversion
{
        # слушаме само на IPv4 адрес
        flags = IPv4
        # услугата НЕ е спряна
        disable = no
        # потребител и група
        user = svnserv
        group = svnserv
        # максимален брой инстанции
        instances = 5
        # be nice :)
        nice = 15
        # кой точно е сървърът
        server = /usr/bin/svnserve
        # аргументи за стартирането му
        server_args = --inetd --root /home/projects/svn
        # обичайните работи (логване, типаж ...)
        log_on_success = PID HOST DURATION
        log_on_failure = HOST ATTEMPT
        wait = no
        socket_type = stream
}</pre>
<p>Тествайте със svn клиент дали работи.</p>
<p><strong>Подсигуряване и подобряване на Услугите</strong><br />
След като имаме работещи услуги време е да помислим за тяхното подсигуряване. А именно ето какво ще направим:</p>
<p>За Trac системите</p>
<ul>
<li>Премахване на анонимният достъп (изцяло). За тази цел ще ни се наложи да използваме trac-admin. Възможно е да се реализира през web интерфейс но все пак трябва да се знае как се прави на ръка.
<pre class="brush: bash;"># влизаме в интерактивен режим
      trac-admin /projects/trac/project1
      # привилегиите се управляват посредством командата permission
      Trac [/home/projects/trac/project1]&gt; permission help
      permission list [user]
              -- List permission rules

      permission add &lt;user&gt; &lt;action&gt; [action] [...]
              -- Add a new permission rule

      permission remove &lt;user&gt; &lt;action&gt; [action] [...]
              -- Remove permission rule
      # това е просто за запознаване
      # следва същинското премахване
      Trac [/home/projects/trac/project1]&gt; permission remove anonymous *</pre>
<p>Вече анонимните потребители нямат никакви права.</li>
<li>добавяне на нов административен потребител с пълни права. Това се прави за да имаме по лесен контрол.
<pre class="brush: bash;">Trac [/home/projects/trac/project1]&gt; permission add user1 TRAC_ADMIN, MILESTONE_DELETE ....
      # всички възможни привилегии</pre>
<p>Така добавеният потребител <strong>user1</strong> ефективно получава пълен и абсолютен контрол.</li>
<li>активиране на администраторският панел - тази процедура се извършва чрез редакция на кконфигурационният файл <strong>conf/trac.ini</strong> в директорията на нашият проект. За да активираме администраторският интерфейс е необходимо да разрешим използването на компонентите които са ни нужни а именно да добавим
<pre class="brush: plain;">[components]
webadmin.* = enabled</pre>
</li>
<li>включване на подобрен процес на влизане в системата - по начало процеса на влизане в Trac не е особенно красив нито пък удобен, затова и ще бъде подменен от разширението TracAccountManager. То има зависимост от TracWebAdmin който вече е активиран. За да можем да ползваме подобреният процес трябва първо да изключим вграденият във trac и да активираме новият. Това става отново с редакция на trac.ini
<pre class="brush: plain;">[components]
acct_mgr.admin.accountmanageradminpage = enabled
acct_mgr.api.accountmanager = enabled
acct_mgr.htfile.abstractpasswordfilestore = enabled
acct_mgr.htfile.htdigeststore = disabled
acct_mgr.htfile.htpasswdstore = enabled
acct_mgr.http.httpauthstore = disabled
acct_mgr.web_ui.accountmodule = enabled
acct_mgr.web_ui.loginmodule = enabled
trac.web.auth.loginmodule = disabled

[account-manager]
password_file = /home/projects/trac/users
password_store = HtPasswdStore</pre>
<p>Какво точно прави всяка опция е добре обяснено в документацията (линковете са в края)<br />
Сега е необходимо да рестартираме web сървъра за да влезнат в сила нашите промени.</li>
</ul>
<p>За svn сървъра:</p>
<blockquote><p>Забраняване на всякакъв достъп за неауторизирани потребители</p></blockquote>
<p>Това се изпълнява като се редактират конфигурациите на svn сървъра. Те се намират в директорията в която е нашето хранилище на код. Модифицираме ги по следният начин:</p>
<p><strong>conf/svnserve.conf</strong></p>
<pre class="brush: plain;">### This file controls the configuration of the svnserve daemon
### Visit http://subversion.tigris.org/ for more information.

[general]
# никакъв достъп за анонимните
anon-access = none
password-db = passwd
authz-db = authz
realm = Project 1</pre>
<p><strong>conf/authz</strong></p>
<pre class="brush: plain;">### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.

[groups]

# за кой път иде реч (правата се унаследяват)
[/]
# правата на потребител (четене и писане)
user1 = rw
# правата на всички останали (пълна нула)
* =</pre>
<p><strong>conf/passwd</strong></p>
<pre class="brush: plain;">### This file is an example password file for svnserve.

[users]
user1 = password</pre>
<p><strong>Заключение</strong><br />
След като сме си свършили всичката работа следва да рестартираме за един последен път apache и xinetd и да започнем да си ползваме системата. За подробности за работата с нея … във връзките</p>
<p><strong>Връзки</strong><br />
<a href="http://trac.edgewall.org/">Trac</a><br />
<a href="http://www.modpython.org/">mod_python</a><br />
<a href="http://httpd.apache.org/">Apache</a><br />
<a href="http://subversion.tigris.org/">Subversion</a><br />
<a href="http://trac.edgewall.org/wiki/WebAdmin">TracWebAdmin</a><br />
<a href="http://trac-hacks.org/wiki/AccountManagerPlugin">TracAccountManager</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/trac-svn-the-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DHCP + TFTP + PXELINUX = Netinstall</title>
		<link>http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/</link>
		<comments>http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 18:49:16 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[dhcpd]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[netboot]]></category>
		<category><![CDATA[Option]]></category>
		<category><![CDATA[pxe]]></category>
		<category><![CDATA[PXELINUX]]></category>
		<category><![CDATA[syslinux]]></category>
		<category><![CDATA[tftp]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=58</guid>
		<description><![CDATA[Преди около седмица в Linux-BG се появи молба за помощ, за един леко прецакан windows. Ситуацията беше, че MBR на системата беше заминал по дяволите, а машината нямаше нито CD, нито флопи, нито пък можеше да стартира от USB. Остава като решение само стартиране от мрежа. Помогнахме му на човека понеже си имам инсталиран такъв сървър в къщи. Тази комбинация от софтуер е полезна и при други ситуации (основно мързел) като инсталация на отдалечени машини, тестове, и някои други добрини.]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Disclaimer: </strong>Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.</p>
</blockquote>
<p><strong>Мотивация</strong><br />
Преди около седмица в <a href="http://www.linux-bg.org/">Linux-BG</a> се появи молба за помощ, за един леко прецакан windows. Ситуацията беше, че MBR на системата беше заминал по дяволите, а машината нямаше нито CD, нито флопи, нито пък можеше да стартира от USB. Остава като решение само стартиране от мрежа. Помогнахме му на човека понеже си имам инсталиран такъв сървър в къщи. Тази комбинация от софтуер е полезна и при други ситуации (основно мързел) като инсталация на отдалечени машини, тестове, и някои други добрини.</p>
<p><strong>Цел</strong><br />
Да получим сървър от който да може да се стартира инсталация на операционна система.<br />
Ще демонстрираме как се прави това с <a href="http://www.debian.org/">Debian</a>, а за други дистрибуции е аналогично.</p>
<p><strong>Необходими компоненти</strong></p>
<ul>
<li>Инсталирана и работеща линукс система която ще ползваме за PXE сървър</li>
<li>DHCP сървър &#8211; тук ще опишем настройката му</li>
<li>TFTP сървър</li>
<li>PXELINUX &#8211; от syslinux системата</li>
<li>Интернет свързаност или локално копие на необходимите пакети за инсталация</li>
<li>Желание за работа и малко трезва мисъл</li>
</ul>
<p>Изхождаме от презумпцията че цялото това нещо ще го реализирате в мрежа която е отделена от основната ви, тъй като едно дребно недоглеждане може да направи много поразии. Ще се постарая да ви спестя проблемите но никога не се знае.</p>
<p><strong>Теория на работата</strong><br />
Доста машини могат да стартират през мрежа, било то за да работят като терминали или по други съображения. За целта мрежовата им карта трябва да поддържа PXE стандарта за предпочитане над версия 0.91. Макар че може да бъде излъгана и с по-ниски версии.<br />
Самият процес протича доста елементарно и като цяло е доста прост:</p>
<ul>
<li>Машината стартира и се инициализира биос подсистемата</li>
<li>Инициализира се PXE подсистемата на мрежовата карта</li>
<li>Мрежовата карта изпраща заявка за IP адрес</li>
<li>DHCP сървъра отговаря като в допълнение и предлага да стартира от мрежа и я насочва към следващия сървър (TFTP)</li>
<li>TFTP сървъра предоставя на мрежовия стек малък файл който играе ролята на boot мениджър</li>
<li>От този мениджър си избираме една от опциите и стартираме</li>
</ul>
<p>За повече информация по темата:</p>
<ul>
<li><a href="http://syslinux.zytor.com/">http://syslinux.zytor.com/</a> &#8211; информация за syslinux комплекта от инструменти</li>
<li><a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment">PXE</a></li>
<li><a href="http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol">DHCP в wikipedia</a></li>
<li><a href="http://www.dhcp.org/">http://www.dhcp.org/</a></li>
</ul>
<p><strong>Настройка на DHCP сървър</strong><br />
Настройката не е нищо особенно има я подробно описана в документацията на sysllinux/pxelinux. Единственото което ни е необходимо в допълнение към нормален dhcp сървър са две допълнителни опции които ще обясним нагледно с пример.</p>
<p><strong><em>/etc/dhcpd.conf</em></strong></p>
<pre class="brush: plain;">#
# Sample configuration file for ISC dhcpd for Debian
#
# $Id: dhcpd.conf,v 1.4.2.2 2002/07/10 03:50:33 peloy Exp $
#

# Задължително или няма да може да раздаваме адреси при нормална работа
authoritative;

# Да ще позволяваме стартирането на стари клиенти (идва от BOOTP протокола)
allow bootp;
# Да ще позволяваме стартирането на клиенти посредством PXE
allow booting;
# нашият следващ сървър от където ще си дръпнем boot loader
next-server 10.99.3.1;
# Как се казва нашият boot loader
filename &quot;pxelinux.0&quot;;

default-lease-time 14400;
max-lease-time 86400;

# стандартна конфигурация на dhcp сървър
subnet 10.99.3.0 netmask 255.255.255.0 {
  range 10.99.3.10 10.99.3.200;
  option domain-name-servers 10.99.3.1;
  option domain-name &quot;instalations.network&quot;;
  option routers 10.99.3.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.99.3.255;
  option default-ip-ttl 64;
  option default-tcp-ttl 64;
  option time-offset 7200;
  option time-servers 10.99.3.1;
  option ntp-servers 10.99.3.1;
  option netbios-name-servers 10.99.3.1;
  option netbios-node-type 8;
}</pre>
<p>Ако нещо не ви е ясно ви съветвам да се обърнете към помощните страници на пакета dhcp</p>
<p><strong>Настройка на TFTP сървър</strong><br />
За тфтп сървър ще използваме <a href="http://freshmeat.net/projects/tftp-hpa/">tftp hpa</a> работещ в режим на демон.<br />
той се инсталира пределно просто (при debian)</p>
<pre class="brush: bash;">apt-get install tftpd-hpa</pre>
<p>Конфигурацията му се намира в <strong><em>/etc/default/tftpd-hpa</em></strong> и е следната:</p>
<pre class="brush: plain;"># ще работим като демон
RUN_DAEMON=&quot;yes&quot;
# опциите са
# -l - работим в режим на демон
# -v - записваме подробна информация
# -s - работим в сигурен режим като сервираме само от тази директория
OPTIONS=&quot;-l -v -s /tftpboot&quot;</pre>
<p>Все още не стартирайте сървъра. Препоръчва се файловете както и директорията /tftpboot да са собственост на root и да са само за четене (от всички)</p>
<p><strong>Настройки на PXELINUX</strong><br />
PXELINUX се намира в серята програми наречена <a href="http://syslinux.zytor.com/">syslinux</a>. Не е необходимо да инсталирате целия пакет тъй като от него ще ползваме само pxelinux.0 и евентуално memdisk ако искате да стартирате дос</p>
<p>Конфигурацията му е до някъде сложна но ще се постарая да я обясня като хората. Самият pxelinux се конфигурира от един текстов файл който указва какво и с какви настройки да бъде стартирано. Също така поддържа възможност различните машини да получават различна конфигурация. Документацията в пакета syslinux е много добра макар и длъжка така че наистина я прочетете поне диагонално.<br />
Нашата инсталация на pxeilinux ще живее в директорията /tftpboot и има следната структура:</p>
<pre class="brush: plain;">/tftpboot/
/tftpboot/initrd/
/tftpboot/kernels/
/tftpboot/pxelinux.0
/tftpboot/pxelinux.cfg/
# нашата конфигурация
/tftpboot/pxelinux.cfg/default
/tftpboot/texts/</pre>
<p>В случая ще демонстрираме една единствена конфигурация за всички машини. За разнообразни конфигурации моля погледнете в документацията. Следва и примерната конфигурация:<br />
<strong>/tftpboot/pxelinux.cfg/default</strong></p>
<pre class="brush: plain;"># по подразбиране стартираме от локален диск
# прави се за да не стане гаф и да унищожим информация
default local
# закъснение при стартиране (5 секунди)
timeout 50
# да покажем ли промпт
prompt 1
# да покажем определен текст
display texts/menu.txt

label local
        localboot 0

# етикет за този кернел
label deb26n
# самият кернел
        kernel kernels/deb-testing-26.kernel
# допълнителни опции
        append initrd=initrd/deb-testing-26.initrd \
           vga=normal \
           ramdisk_size=16384 \
           root=/dev/rd/0 \
           devfs=mount,dall rw

label deb26e
        kernel kernels/deb-testing-26.kernel
        append initrd=initrd/deb-testing-26.initrd \
           DEBCONF_PRIORITY=low \
           vga=normal \
           ramdisk_size=16384 \
           root=/dev/rd/0 \
           devfs=mount,dall rw</pre>
<p><em><strong>Забележка</strong>: редовете <strong>append</strong> са разпределени на няколко реда от съображения за четимост, но в конфигурацията трябва да са на един ред.</em></p>
<p>Кернелът и initrd файла са взети от проекта дебиан и по точно от секцията му нетбоот. Добавени са с лека адаптация и допипване на командния ред</p>
<p><strong>Заключение</strong><br />
Като цяло това е всичко. Не е особенно трудно да се постигне. Евентуален проблем който може да срещнете е че PXE агента на мрежовата карта е малко стар и не иска да работи с tftp сървър а задължително изисква pxe сървър, но това е лесно решимо.<br />
За тези които искат готово решение без много много да си играят ето <a href='http://www.getoto.net/wp-content/uploads/2009/12/pxebooting.tar.gz'>пакетирано всичко необходимо</a>. Необходимо е само да имате инсталиран dhcp и tftp сървър.</p>
<p>Очаквам въпроси, коментари, предложения и каквото ви хрумне в коментарите.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/netinstall-with-pxe-tftp-dhcp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 5</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 17:59:19 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[Head]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mrtg]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web swap]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=41</guid>
		<description><![CDATA[Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.

Тук демонстрираме една много проста и елементарна система която дава полезна информация с един поглед.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е петата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>В тази част ще изградим една много проста система за наблюдение и диагностика на нашият рутер.<br />
<strong>Защо</strong><br />
За да знаем какво се случва с нашият рутер. Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.</p>
<p><strong>Какво ще има</strong><br />
Личното ми предложение за елементарна система е както следва:</p>
<ul>
<li>Web базирана &#8211; за лесен достъп от всякъде</li>
<li>Проверка на състоянието на интернет свързаността &#8211; за да може с един поглед да се каже дали имаме връзка и дали проблема е някъде при нашият доставчик</li>
<li>Проверка на състоянието на мрежовите карти &#8211; дали са включени, да не би кабелчето да е избягало и т.н.</li>
<li>Проверка на използването на паметта &#8211; да не би случайно да сме влезнали в swap зоната и харда да траши</li>
<li>Проверка броя активни сесии &#8211; за да видим до къде е стигнало използването</li>
<li>Трафик статистика с помощта на mrtg</li>
<li>Пълна системна информация от phpsysinfo</li>
</ul>
<p><strong>Скрипт за проверка на състоянието на интернет свързаността</strong><br />
Това е един много прост скрипт който ще се опита да направи няколко пинг-а до определен адрес който сме сигурни че е винаги на линия. Използваме ип адрес а не име за да избегнем проблема с пропаднал DNS.<br />
За да работи коректно този скрипт е необходимо да имаме <strong>ping, tail, cut, php</strong></p>
<pre class="brush: php;">&lt;?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Connection check&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;body&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Checking Conection with
&lt;?php
$target=&quot;194.145.63.12&quot;;
if (isset($_REQUEST['t'])){
        $target=$_REQUEST['t'];
}
echo &quot;&lt;font color=#000000&gt;&quot; . $target . &quot;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&quot;;
$OK=&quot;&lt;div class=ok&gt;CONNECTION IS UP&lt;/div&gt;&quot;;
$NO=&quot;&lt;div class=no&gt;CONNECTION DOWN&lt;/div&gt;&quot;;

$status=exec(&quot;ping -q -c3 $target | tail -n 1 | cut -d' ' -f1&quot;);

if ($status == &quot;rtt&quot;) { echo $OK; } else { echo $NO; }
?&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div class=sub&gt;&lt;a href=&quot;?t=www.abv.bg&quot;&gt;Check with abv.bg&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;?t=www.google.com&quot;&gt;Check with Google&lt;/a&gt;&lt;/div&gt;

&lt;?php include &quot;footer.php&quot;; ?&gt;&lt;/center&gt;</pre>
<p>Самият скрипт изобщо не е красив а да не говорим и че не е много сигурен но върши работа. Ето примерен изглед на успешна и неуспешна проверка.<br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-ok.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-ok.png" alt="pingcheck-ok" title="pingcheck-ok" width="520" height="215" class="aligncenter size-full wp-image-42" /></a><br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-no.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-no.png" alt="pingcheck-no" title="pingcheck-no" width="499" height="221" class="aligncenter size-full wp-image-43" /></a><br />
както забелязвате ако подадем хост който не съществува за проверка ще ни върне отговор че нямаме интернет, което може да не е вярно. Поради тази причина освен проверка с ip са сложени два популярни сайта които се очаква че са винаги на линия.</p>
<p><strong>Скрипт за проверка на състоянието на мрежовите карти</strong><br />
Идеята на този скрипт е да установи дали имаме физическа свързаност. Не винаги е полезен но върши работа.<br />
За да работи скрипта имаме нужда от <strong>sudo, mii-tool</strong>.</p>
<pre class="brush: php;">&lt;?php
// simple checking of network cards
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;NIC check&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;body&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Checking Network Cards&lt;/h2&gt;&lt;br /&gt;
&lt;?php
$status=exec(&quot;sudo /sbin/mii-tool eth0 | md5sum | cut -d' ' -f1&quot;);
if ($status === '011d899f145c89793888771019335049'){
        echo &quot;&lt;div class=ok&gt;External network is UP&quot;;
} else {
        echo &quot;&lt;div class=no&gt;External network is DOWN&lt;br /&gt;Please check Cable (eth0)&lt;/div&gt;&quot;;
}
$status=exec(&quot;sudo /sbin/mii-tool eth1 | md5sum | cut -d' ' -f1&quot;);
if ($status === 'e413ff927a35f4df4c8bdecd70111902'){
        echo &quot;&lt;div class=ok&gt;Internal network is UP&lt;/div&gt;&quot;;
} else {
        echo &quot;&lt;div class=no&gt;Internal network is DOWN&lt;br /&gt;Please check Cable (eth1)&lt;/div&gt;&quot;;
}
?&gt;
&lt;/center&gt;

&lt;?php include &quot;footer.php&quot;; ?&gt;</pre>
<p>Проверката на картите не е универсална поради използваните md5 суми, но това може да се коригира особенно лесно. Напълно достатъчно е да се търси в изхода на командата <strong>mii-tool</strong> стринга <strong>link ok</strong>. За да работи този скрипт е необходимо потребителят от чието име вървъ нашият web сървър да има достъп до mii-tool. Това става посредством следният ред в <strong>/etc/sudoers</strong></p>
<pre class="brush: bash;">www-data ALL=(ALL) NOPASSWD: /sbin/mii-tool</pre>
<p><strong>Проверка на използването на паметта</strong><br />
Този скрипт е полезен за проверка на използваната памет. При рутери е особенно важно системата да не използва swap тъй като това краде процесорни цикли и като цяло затормозва машината. За да работи скрипта ни е необходима командата <strong>free</strong></p>
<pre class="brush: php;">&lt; ?php
// simple checking of memory utilisation
// vvitkov
// 02.11.2006
?&gt;
&lt; html &gt;
&lt;head&gt;
&lt;title&gt;Memory Usage&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt; ?php include &quot;header.php&quot;; ?&gt;
&lt; body &gt;&lt;center&gt;&lt;br /&gt;&lt;h2&gt;Memory Usage&lt;/h2&gt;&lt;br /&gt;&lt;/center&gt;
&lt; ?php
$stat=explode(&quot; &quot;, shell_exec(&quot;free -m| head -2|tail -1|awk '{print $2\&quot; \&quot;$3\&quot; \&quot;$4}'&quot;));
$stat2=explode(&quot; &quot;, shell_exec(&quot;free -m| head -4|tail -1|awk '{print $2\&quot; \&quot;$3\&quot; \&quot;$4}'&quot;));
$tresh=30;
?&gt;
&lt;table border=0 align=center&gt;
        &lt;tr&gt;
                &lt;th&gt;Mem type&lt;/th&gt;
                &lt;th&gt;Used&lt;/th&gt;
                &lt;th&gt;free&lt;/th&gt;
                &lt;th&gt;Total&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;RAM&lt;/th&gt;
                &lt;td&gt;&lt; ?php echo $stat[1]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat[2]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat[0]; ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;SWAP&lt;/th&gt;
                &lt;td&gt;&lt; ?php
                        if ($stat2[1] &gt; $tresh) {
                                echo &quot;&lt;font color=red weight=bold&gt;$stat2[1]&lt;/font&gt;&quot; ;
                        } else {
                                echo $stat2[1];
                        }
                ?&gt;
                &lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat2[2]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat2[0]; ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;TOTAL&lt;/th&gt;
                &lt;td&gt;&lt; ?php echo ($stat[1]+$stat2[1]); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo ($stat[2]+$stat2[2]); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo ($stat[0]+$stat2[0]); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
                &lt;th&gt;&lt; ?php
                        if ($stat2[1] &gt; $tresh) {
                                echo &quot;&lt;font color=red weight=bold&gt;^^^&lt;/font&gt;&quot; ;
                        } else {
                                echo &quot;&amp;nbsp&quot;;
                        }
                ?&gt;
                &lt;/th&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;sub&quot;&gt;If there is a red number ... that is a problem&lt;/div&gt;
&lt; ?php include &quot;footer.php&quot;; ?&gt;</pre>
<p>Единствената променлива която трябва да се коригира е <strong>$tresh</strong>. Тя се използва за да извади предупреждение че използването на swap е нарастнало над някакво ниво. Възможно е да бъде нагласена на примерно 20% но смятам че е по удачно да бъде въведена на ръка.</p>
<p><strong>Проверка броя активни сесии</strong><br />
Ако има проблеми с отваряне на страници, това може да е индикация на изхабени сесии. Тъй като знаем че някои доставчици лимитират броя сесии, този инструмент може да бъде полезен. Трябва да се отбележи че числата които са отчетени не са строго меродавни, тъй като не се отчита състоянието на сесията а просто наличието и. Тоест ако сесията е в състояние <strong>CLOSE_WAIT</strong> въпреки че може да бъде оползотворена тя се включва в бройката.<br />
За да работи коректно скрипта са ни необходими <strong>sudo, netstat-nat</strong></p>
<pre class="brush: php;">&lt;?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Connection statistics&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;body &gt;&lt;center&gt;&lt;br /&gt;&lt;h2&gt;Connection statistics&lt;/h2&gt;&lt;br /&gt;&lt;/center&gt;
&lt;table border=0 align=center&gt;
        &lt;tr&gt;
                &lt;th&gt;Proto&lt;/th&gt;
                &lt;th&gt;Clients&lt;/th&gt;
                &lt;th&gt;Ruter&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;TCP&lt;/th&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -S -p tcp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -L -p tcp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;UDP&lt;/th&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -S -p udp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -L -p udp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;div class=sub&gt;Only active connections are visible&lt;/div&gt;
&lt;?php include &quot;footer.php&quot;; ?&gt;</pre>
<p><strong>Заключение</strong><br />
В тази статия не е показана настройка на mrtg и phpsysinfo, тъй като те са относително елементарни. С това приключва нашата елементарна система за наблюдение и статистика. Самата система е наистина доста проста но върши работа.<br />
Прилагам цялата система в архивиран вид. За да работи е необходимо да си настроите mrtg посредством <strong>cfgmaker и indexmaker</strong> от инсталацията на mrtg и phpsysinfo посредством пакетната система на дебиан.</p>
<p><a href='http://www.getoto.net/wp-content/uploads/2009/12/monitoring.tar.gz'>monitoring system</a></p>
<p>Трябва да се отбележи че системата има възможност да показва съобщения настроени от администратора в основният си изглед. Това се постига благодарение на файла header.php</p>
<p>Серията продължава в <a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">The Perfect SOHO router &#8211; Part 6</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 2</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 16:30:31 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cd 3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[compaq deskpro]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[deborphan]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[intel ether express]]></category>
		<category><![CDATA[LAN]]></category>
		<category><![CDATA[lang]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mb hdd]]></category>
		<category><![CDATA[ram 256]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=30</guid>
		<description><![CDATA[В тази част ще инсталираме нашият рутер, ще изхвърлим абсолютно всичко излишно и инсталираме необходимият ни софтуер. Идеята зад целият процес е да минимизираме както използваното дисково пространство така и самата употреба на диска. По този начин също така ще намалим количеството използван софтуер което ще улесни нашата поддръжка.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е втората част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>В тази част ще инсталираме нашият рутер, ще изхвърлим абсолютно всичко излишно и инсталираме необходимият ни софтуер. Идеята зад целият процес е да минимизираме както използваното дисково пространство така и самата употреба на диска. По този начин също така ще намалим количеството използван софтуер което ще улесни нашата поддръжка.</p>
<p><strong>Желязото</strong><br />
За този проект използваме следният хардуер</p>
<blockquote><p>Compaq Deskpro series small factor machine<br />
CPU: 333 mhz<br />
RAM: 256 mb<br />
HDD: 6,4 GB<br />
LAN: 1 x Intel Ether Express (onboard), 1 x Davicom.</p></blockquote>
<p>Като цяло това е една доста мършава машина по сегашни стандарти но за целта е напълно достатъчна. Поради факта че мрежовата карта на Davicom като цяло е голям боклук ще я ползваме за вътрешна, тъй като там ще се справя с по малко проблеми.</p>
<p><strong>Инсталация на базова система</strong><br />
Това е като цяло прост процес. Намерете си любимото CD с дебиан 3.1 и да започваме. Първата важна точка в дневният ред е по какъв начин да разделим диска. Аз лично препоръчвам следната конфигурация:</p>
<blockquote><p>/boot &#8211; 100 MB<br />
/ &#8211; 2 GB<br />
swap &#8211; 256 MB<br />
/home &#8211; REST</p></blockquote>
<p>Това разделяне ще ни даде относително голяма свобода на работа както и възможност за по нататъшно развитие.</p>
<p>Друг важен момент е в коя лан карта да сложим мрежа. Както обосновахме по-горе поради ниското качество на едната карта ще я използваме за вътрешна, а вградената ще използваме за външна. Общият принцип е че тази карта която ще използваме за външна трябва да бъде с мрежа по време на инсталация. Не е невъзможно това да се пренебрегне но в последствие има доста повече работа.</p>
<p>Следва да инсталираме системата. Аз препоръчвам клона testing, тъй-като в него има по нови версии на софтуера и е достатъчно стабилен за нашите цели. По време на самата инсталация не избирайте никакъв профил от предложените ви. Изберете сигурна парола за root и не създавайте допълнителен потребител.</p>
<p><strong>Минимизиране</strong><br />
След като вече сме завършили инсталацията време е да я минимизираме. За целта ще използваме пакета <a href="http://packages.debian.org/testing/admin/deborphan">deborphan</a>. Той се използва за да покаже пакети които не се използват. Нашата цел с неговото инсталиране е да премахнем абсолютно всичко което не ни е нужно. За целта ще се наложи неколкократно извикване на следният ред</p>
<pre class="brush: bash;">apt-get remove --purge \
`deborphan -a --no-show-section --guess-all | \
grep -v &quot;ssh\|deborphan\|bash\|apt\|nano\|kernel\|ssl&quot;`</pre>
<p><em><small>Редът е разделен на няколко реда за четимост</small></em><br />
Идеята на този ред е да изчисти абсолютно всички пакети които не са необходими или не се използват като пропусне пакетите които имат ssh, deborphan, apt, nano, kernel, ssl или bash в името си.<br />
Необходимо е тази команда да се изпълни няколко пъти тъй като софтуерът не е рекурсивен. Тази стъпка не е строго необходима но помага.<br />
Допълнително инсталираме пакета <a href="http://packages.debian.org/testing/admin/localepurge">localepurge</a> с чиято помощ ще отстраним ненужните локали. С него изберете същите езици/локали които сте избрали при инсталацията.</p>
<p><strong>Инсталиране на необходимият ни софтуер</strong><br />
Първо нека да доведем системата до най-новото състояние в клона който сме избрали</p>
<pre class="brush: bash;">apt-get update
apt-get --purge dist-upgrade
apt-get --purge dist-upgrade -f</pre>
<p>Следва да премахнем всички налични за момента кернели и да инсталираме такъв който ние искаме. Специално за дебиан кернелът се намира в пакет с име от типа kernel-image, linux-image. Открийте и премахнете всички подобни пакети</p>
<pre class="brush: bash;">apt-get remove --purge [package list]</pre>
<p>Сега следва да инсталираме кернел по наше желание. Ще използваме такъв който се предоставя от проекта дебиан тъй като конфигурацията му е достатъчно добра за нуждите ни.</p>
<pre class="brush: bash;">apt-get install linux-image-2.6.18-4-686</pre>
<p>Кернелът е достатъчно бърз и има всичко което ще ни трябва.Поради изборът ни на услуги ще се налоги да инсталираме малко допълнителен софтуер</p>
<pre class="brush: bash;">apt-get install iptables iproute bind9 bind9-host dhcp lighttpd php4-cgi php4-cli phpsysinfo mrtg samba ntp ntpdate proftpd ncftp vim logwatch rkhunter denyhosts iptraf mtr-tiny snmp snmpd iputils-ping lsof openssh-server sudo</pre>
<p>В процеса на инсталация ще бъдат инсталирани допълнителни пакети от които зависи работата на желаните от нас.Последната задача която стои пред нас на този етап от инсталацията е да добавим собствен потребител със негов собствен ssh ключ за повишаване на сигурността и да му гарантираме правото да изпълнява команди посредством sudo.</p>
<pre class="brush: bash;">adduser managementuser
cd ~managementuser/
mkdir .ssh
cat /root/managementuser-key.pub &gt; .ssh/authorized_keys2
chown -R managementuser:managementuser .ssh
usermod -G sudo managementuser
visudo</pre>
<p><strong>Забележка:</strong> файлът <strong>/root/managementuser-key.pub</strong> е публичният ssh ключ който сме генерирали предварително и копирали по някакъв начин на нашият рутер. Ключове се генерират най-лесно със <strong>ssh-keygen</strong>.<br />
Командата visudo редактира файла /etc/sudoers. Там трябва да добавим/откоментираме редът</p>
<pre class="brush: bash;">%sudo ALL=NOPASSWD: ALL</pre>
<p>който позволява на всички принадлежащи в групата sudo да изпълняват всички команди без парола.</p>
<p><strong>Заключение</strong><br />
Като цяло в това се състои нашата базова инсталация. От тук на сетне тя трябва да бъде настроена. Всички останали задачи ще изпълняваме посредством ssh като първо се свързваме с нашият потребител <strong>managementuser</strong> и в последствие ставаме <strong>root</strong> посредством <strong>sudo su -</strong></p>
<p>Серията продължава в <a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">The Perfect SOHO router &#8211; Part 3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
