<?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>Insight IT &#187; Unix way</title>
	<atom:link href="http://www.insight-it.ru/category/unix-way/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.insight-it.ru</link>
	<description>Информационные технологии</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:34:08 +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>Sun Unified Storage</title>
		<link>http://www.insight-it.ru/unix-way/unix/sun-unified-storage/</link>
		<comments>http://www.insight-it.ru/unix-way/unix/sun-unified-storage/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 17:34:32 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[7410]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[Sun]]></category>
		<category><![CDATA[Sun Unified Storage]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=497</guid>
		<description><![CDATA[По работе мне доводилось активно &#171;иметь дело&#187; с железкой от Sun под названием Sun Unified Storage 7410. Представляет собой достаточно мощную систему хранения данных с установленным Solaris, но доступом и управлением исключительно через веб-интерфейс. Основной &#171;фишкой&#187; системы является модульность: дисковый массив наращивается подключаемыми внешне дисковыми модулями по примерно 20-50ТБ, сетевой интерфейс также модульный &#8212; на [...]]]></description>
			<content:encoded><![CDATA[<p>По работе мне доводилось активно &#171;иметь дело&#187; с железкой от Sun под названием <a href="http://www.sun.com/storage/disk_systems/unified_storage/7410/" rel="external nofollow" target="_blank">Sun Unified Storage 7410</a>. Представляет собой достаточно мощную систему хранения данных с установленным Solaris, но доступом и управлением исключительно через веб-интерфейс. Основной &#171;фишкой&#187; системы является модульность: дисковый массив наращивается подключаемыми внешне дисковыми модулями по примерно 20-50ТБ, сетевой интерфейс также модульный &#8212; на выбор начиная от нескольких обычных Ethernet по 1GBps и заканчивая оптоволокном, CX4 или InfiniBand. Две таких машины можно легко объединить в одну виртуальную для повышения надежности доступа к данным, подключив к ним общий дисковый массив. RAID используется софтверный средствами ZFS, вполне стандартный набор опций из зеркалирования, stripe, RAID5/6 и их комбинаций.</p>
<p>С точки зрения производительности тоже достаточно интересная штука: при подключении через 4x 1GBps Ethernet (с использованием LACP, но это тема для отдельного поста) определенно упирается в сеть, но все равно отлично подходит для использования в решении многих прикладных задач. Из интересных опций можно отметить прозрачное использование нескольких SSD-дисков в каждом дисковом массиве в роли кэша.</p>
<p>Все функции системы абсолютно прозрачны и настраиваются в несколько кликов через веб-интерфейс, командная строка хоть при желании и доступна, но практически не нужна. Там же можно увидеть статистику использования подсистем и прочую полезную информацию. В целом отличная система хранения данных: простая, надежная, быстрая, удобная, вместительная и масштабируемая, правда с одним большим НО &#8212; цена просто зашкаливает, прицениться можно, сходив по ссылке в начале записи, но вообще есть и более дешевые модели в этой серии.</p>
<p><em>К чему я это все вспомнил?</em> На почту пришел очередной рекламный буклет от Sun с <a href="https://dct.sun.com/dct/forms/reg_us_1308_670_0.jsp"  rel="external nofollow" target="_blank">предложением попробовать Sun Unified Storage в виртуальной машине VirtualBox или VMWare</a>, сам еще не установил &#8212; времени не нашлось, но возможно Вам покажется интересным. Конечно это не совсем то же самое, что и физическая железка &#8212; производительность дисковых и сетевых подсиситем не померять, но веб-интерфейс заценить можно.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/unix/sun-unified-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome</title>
		<link>http://www.insight-it.ru/unix-way/linux/google-chrome/</link>
		<comments>http://www.insight-it.ru/unix-way/linux/google-chrome/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 21:36:49 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[браузер]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=90</guid>
		<description><![CDATA[Наверное многие из вас уже успели за последние пару дней стать свидетелями всей этой шумихи на просторах Сети, связанной с выходом Google на рынок браузеров. Сопутствующие релизу комиксы произвели на меня вполне положительное впечатление, благодаря достаточно большой актуальности поднятых в них проблем и интересным вариантам их решений. Так что я определенно решил, что поглядеть что [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/google-chrome.png" title="Google Chrome" alt="Google Chrome" style="float:right;margin:64px 16px;" /><br />
Наверное многие из вас уже успели за последние пару дней стать свидетелями всей этой шумихи на просторах Сети, связанной с выходом Google на рынок браузеров. Сопутствующие релизу <a href="http://www.google.com/googlebooks/chrome/#" target="_blank" rel="nofollow">комиксы</a> произвели на меня вполне положительное впечатление, благодаря достаточно большой актуальности поднятых в них проблем и интересным вариантам их решений. Так что я определенно решил, что поглядеть что за зверь такой &#8212; <strong>Google Chrome</strong>, определенно стоит, а что из этого вышло я и хотел бы тут рассказать, так что очередную рекламу нового продукта или какие-либо практически полезные советы у Вас врядли получится здесь обнаружить.<br />
<span id="more-90"></span><br />
Первым делом я посетил <a href="http://www.google.com/chrome" target="_blank" rel="nofollow">официальную страничку браузера</a> и практически сразу немного разочаровался, увидев в заголовке надпись <strong>Google Chrome (BETA) for W****ws</strong>. Сразу напросился вопрос: а где версия для <strong><em>Linux</em></strong>? Покопавшись в соседних страничках ничего подобного обнаружить не удалось &#8212; пришлось пожать плечами с мыслью &#171;наверное еще не сделали&#187;.</p>
<p>Зато через какое-то время наткнувшись на очередную заметку про все ту же довольно избитую тему, я заметил ма-а-аленькую неприметную <a href="http://dev.chromium.org/developers/how-tos/build-instructions-linux" target="_blank" rel="nofollow">ссылку</a> на &#171;инструкцию по компиляции Google Chrome из исходников в Linux&#187;. В очередной раз пожав плечами с мыслью &#171;а нам не привыкать, все равно Gentoo пользуюсь&#187; отправился вводить заветное заклинание в свежесозданную консольку.</p>
<p>Заклинание это выглядит примерно следующим образом:</p>
<pre lang="bash">
#!/bin/bash
CHROME=/usr/local/src
mkdir $CHROME/chrome
cd $CHROME/chrome
export LANG=C
$CHROME/depot_tools/gclient config http://src.chromium.org/svn/trunk/src
$CHROME/depot_tools/gclient sync
cd $CHROME/src/chrome
../third_party/scons/scons.py Hammer
</pre>
<p>Для успешного каста требуются следующие ингридиенты:</p>
<ul>
<li>subversion &gt;= 1.4</li>
<li>pkg-config &gt;= 0.20</li>
<li>python &gt;= 2.4</li>
<li>perl &gt;= 5.x</li>
<li>gcc/g++ &gt;= 4.2</li>
<li>bison &gt;= 2.3</li>
<li>flex &gt;= 2.5.34</li>
<li>gperf &gt;= 3.0.3</li>
<li>libnss3-dev &gt;= 3.12</li>
</ul>
<p>Начался процесс вполне оптимистично &#8212; строчки, генерируемые <strong>svn co</strong> побежали по экрану вполне весело, но когда этот процесс затянулся на более чем час &ndash; стало очевидно, что даже <em>Google</em> оказалось не по зубам выдержать такой наплыв желающх &#171;заценить&#187; новую игрушку и обеспечить достаточную пропускную способность на сервере с SVN. Правда и масштабы проекта мягко говоря впечатляют &#8212; директория с исходным кодом перед инициализацией компиляции оказалось очень даже весомой: <strong>2.6 GB</strong>. В общем в итоге я не придумал ничего лучше, чем по старой традиции оставить браузер компилироваться на ночь и с чистой совестью уползти спать.</p>
<p>В итоге оказалось, что в результате получается не вовсе браузер, а лишь некоторые непонятно зачем нужные бинарники: надо было внимательно читать инструкцию, особенно обведенный в красную рамку блок &#8212; студенческая привычка при чтении чего-либо подсознательно отфильтровывать всю на первый взгляд второстепенную информацию, попадающую в категорию &#171;слишком много букв&#187;, дала о себе знать <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  В общем там об этом все заранее предупреждали &#8212; я просто не заметил, ну да ладно: в wine-то оно точно заведется, все тот же Google с легкостью помог обнаружить соответствующий мануал, для моего Gentoo он свелся к следующему:</p>
<pre lang="bash">
#!/bin/bash
emerge --sync; emerge -av wine cabextract
cd /usr/bin
sudo wget www.kegel.com/wine/winetricks
sudo chmod +x winetricks
winetricks riched20 riched30 flash allfonts
cd ~
wget gpdl.google.com/chrome/install/149.27/chrome_installer.exe
wine chrome_installer.exe
rm chrome_installer.exe
</pre>
<p>Запуск с ходу из инсталлятора ничем хорошим не закончилcя, но вот такая команда вполне нормально запустила-таки браузер</p>
<pre lang="bash">
wine ~/.wine/drive_c/windows/profiles/m11/Local Settings/Application Data/Google/Chrome/Application/chrome.exe--new-http --in-process-plugins
</pre>
<p><em>(если кто соберется копипастить &#8212; не забываем подменять m11 на свое имя пользователя)</em></p>
<p>Первое впечатление &#8212; ужасный V**ta-like дизайн, вернее не то чтобы он совсем ужасный &#8212; минималистичность очень даже полезное свойство для дизайна браузера, но в мое KDE 3.5.9 темно-фиолетовой раскраски он не вписывается ну совсем никак. Ну да ладно &#8212; пока он стоит &#171;просто побаловаться&#187;, то можно и потерпеть. Далее я решил пройтись по основным &#171;фишечкам&#187;, заинтересовавшим меня в комиксах &#8212; все реализовано вполне &#171;как обещали&#187;, очень много концептуально правильных решений, которых в старом-добром FF определенно не хватает (перечислять наверное смысла нет &#8212; все и так уже, наверное, в курсе что там есть &#171;вкусненького&#187;). Но и многих абсолютно жизненно-важных вещей я там не обнаружил &#8212; начиная с блокировки рекламы и заканчивая все тем же стандартно-фиксированным дизайном и отсутствием центрального репозитория плагинов. Кое-какие неприятности можно свалить на все еще не окончательную доведенность до ума wine (проблемы с SSL/TSL, скажем), но на них я смело закрывал глаза &#8212; пока не будет полноценной Linux-версии о регулярном использовании данного продукта речи быть просто не может. Скорость работы новинки также произвела впечатление &#8212; на его фоне даже FF чисто субъективно показался медлительным (не смотря на все огрехи wine, как оно будет выглядить в native-версии &#8212; предсказать сложно).</p>
<p>Меню настроек оказалось вполне стандартным &#8212; ничего лишнего, лишь самые необходимые вещи, даже ребенок разберется. Хотя сложно на самом деле сказать плюс это или минус: если вдруг взбредет в голову потюнить что-либо более специфическое, могут возникнуть проблемы, хотя впринципе возможно там всетаки предусмотренно какое-то более расширенное меню настроек, по аналогии с about:config в FF, а я его просто не нашел.</p>
<p>Вдоволь наигравшись, я смело закрыл окошко браузера, с твердой уверенностью, что когда-нибудь потом обязательно заморочусь и с установкой и (возможно) эксплуатацией полноценной native Linux версии, когда граждане из Google соизволят-таки довести ее до работоспособного состояния &#8212; к тому времени глядишь и ситуацию с плагинами и темами исправят. Вот такая вот бестолковая история, спасибо, что дочитали до конца <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.: А вот <a href="/feed" target="_blank">тут есть RSS</a>, если вдруг кто еще не в курсе.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/linux/google-chrome/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Архитектура LiveJournal</title>
		<link>http://www.insight-it.ru/unix-way/linux/arkhitektura-livejournal/</link>
		<comments>http://www.insight-it.ru/unix-way/linux/arkhitektura-livejournal/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 21:24:04 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[djabberd]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[MogileFS]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perlbal]]></category>
		<category><![CDATA[TheShwartz]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[архитектура LiveJournal]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/net/scalability/arkhitektura-livejournal/</guid>
		<description><![CDATA[LiveJournal был одним из первых сервисов, бесплатно предоставляющих всем желающим личный блог. Практически с самого начала своего существования в далеком 1999 году проект столкнулся с непрерывно растущим потоком желающих воспользоваться услугами сервиса. Как же проекту удалось справиться с предоставлением маленького кусочка интернета каждому желающему, обойдя при этом всех конкурентов? Источники информации Возможно Вы ожидали увидеть [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.livejournal.com" target="_blank" rel="nofollow">LiveJournal</a> был одним из первых сервисов, бесплатно предоставляющих всем желающим личный блог. Практически с самого начала своего существования в далеком 1999 году проект столкнулся с непрерывно растущим потоком желающих воспользоваться услугами сервиса. Как же проекту удалось справиться с предоставлением маленького кусочка интернета каждому желающему, обойдя при этом всех конкурентов?<br />
<span id="more-64"></span></p>
<h3>Источники информации</h3>
<p><em>Возможно Вы ожидали увидеть здесь очередной перевод статьи с английского, но тогда придется Вас разочаровать, на этот раз я решил попробовать свои силы в самостоятельном написании статьи на такую серьезную тему. Просьба особо сильно помидорами в меня не кидаться <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p>Основным источником информации послужила <a target="_blank" rel="nofollow" href="http://video.google.com/videoplay?docid=-8953828243232338732">презентация Brad Fitzpatrick</a> в Токио.</p>
<h3>Платформа</h3>
<ul>
<li><a href="/tag/linux" target="_blank">Linux</a> (<a href="/tag/debian" target="_blank">Debian Sarge</a>)</li>
<li><a href="/tag/perl" target="_blank">Perl</a></li>
<li><a href="/tag/apache" target="_blank">Apache</a></li>
<li><a href="/tag/mysql" target="_blank">MySQL</a> 4.0/4.1 в основном с InnoDB</li>
<li><a href="/tag/perlbal" target="_blank">Perlbal</a>, веб-сервер и балансировщик нагрузки</li>
<li><a href="/tag/memcached" target="_blank">memcached</a> для распределенного кэширования</li>
<li><a href="/tag/mogilefs" target="_blank">MogileFS</a>, распределенная файловая система</li>
<li><a href="/tag/gearman" target="_blank">Gearman</a></li>
<li><a href="/tag/theshwartz" target="_blank">TheShwartz</a></li>
<li><a href="/tag/djabberd" target="_blank">djabberd</a></li>
</ul>
<div style="float: left; margin: 12px;">
<script type="text/javascript"><!--
google_ad_client = "pub-4223450581209002";
/* inline, 468x60, created 11/04/08 */
google_ad_slot = "6487924823";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<h3>Статистика</h3>
<ul>
<li>на данный момент 15320315 учетных записей; <em>(10.04.08)</em></li>
<li>из них активно используется 551589;</li>
<li>наиболее активно сервис используется в США и Российской федерации, а 2/3 пользователей &#8212; девушки и женщины;</li>
<li>более 15 миллионов новых записей в блогах за месяц;</li>
<li>более 50 миллионов просмотров страниц в день, при пиковой нагрузке &#8212; несколько тысяч в секунду <em>(сильно устаревшие цифры, 2004 год);</em></li>
<li>связь с внешним миром осуществляется через два BIG-IP (активный + в режиме ожидания) с автоматическим восстановлением работоспособности в случае сбоя в работе одного из них, защитой от DDoS, L7 набором правил, включая TCL;</li>
<li>более сотни серверов, насчет конфигурации известен только тот факт, что практически на каждом сервере установлены огромные объемы оперативной памяти (более 12 GB) для эффективного кэширования.</li>
</ul>
<h3>История</h3>
<ul>
<li>Все началось с одного обычного сервера. Он выполнял роль как веб-сервера так и базы данных. Единственный плюс такого подхода к организации работы оборудования &#8212; достаточно дешево. Само собой достаточно скоро этот сервер перестал справляться с нагрузкой.</li>
<li>Следующим шагом было разнесение веб-сервера и базы данных на разные серверы, всего их получилось два. По прежнему имелось два узла, сбой в которых означал недоступность сервиса. По прежнему вычислительная мощность такой системы оставалась более чем скромной.</li>
<li>Первым из тех двух серверов, как ни странно, перестал справляться с нагрузкой веб-сервер &#8212; докупили еще два. Веб-сервера три, внешний IP &#8212; один, теперь приходится как-то распределять нагрузку! А как добавить еще одну базу данных?</li>
<li>Новый сервер баз данных был подключен в роли slave к исходному, данные в нем обновлялись с помощью репликации, а обрабатывал он только операции чтения, оставив все операции записи первому серверу.</li>
<li>Есть предположения о том, к чему привело дальнейшее добавление новых серверов? Правильно &#8212; к полнейшему хаосу! Со временем стала возникать проблема масштабируемости баз данных. Операции чтения производились на каком-то одном сервере, но когда приходил запрос на запись данных, так или иначе данные приходилось производить обновление на каждом из slave серверов. В итоге выполнение синхронизации данных стало занимать подавляющее большинство процессорного времени slave серверов, что привело к отсутствию возможности продолжать масштабирование просто добавлением дополнительных серверов.</li>
<li>Пришло время задуматься над архитектурой системы и распределением операций записи. Основной целью стало избавиться от такой серьезной избыточности данных, так как это было практически пустой тратой времени копировать одни и те же данные на десяток машин, да еще и с RAID на каждой из них.</li>
<li>Наиболее эффективным подходом в такой ситуации является сегментирование базы данных. Все серверы баз данных разбиваются на небольшие кластеры. Каждый пользователь системы прозрачно привязывается к определенному кластеру, таким образом когда он обновляет свой блог или какие-либо еще данные, запись ведется в рамках только небольшой группы серверов, такой же принцип справедлив и для чтения.
<p>Применительно к LiveJournal эту схему лучше всего демонстрирует один из слайдов презентации, указанной в источниках информации:<br />
<a href="/wp-content/uploads/LJ-scheme.jpg" target="_blank"><img src="/wp-content/uploads/LJ-scheme-s.jpg" alt="Сегментирование базы данных в Livejournal" title="Механизм работы сегментированной базы данных в LiveJournal" /></a></p>
<p>При работе такой системы не используется auto_increment в <a href="/tag/mysql" target="_blank">MySQL</a>, а также используется составной primary key из номера пользователя и номера записи. Таким образом пространство имен объектов разбито на группы, соответствующие конкретному пользователю.</li>
<li>Дальнейшим развитием решения проблемы излишней избыточности данных может послужить отказ от кластеров, аналогичных по структуре исходному для хранения сегментов базы данных. Это может быть как вариант с общим на несколько серверов хранилищем данных, так и более низкоуровневая репликация данных средствами <abbr title="Distributed Replicated Block Device">DRBD</abbr> в совокупности с HeartBeat. Каждый из возможных вариантов кластеризации MySQL имеет массу положительных и отрицательных сторон, так что конкретного лидера среди них выделить достаточно сложно. Возможно именно это и подтолкнуло разработчиков построить собственное решение, комбинируя их с целью получения наилучшего эффекта.</li>
</ul>
<h3>Программное обеспечение</h3>
<p>В ситуации, когда не удавалось найти готового программного решения для какой-то конкретной задачи, они не боялись взяться за написание его самостоятельно, это стало одним из основных компонентов успеха проекта. Существенная часть программной платформы LiveJournal написана специально для этого проекта и выпущено под свободной лицензией с открытым исходным кодом, доступным в <a href="http://code.sixapart.com/" target="_blank" rel="nofollow">официальном SVN репозитории</a>.</p>
<h4>memcached</h4>
<p>Залогом быстрой загрузки любой страницы крупного интернет-проекта является кэширование. Но как всегда возникает вопрос: а на каком уровне обработки данных его стоит выполнять? Для динамических страниц недопустимо кэширование на уровне готовых страниц. Можно кэшировать на уровне mod_perl, но по сути это пустая трата оперативной памяти, так как создастся отдельный кэш для каждого потока <a href="/tag/apache" target="_blank">Apache</a>, и количество промахов мимо кэша будет огромно. Кэширование запросов MySQL или HEAP таблицы также не дали бы требуемого результата ввиду чрезвычайной распределенности базы данных.</p>
<p>Выходом из сложившейся ситуации стало написание собственной распределенной системы кэширования объектов, получившей название <a href="/tag/memcached" target="_blank">memcached</a>. Она позволяет:</p>
<ul>
<li>использовать для кэширования свободную оперативную память практически любого компьютера, задействованного в системе;</li>
<li>кэшировать объекты практически любого языка программирования в сериализованном виде: <a href="/tag/perl" target="_blank">Perl</a>, <a href="/tag/php" target="_blank">PHP</a>, <a href="/tag/java" target="_blank">Java</a>, <a href="/tag/c" target="_blank">C++</a> и так далее;</li>
<li>использовать для передачи кэшируемых данных простой протокол, не требующий избыточности данных;</li>
<li>избегать даже теоретической возможности полного сбоя работы кэшируещей системы в связи с полной равнозначностью серверов;</li>
<li>достигать превосходной производительности при формировании HTML-кода страниц;</li>
<li>в разы снизить нагрузку на базы данных в проекте любого масштаба.</li>
</ul>
<p>Этот продукт на практике оказался более чем эффективен, о чем свидетельствует его более чем успешное использование во многих крупнейших веб-проектах.</p>
<h4>Perlbal</h4>
<p>При решении вопроса, связанного с балансировкой нагрузки между веб-серверами, пришлось перепробовать далеко не один десяток готовых решений, но, к сожалению, ни один из них не смог удовлетворить все потребности проекта. Не растерявшись, разработчики написали свое решение этой задачи и назвали его <a href="/tag/perlbal" target="_blank">Perlbal</a>. Конкурентов у него множество, начиная от решений на уровне оборудования, например от Foundry, заканчивая proxy балансировщиками нагрузки встроенные в более популярные веб-сервера, но, тем не менее, продукт получился достаточно конкурентноспособным. Он удовлетворял всем требованиям, выдвигаемым разработчиками проекта:</p>
<ul>
<li>быстрый;</li>
<li>небольшой размер;</li>
<li>&#171;сообразительный&#187;;</li>
<li>обработка &#171;мертвых&#187; узлов;</li>
<li>может выступать как в роли reverse proxy, так и балансировщика нагрузки;</li>
<li>базовый функционал классического веб-сервера;</li>
<li>реализация внутреннего перенаправления данных;</li>
<li>поддержка некоторых менее существенных трюков, реализованных обычно в виде plug-in&#8217;ов.</li>
</ul>
<p><a href="/tag/perlbal" target="_blank">Perlbal</a> не так активно используется вне LiveJournal, по сравнению с <a href="/tag/memcached" target="_blank">memcached</a>, но для решения конкретной задачи он подошел как нельзя лучше.</p>
<h4>MogileFS</h4>
<p>Идея распределенных файловых систем далеко не нова, достаточно вспомнить лишь <a href="/tag/gfs" target="_blank">GFS</a> или любой ее opensource аналог. Сам факт создания такой системы был очень легок, изначальная версия была написана за одни выходные, но при доведении ее до требуемого уровня качества пришлось попотеть. Решение о ее создании было развитием идеи распределения операций записи. Общая принцип хранения файлов прост: каждый файл в ФС относится к определенному классу файлов, который определяет все правила работы с файлом, в основном механизм его реплицирования, об остальном заботится сама система.</p>
<p>Как и все файловые системы этого класса, <acronym title="oMgFileS">MogileFS</acronym> работает на уровне пользовательских приложений и использует достаточно тривиальные протокол передачи данных и общую архитектуру: клиенты, управляющие серверы, абстрактные базы данных, сервера для хранения самих данных &#8212; в этом плане ничего нового придумано не было. Доступ к файлам осуществляется с помощью HTTP-запросов PUT/GET либо через виртуальный NFS-раздел. Единственной особенностью можно назвать уклон в построение собой абстрактной прослойки между приложением и собственно кластером базы данных (в случае LiveJournal &#8212; сегмента), используемой в роли альтернативы более тривиальной master/slave схемы.</p>
<h4>Gearman</h4>
<p><acronym title="manaGer">Gearman</acronym> по сути прост до безобразия, но это не мешает ему быть чрезвычайно эффективным. Возможно Вы уже догадались в чем суть этого еще одного продукта, написанного специально для LJ, если уже навели курсор на акроним в начале этого абзаца, если же нет &#8212; поясню: он управляет общей работой системы средствами клиент-серверной архитектуры и высокопроизводительного бинарного протокола. С их помощью он способен удаленно вызывать практически любые процедуры на удаленных серверах с минимальными задержками во времени. Казалось бы ничего особенного он сам по себе не делает, но на самом деле он выполняет очень важную функцию: увеличивает степень параллельности выполнения операций, необходимых для полноценного функционирования проекта. Единственное <strong>но</strong> в работе этого механизма заключается в том, что он не предоставляет никаких гарантий успешности выполнения работ.</p>
<p>В рамках LiveJournal <acronym title="manaGer">Gearman</acronym> применяется в основном для:</p>
<ul>
<li>обработка изображений средствами Image::Magick вне perl-приложений;</li>
<li>создание pool&#8217;а DBI соединений (DBD::Gofer + Gearman);</li>
<li>уменьшением нагрузки, создаваемой отдельными компонентами системы;</li>
<li>улучшения субъективного впечатления пользователей о быстродействии сервиса, благодаря выполнению части работ параллельно в фоновом режиме;</li>
<li>выполнение блокирующего ресурсы кода отдельно от обработчиков различных событий.</li>
</ul>
<h4>TheShwartz</h4>
<p>В качестве альтернативы gearman&#8217;у для работ, для выполнения которых необходимы некоторые гарантии успешности, а также некоторая стабильность, была разработана эта библиотека. Общая схема работы осталась та же: клиент-серверная, но за стабильность приходится платить &#8212; производительность существенно ниже, возможно возникновение задержек.</p>
<p>Хоть эти два продукта и выполняют схожие функции, используются они обычно в совокупности друг с другом, просто-напросто обрабатывая разные типы работ.</p>
<p>Основными сферами применения TheShwartz в LJ являются:</p>
<ul>
<li>отправка электронной почты (SMTP клиент);</li>
<li>LJ Notifications: каждое событие может вызывать за собой цепочку из тысяч уведомлений по электронной почте, SMS, XMPP и так далее;</li>
<li>отправка RPC сообщений внешним сервисам;</li>
<li>внедрение Atom потоков;</li>
</ul>
<h4>djabberd</h4>
<p>Как всегда следуя принципу &#171;чем проще &#8212; тем лучше&#187;, разработки LJ написали этот крошечный daemon, лежащий в основе их Jabber/LJTalk. Он способен спокойно работать с более чем 300 тысячами соединений, используя очень скромное количество оперативной памяти для поддержания каждого соединения.</p>
<p>Основной причиной для написания собственного Jabber-сервера, стало недостаточная расширяемость и масштабируемость существующих решений. Была необходимость в реализации многих нестандартных функций, вроде индивидуальных обработчиков пользовательских изображений и личных данных, обычно в других решениях было доступно только изменение методов аутентификации.</p>
<h3>Подводим итоги</h3>
<ul>
<li>Если перед Вами появилась нетривиальная задача &#8212; не бойтесь написать программное обеспечение для ее решения самостоятельно! Пускай, возможно, это потребует некторых дополнительных усилий, но масса преимуществ, связанных с полным соответствием требованиям конкретного проекта, превосходит все издержки дополнительной разработки.</li>
<li>Невозможно масштабировать проект просто постоянно добавляя новые сервера, рано или поздно все же прийдется задуматься об его архитектуре;</li>
<li>Распределение нагрузок и параллельное операций порой заслуживают того, чтобы разработчики обратили на них внимание;</li>
<li>&#171;Мы ненавидим изобретать колесо! Но тем не менее, если колесо не существует или оно квадратное, то мы не боимся изобретать круглое колесо.&#187; (с)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/linux/arkhitektura-livejournal/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Обзор memcached</title>
		<link>http://www.insight-it.ru/unix-way/obzor-memcached/</link>
		<comments>http://www.insight-it.ru/unix-way/obzor-memcached/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 15:08:47 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Unix way]]></category>
		<category><![CDATA[cash]]></category>
		<category><![CDATA[cashing]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[информационные технологии]]></category>
		<category><![CDATA[кэш]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[реализация]]></category>
		<category><![CDATA[технология]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/unix-way/obzor-memcached/</guid>
		<description><![CDATA[memcached представляет собой высокопроизводительную распределенную систему кэширования объектов в оперативной памяти. Оформлена она в виде классического daemon&#8216;а, слушающего подключения на одном из TCP-портов (по-умолчанию: 11211). Работа же с ним осуществляется с помощью клиентских библиотек, доступных практически для всех популярных языков программирования. memcached не использует конфигурационные файлы, но все же может быть в какой-то степени настроен [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.danga.com/memcached/" rel="nofollow" target="_blank"><strong>memcached</strong></a> представляет собой высокопроизводительную распределенную систему кэширования объектов в оперативной памяти.</p>
<p>Оформлена она в виде классического <a href="/tag/daemon" target="_blank">daemon</a>&#8216;а, слушающего подключения на одном из TCP-портов (по-умолчанию: 11211). Работа же с ним осуществляется с помощью клиентских библиотек, доступных практически для всех популярных языков программирования.<br />
<span id="more-46"></span><br />
<a href="/tag/memcached" target="_blank">memcached</a> не использует конфигурационные файлы, но все же может быть в какой-то степени настроен под свои нужды с помощью параметров, указываемых при запуске <a href="/tag/daemon" target="_blank">daemon</a>&#8216;а, и переменных окружения. Например, часто используется параметр <strong>-m</strong>, позволяющий указать объем используемой для хранения объектов оперативной памяти.<br />
По сути кэширование с помощью <a href="/tag/memcached" target="_blank">memcached</a> представляет собой некое подобие глобального ассоциативного массива, то есть набора соответствий <em>ключ &rarr; объект</em>.</p>
<h3>Как же оно работает?</h3>
<p>Принцип очень прост: после установления соединения между клиентом (произвольное приложение, воспользовавшееся услугами одной из клиентских библиотек) и сервером (распределенной системой, состоящей из <a href="/tag/daemon" target="_blank">daemon</a>&#8216;ов), клиенту предоставляется возможность выполнять четыре примитивных действия для организации кэширования:</p>
<ul>
<li><strong>set</strong> &#8212; установить соответствие между ключом и указанным объектом;</li>
<li><strong>add</strong> &#8212; аналогично <em>set</em>, но только при условии, что объекта с таким ключом в кэше нет;</li>
<li><strong>replace</strong> &#8212; абсолютная противоположность <em>add</em>, выполняется только если такой объект в кэше есть;</li>
<li><strong>get</strong> &#8212; получить объект из кэша по указанному ключу.</li>
</ul>
<p>Вывод напрашивается лишь один: проще не придумаешь.</p>
<h3>В сравнении</h3>
<p>Многие <a href="/tag/subd" target="_blank">СУБД</a> предоставляют встроенные средства кэширования, но на практике они умеют кэшировать только результаты запросов, что не всегда является именно тем, что необходимо веб-приложению. СУБД обычно полностью очищают кэш таблицы при каждом изменении данных, что приводит к полной его бесполезности при активном обновлении таблиц.</p>
<p>Еще один альтернативный вариант кэширования может предоставить http-сервер, в большинстве случаев кэш дублируется несколько раз для каждого процесса <a href="/tag/php" target="_blank">PHP</a>, <a href="/tag/perl" target="_blank">Perl</a> или любого другого используемого языка программирования. Помимо излишних затрат оперативной памяти, такой вариант развития событий еще и снижает эффективность самого кэша.</p>
<h3>На практике</h3>
<p>Использование <a href="/tag/memcached" target="_blank">memcached</a> на практике в написании приложений ничуть не сложнее, чем в теории. Например, если говорить о <a href="/tag/php" target="_blank">PHP</a>, то для доступа к <a href="/tag/daemon" target="_blank">daemon</a>&#8216;y достаточно установить соответствующий <a href="http://pecl.php.net/package/memcache" target="_blank" rel="nofollow">PECL extension</a>, который предоставит класс <strong>Memcached</strong>. С помощью его методов осуществляется доступ ко всем возможностям <a href="/tag/memcached" target="_blank">memcached</a>, о которых я уже упоминал: <strong>connect</strong>, <strong>set</strong>, <strong>add</strong>, <strong>get</strong>  и так далее.</p>
<p>Для многих других языков программирования также существуют API, список которых можно <a href="http://www.danga.com/memcached/apis.bml" target="_blank" rel="nofollow">найти на официальном сайте</a>.</p>
<h3>О чем не стоит забывать</h3>
<p><em>Кэш не является базой данных!</em> Не стоит забывать, что кэш является <em>очень</em> ненадежным местом хранения данных, не предоставляет избыточности и каких-либо гарантий, что сохраненная в нем информация будет доступна через какое-то время. За производительность приходится платить.</p>
<h3>В заключении</h3>
<p>&#8230;хотелось бы сказать, что эта <a href="/tag/tekhnologiya" target="_blank">технология</a> является очень производительным и эффективным решением вопроса кэширования для масштабных интернет-проектов. Возможности по ее применению не ограничиваются Сетью, ведь она реализована в виде обычного daemon&#8217;а, что открывает ее для всего спектра программного обеспечения, так или иначе следующего <a href="/unix-way" target="_blank">&#171;Unix&nbsp;way&#187;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/obzor-memcached/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Веб-сервер за два вечера</title>
		<link>http://www.insight-it.ru/unix-way/unix/web-server-za-dva-vechera/</link>
		<comments>http://www.insight-it.ru/unix-way/unix/web-server-za-dva-vechera/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 12:59:10 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Beastie]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[веб-сервер]]></category>
		<category><![CDATA[операционная система]]></category>
		<category><![CDATA[сервер]]></category>
		<category><![CDATA[системное администрирование]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/unix-way/unix/veb-server-za-dva-vechera/</guid>
		<description><![CDATA[Многие из вас наверняка все еще помнят те времена, когда компьютерная техника находилась лишь на ранней стадии своего развития. Позволить себе иметь в личном распоряжении персональный компьютер мог далеко не каждый, а о серверном оборудовании и вовсе не могло быть и речи. Но, к счастью, времена меняются, и на сегодняшний день покупка даже серверного оборудования [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/beastie.png" alt="Beastie" title="Beastie: The BSD Daemon" style="float: left" /><br />
Многие из вас наверняка все еще помнят те времена, когда компьютерная техника находилась лишь на ранней стадии своего развития. Позволить себе иметь в личном распоряжении персональный компьютер мог далеко не каждый, а о серверном оборудовании и вовсе не могло быть и речи.</p>
<p>Но, к счастью, времена меняются, и на сегодняшний день покупка даже серверного оборудования связана с достаточно скромными затратами, сопоставимыми с бюджетом покупки настольного компьютера или ноутбука. Но возникает другой вопрос &#8212; а что же с этим оборудованием делать? Вполне логичным ответом было бы: &#171;использовать по прямому назначению&#187;, о чем мы с Вами сегодня и поговорим в компании с замечательным персонажем по имени <em><a href="/tag/beastie" target="_blank">Beastie</a></em> и операционной системой <strong><a href="/tag/freebsd" target="_blank">FreeBSD</a></strong>, с которой он частенько ассоциируется.</p>
<p><span id="more-39"></span><br />
Под &#171;использованием по прямому назначению&#187; конечно же можно было подразумевать множество разных применений, но я  хотел все-таки остановиться на варианте использования в роли веб-сервера, как альтернативу многочисленным услугам по предоставлению shared и VPS хостинга.</p>
<h3>Предистория</h3>
<p>Некоторое время назад ко мне в руки попал простенький сервер, который как раз предполагалось использовать как хостинг для одного из проектов. Оставалось лишь сделать его пригодным для выполнения этой задачи. Казалось бы дело это как минимум не тривиальное, но буквально через пару дней мне довелось убедиться в обратном.</p>
<p>Ассортимент оборудования, спрятанного внутри <strong>1U</strong> корпуса, был вполне стандартным, ничего особенного: процессор <strong>Intel Xeon 5335</strong>, оперативная память <strong>Kingston 2х2 GB ECC Full-buffered</strong>, жесткий диск изначально только один &#8212; <strong>WD 150 GB 10000rpm SATA</strong>, а вот модель материнской платы, к сожалению, на память назвать не могу, вроде что-то от <strong>SuperMicro</strong>, с простенькой встроенной видеокартой, сетевой картой с двумя гигабитными Ethernet портами и встроенным же видимо software RAID-контроллером. Опытный глаз наверняка заметил бы в этом списке сильную недоукомплектацию, особенно проявляющуюся при упоминании процессора в единственном числе, отсутствии RAID, и скромным объемам оперативной памяти. Объясняется это достаточно просто &#8212; проект еще предстоит тестировать перед запуском, а этой платформы для этого будет более чем достаточно.</p>
<p>Перед запуском проекта в открытое плавание естественно предстоит upgrade оборудования.</p>
<h3 style="text-align: right">День первый</h3>
<h4>Подготовка</h4>
<p>Если верить бумажкам, идущим в комплекте с сервером, на единственный жестком диск в магазине установили демо-версию одной из серверных операционных систем от одной мало кому известной корпорации. Смотреть что это за зверь такой у меня особого желания не было, по-этому я не долго думая пошел искать среди своей коллекции дистрибутивов болванку с заранее выбранным <a href="/tag/opensource" target="_blank">opensource</a> решением вопроса об <a href="/tag/os">операционной системе</a> &#8212; <strong><a href="/tag/freebsd">FreeBSD 6.2</a></strong>.</p>
<p>Почему выбор пал именно на эту <a href="/tag/os" target="_blank">ОС</a> объяснить не так уж и просто, но я все же попробую. Выбор был достаточно классический: <em><a href="/tag/unix" target="_blank">Unix</a> vs <a href="/tag/linux" target="_blank">Linux</a></em>, возникали еще некоторые сомнения насчет решений от <em>Sun</em> в виде <em>Solaris</em> и <em>OpenSolaris</em>, но от них я отказался достаточно быстро в основном из-за более чем скромной документации и проприетарного происхождения, попутно закрыв глаза на все положительные отзывы, которые я видел в <a href="/net" target="_blank">Сети</a>.</p>
<p>Так как мне хотелось иметь иметь перед собой <em>конструктор</em> для сбора системы именно таким образом, как было бы удобно мне, а не разработчикам дистрибутива, то список вариантов, выступавших на стороне <a href="/tag/linux" target="_blank">Linux</a> быстро начал сокращаться, начиная с <strong>CentOS</strong>. Предпоследним вычеркнутым из списка дистрибутивов <a href="/tag/linux" target="_blank">Linux</a> был <strong>Debian</strong>, что оставило в нем лишь <a href="/tag/gentoo" target="_blank">Gentoo Linux</a>. Финальный выбор между <a href="/tag/freebsd">FreeBSD</a> и <a href="/tag/gentoo" target="_blank">Gentoo</a> был сделан уже легче: во-первых, по <a href="/unix-way/linux/gentoo-linux-sony-vaio/" target="_blank">своему опыту с ноутбуком</a> я уже понял, что с <a href="/tag/gentoo" target="_blank">Gentoo</a> предстояло бы немало хлопот, а, во-вторых, в новый <em>конструктор</em>, как ни крути, &#171;играть&#187; намного интереснее, чем в старый, так что долго думать не пришлось <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>Установка</h4>
<p>Найдя наконец диск с <a href="/tag/freebsd">FreeBSD</a>, я попытался решить следующий возникший вопрос: а как же установить операционную систему с компакт-диска на компьютер, не имеющий соответствующего привода? Так как сервер был запломбирован и находился на гарантии, вариант частично разобрать и подключить обычный привод отпал сразу же, ровно как и вариант с подключением внешнего привода по причине его отсутствия. Подходящее решение было найдено практически сразу же, благо жесткие диски подключались по принципу hotswap: вытащив жесткий диск без развинчивания корпуса, я подключил его к подвернувшемуся под руку настольному компьютеру, обладающему DVD-приводом. Загрузка прошла успешно и я приступил к установке, руководствуясь <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html" target="_blank" rel="nofollow">FreeBSD Handbook</a>, пересказывать его особого желания у меня  нет, остановлюсь лишь на некоторых особенностях этого процесса.</p>
<p>Первым этапом установки, где пришлось задуматься, был <strong>fdisk</strong> (разбиение диска на так называемые <em>slice</em>). Для избежания путаницы для самого себя, я решил, что размещу рабочие директории http-сервера и базы данных в <strong>/var</strong>, которую и выделил в отдельный <em>slice</em>, занимающий б<em>о</em>льшую часть доступного дискового пространства. В ассортимент доступного при установке программного обеспечения я особо вникать не стал, так как знал, что у меня всегда будет возможность заняться им позже, и как следствие этого выбрал что-то очень близкое к стандартному набору <a href="/tag/po" target="_blank">ПО</a>.<br />
Подтвердив установку и подождав достаточно непродолжительный период времени, я перезагрузил систему, вытащив установочный диск в процессе. Установка оказалась на удивление элементарной, что привело к полученной с первой попытки работоспособной системе. Увидев долгожданное приглашение к вводу логина и пароля я убедился, что могу беспрепятственно получить доступ к консоли и сразу же выключил систему, чтобы перенести жесткий диск обратно на сервер.</p>
<p>Так как сетевое подключение еще только предстояло настроить, то на сервер переносить пришлось не только жесткий диск, но и монитор с клавиатурой. На новом оборудовании все так же прекрасно запустилось, и я принялся за настройку подключения. Особых проблем не возникло &#8212; в <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#NETWORK-COMMUNICATION" target="_blank" rel="nofollow">Handbook</a>&#8216;е все более чем качественно задокументировано, самым сложным был процесс выбора драйвера, вернее осознавание того, что он изначально правильно сам установился. Следующей маленькой проблемой было угадывание какой же из <em>Ethernet</em>-портов был только что настроен, и, соответственно, подключение кабеля именно в него, а не в его соседа. После завершения всех манипуляций я с радостью обнаружил, что <strong>ping</strong> от сервера до gateway&#8217;а успешно проходит, что по сути и означало окончание настройки сетевого подключения.<br />
Следущей целью было избавить себя от необходимости пользоваться позаимствованными у другого компьютера клавиатурой и монитором. Дело тоже оказалось достаточно нехитрым, <strong>sshd</strong> установился и настроился вполне самостоятельно где-то в процессе установки, от меня потребовалось лишь создать дополнительного пользователя, написать нехитрую строчку в <strong>rc.conf</strong>: <em>sshd_enable=&#187;YES&#187;</em> и собственно запустить daemon&#8217;а. Этого было вполне достаточно, чтобы набрав на своем <a href="/tag/noutbuk" target="_blank">ноутбуке</a> <strong>ssh</strong> в консоли, с указанием необходимых параметров, получить удаленный доступ к серверу по протоколу <strong>SSH</strong>.</p>
<p>Решив, что для начала этого будет вполне достаточно, я отправился по другим делам, так как тот вечер еще даже не успел подойти к своему завершению.</p>
<h3 style="text-align: right">День второй</h3>
<h4>Программное обеспечение</h4>
<p>Хорошо, вполне работоспособную <a href="/tag/os" target="_blank">операционную систему</a> мы получили. Осталось снабдить ее необходимым <a href="/tag/po" target="_blank">программным обеспечением</a> для выполнения своих обязанностей, определенных нами заранее.</p>
<p>Прежде чем что-либо устанавливать, очень не пожалел, что ознакомился как с соответствующим <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#PORTS" rel="nofollow" target="_blank">разделом handbook&#8217;a</a>, так и с <a href="http://www.freebsd.org/ports/" rel="nofollow" target="_blank">доступным ассортиментом ПО</a>. После этого я перешел-таки собственно к выбору и установке <a href="/tag/po" target="_blank">ПО</a>:</p>
<ul>
<li>Так как одной из основных составных частей практически любого веб-сервера является http-daemon, именно с его выбора я и решил начать. Причем начал еще задолго до описываемых событий, вся многофункциональность <a href="/tag/apache" target="_blank">Apache</a> мне была не нужна, а аналоги <em>mod_auth</em> и <em>mod_rewrite</em> есть и в более легких http-серверах. Cамо веб-приложение, которое там предполагалось располагать, работает по большей части на <a href="/tag/php" target="_blank">PHP</a>, так что ничего особенного от httpd совсем не требовалось. В итоге финальный выбор был между <em>быстрыми</em> и <em>легкими</em> вариантами: <strong>nginx</strong> и <strong><a href="/tag/lighttpd" target="_blank">lighttpd</a></strong>, какой-либо весомой причины по которой я выбрал <strong><a href="/tag/lighttpd" target="_blank">lighttpd</a></strong> с <strong>mod_fastcgi</strong> привести не могу, основным фактором был мой некоторый опыт работы с ним в прошлом, и отсутствие такового в отношении <strong>nginx</strong>. Установка прошла легко и непринужденно с помощью в сжатые сроки найденного в <a href="/tag/google" target="_blank">Google</a> <a href="http://www.cyberciti.biz/faq/howto-setup-lighttpd-fastcgi-php-server/" target="_blank" rel="nofollow">мануала</a>.</li>
<li>Другим немаловажным компонентом сервера является <strong>ftpd</strong>, как известно используемый для передачи файлов. Собственно говоря, если активное его использование не планируется, то особого значения какой именно сервер будет использоваться значения не имеет: любой из доступных устанавливается настраивается в пару простых шагов без каких-либо проблем (если это имеет значение &#8212; я выбрал <strong>vsftpd</strong>, так как мне уже далеко не один раз доводилось его настраивать на домашних компьютерах, и, как следствие, даже инструкция не понадобилась). Но при потенциальной возможности работы через Интернет, этот протокол является достаточно уязвимым, так как не использует никакого шифрования. Эта проблема решается с помощью механизма <em>FTP over SSH</em>, который представляет собой использование <strong>SSH</strong> в роли туннеля для передачи файлов по <strong>FTP</strong>. О том, как воспользоваться этим механизмом вам подскажет <strong>man ssh</strong>, какой-либо дополнительной конфигурации он не требует, разве что настройки соответствующим образом firewall&#8217;а, но об этом я расскажу позже.</li>
<li>Сам <a href="/tag/php" target="_blank">PHP</a> установлен последней доступной в <a href="http://www.freebsd.org/ports/" rel="nofollow" target="_blank">ports</a> версии и , как уже упоминалось, был подключен к <a href="/tag/lighttpd" target="_blank">lighttpd</a> с помощью <strong>mod_fastcgi</strong>, какой-либо дополнительной конфигурации с моей стороны не потребовалось, я разве что выбрал список модулей (в общем-то тоже занятие не сложное, достаточно лишь осознавать какие именно используются, плюс я еще решил <strong><a href="http://www.hardened-php.net/suhosin/" rel="nofollow" target="_blank">Suhosin</a></strong> установить) и просто просмотрел по диагонали все конфиги (в основном сам <strong>php.ini</strong> и <strong>lighttpd.conf</strong>) на предмет их соответствия потребностям моего приложения. Отдельная история возникла с лишь одним модулем &#8212; <em><a href="/tag/blitz" target="_blank">Blitz</a></em>, который на данный момент все еще отсутствует в репозиториях как <a href="/tag/freebsd" target="_blank">FreeBSD</a>, так и подавляющего большинства (если не всех) дистрибутивов <a href="/tag/linux" target="_blank">Linux</a>. Его пришлось устанавливать вручную из исходников по <a href="http://alexeyrybak.com/blitz/blitz_ru.html#install_config.install" target="_blank" rel="nofollow">соответствующему мануалу</a>, что правда тоже дело не хитрое и заняло всего несколько минут.</li>
<li><strong><a href="/tag/subd" target="_blank">СУБД</a></strong> особо выбирать не пришлось &#8212; приложение написано было с расчетом на <strong><a href="/tag/postgresql" target="_blank">PostrgeSQL</a></strong>, ее соответственно и прикручивал к <strong><a href="/tag/php" target="_blank">PHP</a>.</strong> Этот этап был пожалуй одним из самых проблематичных, так как сразу после классического <strong>make install clean</strong> соответствующий daemon запускаться отказался. Какого-либо осознанного сообщения об ошибке <strong>/usr/local/etc/rc.d/postgresqld start</strong> не выводило как в консоль, так и в логи, но тем не менее консольный клиент <strong>psql</strong> и само веб-приложение жаловались на отсутствие запущенной <a href="/tag/subd" target="_blank">СУБД</a>. Этот факт сильно затруднял поиск возможных вариантов решения на просторах <a href="/tag/internet">Сети</a>, так что не найдя ничего полезного я решил заняться диагностикой проблемы и поиском решения для нее самостоятельно. Методом проб и ошибок, перебрав множество возможных вариантов запуска daemon&#8217;а, я пришел к выводу, что у пользователя от имени которого он должен был запускаться явно проблемы с доступом к файловой системе. Видимо так получилось из-за нестандартного расположения самой базы данных &#8212; в директории <strong>/var</strong>. Не смотря на тот факт, что <strong>chown</strong> и <strong>chmod</strong> были использованы по прямому назначению в отношении соответствующих директорий для установления прав доступа. В итоге оказалось, что директория указанная для этого пользователя как домашняя (по памяти пишу, могу ошибиться, но вроде <strong>/usr/local/pgsql</strong>) по каким-то причинам не создалась и соответственно именно этот факт и мешал запуску daemon&#8217;а. Восстановив справедливость в отношении этого пользователя, я обнаружил, что <strong><a href="/tag/postgresql" target="_blank">PostrgeSQL</a></strong> успешно запустился-таки, а мое приложение тоже стало функционировать именно так, как ему было положено. Проверив содержимое соответствующего конфига, я решил его больше не трогать, а то как говорится &#171;premature optimization is the root of all evil&#187;&amp;copyright;. За компанию решил установить веб-интерфейс к <a href="/tag/postgresql" target="_blank">PostrgeSQL</a> &#8212; <strong>phppgadmin</strong>. Собравшись из <a href="http://www.freebsd.org/ports/" rel="nofollow" target="_blank">портов</a>, он повел себя как-то не очень адекватно, совсем не так каким я привык его видеть у себя на <a href="/tag/noutbuk" target="_blank">ноутбуке</a>, разбираться в причинах было не охота &#8212; простое копирование и замена соответствующей директории по <em>ftp</em> буквально за минуту решило проблему.</li>
<li>Вариантов фильтров сетевого трафика в <a href="/tag/freebsd" target="_blank">FreeBSD</a> имеется предостаточно: <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#FIREWALLS-PF" target="_blank" rel="nofollow">pf</a>, <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#FIREWALLS-IPF" target="_blank" rel="nofollow">ipf</a>, <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#FIREWALLS-IPFW%22" target="_blank" rel="nofollow">ipfw</a>. Опыта работы ни с одним из них у меня не было, так что выбор происходил из достаточно субъективных критериев &#8212; очевидности принципов работы правил и достаточности документации. Так как я был уверен, что каждый из них сможет обеспечить достаточный уровень безопасности, основываясь на указанных выше критериях в итоге я выбрал <strong>ipf</strong>. Документация позволила легко и непринужденно все установить и настроить, правда за компанию пришлось разбираться и с <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#KERNELCONFIG" rel="nofollow" target="_blank">пересборкой ядра</a>. В качестве базы для построения собственного списка правил я использовал приведенный все там же, в документации, пример. Само собой пришлось доработать его под конкретную систему, но методом проб и ошибок эта задача выполняется достаточно быстро <em>(будте осторожны с 22 портом, используемым для SSH &#8212; очень легко на этом этапе случайно заблокировать самому себе доступ к серверу)</em>. Получившийся в итоге список правил приводить не буду, так как его еще предстоит довести до ума на активно работающей системе.</li>
</ul>
<h3>Заключение</h3>
<p>Не прошло и двух дней, как из простого набора оборудования получился вполне готовый к работе веб-сервер, конечно же доводить до ума его придется еще достаточно долго, но просто стабильно работать он был в состоянии уже тогда. Дальше его отвезли в место постоянного его прибывания, подключили к более-менее приличному интернет-каналу, с моей стороны при этом потребовалось лишь слегка поменять настройки сетевого подключения, и вот &#8212; он уже доступен из <a href="/net" target="_blank">Сети</a>. Практически сразу же обнаружился один мой недочет в плане выбора <a href="/tag/po" target="_blank">ПО</a> &#8212; буквально в первую же ночь после открытия публичного доступа к серверу нашлась масса желающих попытаться подобрать по словарю логин и пароль для доступа к серверу по SSH, но он был открыт лишь для одной учетной записи, у которой было мягко говоря нестандартное имя пользователя, даже его никто за ночь не смог угадать, а до более чем 20-символьного пароля дело так и не дошло. На следующее утро я, не долго думая, установил программу под названием <strong><a href="http://www.freebsd.org/cgi/url.cgi?ports/security/sshguard/pkg-descr" rel="nofollow" target="_blank">sshguard</a></strong>, которая сразу же предотвратила все последующие попытки подобным образом издеваться над сервером. Дальше надо было настроить запись на DNS-сервере для ассоциации домена с IP нашего сервера, настроить почту, закончить работу над самим веб-приложением и много чего еще, но это уже совсем другая история.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/unix/web-server-za-dva-vechera/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Веб-сервер за два вечера</title>
		<link>http://www.insight-it.ru/unix-way/unix/veb-server-za-dva-vechera/</link>
		<comments>http://www.insight-it.ru/unix-way/unix/veb-server-za-dva-vechera/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 12:59:03 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Beastie]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[веб-сервер]]></category>
		<category><![CDATA[операционная система]]></category>
		<category><![CDATA[сервер]]></category>
		<category><![CDATA[системное администрирование]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=83</guid>
		<description><![CDATA[Многие из вас наверняка все еще помнят те времена, когда компьютерная техника находилась лишь на ранней стадии своего развития. Позволить себе иметь в личном распоряжении персональный компьютер мог далеко не каждый, а о серверном оборудовании и вовсе не могло быть и речи. Но, к счастью, времена меняются, и на сегодняшний день покупка даже серверного оборудования [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/beastie.png" alt="Beastie" title="Beastie: The BSD Daemon" style="float: left" /><br />
Многие из вас наверняка все еще помнят те времена, когда компьютерная техника находилась лишь на ранней стадии своего развития. Позволить себе иметь в личном распоряжении персональный компьютер мог далеко не каждый, а о серверном оборудовании и вовсе не могло быть и речи.</p>
<p>Но, к счастью, времена меняются, и на сегодняшний день покупка даже серверного оборудования связана с достаточно скромными затратами, сопоставимыми с бюджетом покупки настольного компьютера или ноутбука. Но возникает другой вопрос &#8212; а что же с этим оборудованием делать? Вполне логичным ответом было бы: &#171;использовать по прямому назначению&#187;, о чем мы с Вами сегодня и поговорим в компании с замечательным персонажем по имени <em><a href="/tag/beastie" target="_blank">Beastie</a></em> и операционной системой <strong><a href="/tag/freebsd" target="_blank">FreeBSD</a></strong>, с которой он частенько ассоциируется.</p>
<p><span id="more-83"></span><br />
Под &#171;использованием по прямому назначению&#187; конечно же можно было подразумевать множество разных применений, но я  хотел все-таки остановиться на варианте использования в роли веб-сервера, как альтернативу многочисленным услугам по предоставлению shared и VPS хостинга.</p>
<h3>Предистория</h3>
<p>Некоторое время назад ко мне в руки попал простенький сервер, который как раз предполагалось использовать как хостинг для одного из проектов. Оставалось лишь сделать его пригодным для выполнения этой задачи. Казалось бы дело это как минимум не тривиальное, но буквально через пару дней мне довелось убедиться в обратном.</p>
<p>Ассортимент оборудования, спрятанного внутри <strong>1U</strong> корпуса, был вполне стандартным, ничего особенного: процессор <strong>Intel Xeon 5335</strong>, оперативная память <strong>Kingston 2х2 GB ECC Full-buffered</strong>, жесткий диск изначально только один &#8212; <strong>WD 150 GB 10000rpm SATA</strong>, а вот модель материнской платы, к сожалению, на память назвать не могу, вроде что-то от <strong>SuperMicro</strong>, с простенькой встроенной видеокартой, сетевой картой с двумя гигабитными Ethernet портами и встроенным же видимо software RAID-контроллером. Опытный глаз наверняка заметил бы в этом списке сильную недоукомплектацию, особенно проявляющуюся при упоминании процессора в единственном числе, отсутствии RAID, и скромным объемам оперативной памяти. Объясняется это достаточно просто &#8212; проект еще предстоит тестировать перед запуском, а этой платформы для этого будет более чем достаточно.</p>
<p>Перед запуском проекта в открытое плавание естественно предстоит upgrade оборудования.</p>
<h3 style="text-align: right">День первый</h3>
<h4>Подготовка</h4>
<p>Если верить бумажкам, идущим в комплекте с сервером, на единственный жестком диск в магазине установили демо-версию одной из серверных операционных систем от одной мало кому известной корпорации. Смотреть что это за зверь такой у меня особого желания не было, по-этому я не долго думая пошел искать среди своей коллекции дистрибутивов болванку с заранее выбранным <a href="/tag/opensource" target="_blank">opensource</a> решением вопроса об <a href="/tag/os">операционной системе</a> &#8212; <strong><a href="/tag/freebsd">FreeBSD 6.2</a></strong>.</p>
<p>Почему выбор пал именно на эту <a href="/tag/os" target="_blank">ОС</a> объяснить не так уж и просто, но я все же попробую. Выбор был достаточно классический: <em><a href="/tag/unix" target="_blank">Unix</a> vs <a href="/tag/linux" target="_blank">Linux</a></em>, возникали еще некоторые сомнения насчет решений от <em>Sun</em> в виде <em>Solaris</em> и <em>OpenSolaris</em>, но от них я отказался достаточно быстро в основном из-за более чем скромной документации и проприетарного происхождения, попутно закрыв глаза на все положительные отзывы, которые я видел в <a href="/net" target="_blank">Сети</a>.</p>
<p>Так как мне хотелось иметь иметь перед собой <em>конструктор</em> для сбора системы именно таким образом, как было бы удобно мне, а не разработчикам дистрибутива, то список вариантов, выступавших на стороне <a href="/tag/linux" target="_blank">Linux</a> быстро начал сокращаться, начиная с <strong>CentOS</strong>. Предпоследним вычеркнутым из списка дистрибутивов <a href="/tag/linux" target="_blank">Linux</a> был <strong>Debian</strong>, что оставило в нем лишь <a href="/tag/gentoo" target="_blank">Gentoo Linux</a>. Финальный выбор между <a href="/tag/freebsd">FreeBSD</a> и <a href="/tag/gentoo" target="_blank">Gentoo</a> был сделан уже легче: во-первых, по <a href="/unix-way/linux/gentoo-linux-sony-vaio/" target="_blank">своему опыту с ноутбуком</a> я уже понял, что с <a href="/tag/gentoo" target="_blank">Gentoo</a> предстояло бы немало хлопот, а, во-вторых, в новый <em>конструктор</em>, как ни крути, &#171;играть&#187; намного интереснее, чем в старый, так что долго думать не пришлось <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>Установка</h4>
<p>Найдя наконец диск с <a href="/tag/freebsd">FreeBSD</a>, я попытался решить следующий возникший вопрос: а как же установить операционную систему с компакт-диска на компьютер, не имеющий соответствующего привода? Так как сервер был запломбирован и находился на гарантии, вариант частично разобрать и подключить обычный привод отпал сразу же, ровно как и вариант с подключением внешнего привода по причине его отсутствия. Подходящее решение было найдено практически сразу же, благо жесткие диски подключались по принципу hotswap: вытащив жесткий диск без развинчивания корпуса, я подключил его к подвернувшемуся под руку настольному компьютеру, обладающему DVD-приводом. Загрузка прошла успешно и я приступил к установке, руководствуясь <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html" target="_blank" rel="nofollow">FreeBSD Handbook</a>, пересказывать его особого желания у меня  нет, остановлюсь лишь на некоторых особенностях этого процесса.</p>
<p>Первым этапом установки, где пришлось задуматься, был <strong>fdisk</strong> (разбиение диска на так называемые <em>slice</em>). Для избежания путаницы для самого себя, я решил, что размещу рабочие директории http-сервера и базы данных в <strong>/var</strong>, которую и выделил в отдельный <em>slice</em>, занимающий б<em>о</em>льшую часть доступного дискового пространства. В ассортимент доступного при установке программного обеспечения я особо вникать не стал, так как знал, что у меня всегда будет возможность заняться им позже, и как следствие этого выбрал что-то очень близкое к стандартному набору <a href="/tag/po" target="_blank">ПО</a>.<br />
Подтвердив установку и подождав достаточно непродолжительный период времени, я перезагрузил систему, вытащив установочный диск в процессе. Установка оказалась на удивление элементарной, что привело к полученной с первой попытки работоспособной системе. Увидев долгожданное приглашение к вводу логина и пароля я убедился, что могу беспрепятственно получить доступ к консоли и сразу же выключил систему, чтобы перенести жесткий диск обратно на сервер.</p>
<p>Так как сетевое подключение еще только предстояло настроить, то на сервер переносить пришлось не только жесткий диск, но и монитор с клавиатурой. На новом оборудовании все так же прекрасно запустилось, и я принялся за настройку подключения. Особых проблем не возникло &#8212; в <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#NETWORK-COMMUNICATION" target="_blank" rel="nofollow">Handbook</a>&#8216;е все более чем качественно задокументировано, самым сложным был процесс выбора драйвера, вернее осознавание того, что он изначально правильно сам установился. Следующей маленькой проблемой было угадывание какой же из <em>Ethernet</em>-портов был только что настроен, и, соответственно, подключение кабеля именно в него, а не в его соседа. После завершения всех манипуляций я с радостью обнаружил, что <strong>ping</strong> от сервера до gateway&#8217;а успешно проходит, что по сути и означало окончание настройки сетевого подключения.<br />
Следущей целью было избавить себя от необходимости пользоваться позаимствованными у другого компьютера клавиатурой и монитором. Дело тоже оказалось достаточно нехитрым, <strong>sshd</strong> установился и настроился вполне самостоятельно где-то в процессе установки, от меня потребовалось лишь создать дополнительного пользователя, написать нехитрую строчку в <strong>rc.conf</strong>: <em>sshd_enable=&#187;YES&#187;</em> и собственно запустить daemon&#8217;а. Этого было вполне достаточно, чтобы набрав на своем <a href="/tag/noutbuk" target="_blank">ноутбуке</a> <strong>ssh</strong> в консоли, с указанием необходимых параметров, получить удаленный доступ к серверу по протоколу <strong>SSH</strong>.</p>
<p>Решив, что для начала этого будет вполне достаточно, я отправился по другим делам, так как тот вечер еще даже не успел подойти к своему завершению.</p>
<h3 style="text-align: right">День второй</h3>
<h4>Программное обеспечение</h4>
<p>Хорошо, вполне работоспособную <a href="/tag/os" target="_blank">операционную систему</a> мы получили. Осталось снабдить ее необходимым <a href="/tag/po" target="_blank">программным обеспечением</a> для выполнения своих обязанностей, определенных нами заранее.</p>
<p>Прежде чем что-либо устанавливать, очень не пожалел, что ознакомился как с соответствующим <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#PORTS" rel="nofollow" target="_blank">разделом handbook&#8217;a</a>, так и с <a href="http://www.freebsd.org/ports/" rel="nofollow" target="_blank">доступным ассортиментом ПО</a>. После этого я перешел-таки собственно к выбору и установке <a href="/tag/po" target="_blank">ПО</a>:</p>
<ul>
<li>Так как одной из основных составных частей практически любого веб-сервера является http-daemon, именно с его выбора я и решил начать. Причем начал еще задолго до описываемых событий, вся многофункциональность <a href="/tag/apache" target="_blank">Apache</a> мне была не нужна, а аналоги <em>mod_auth</em> и <em>mod_rewrite</em> есть и в более легких http-серверах. Cамо веб-приложение, которое там предполагалось располагать, работает по большей части на <a href="/tag/php" target="_blank">PHP</a>, так что ничего особенного от httpd совсем не требовалось. В итоге финальный выбор был между <em>быстрыми</em> и <em>легкими</em> вариантами: <strong>nginx</strong> и <strong><a href="/tag/lighttpd" target="_blank">lighttpd</a></strong>, какой-либо весомой причины по которой я выбрал <strong><a href="/tag/lighttpd" target="_blank">lighttpd</a></strong> с <strong>mod_fastcgi</strong> привести не могу, основным фактором был мой некоторый опыт работы с ним в прошлом, и отсутствие такового в отношении <strong>nginx</strong>. Установка прошла легко и непринужденно с помощью в сжатые сроки найденного в <a href="/tag/google" target="_blank">Google</a> <a href="http://www.cyberciti.biz/faq/howto-setup-lighttpd-fastcgi-php-server/" target="_blank" rel="nofollow">мануала</a>.</li>
<li>Другим немаловажным компонентом сервера является <strong>ftpd</strong>, как известно используемый для передачи файлов. Собственно говоря, если активное его использование не планируется, то особого значения какой именно сервер будет использоваться значения не имеет: любой из доступных устанавливается настраивается в пару простых шагов без каких-либо проблем (если это имеет значение &#8212; я выбрал <strong>vsftpd</strong>, так как мне уже далеко не один раз доводилось его настраивать на домашних компьютерах, и, как следствие, даже инструкция не понадобилась). Но при потенциальной возможности работы через Интернет, этот протокол является достаточно уязвимым, так как не использует никакого шифрования. Эта проблема решается с помощью механизма <em>FTP over SSH</em>, который представляет собой использование <strong>SSH</strong> в роли туннеля для передачи файлов по <strong>FTP</strong>. О том, как воспользоваться этим механизмом вам подскажет <strong>man ssh</strong>, какой-либо дополнительной конфигурации он не требует, разве что настройки соответствующим образом firewall&#8217;а, но об этом я расскажу позже.</li>
<li>Сам <a href="/tag/php" target="_blank">PHP</a> установлен последней доступной в <a href="http://www.freebsd.org/ports/" rel="nofollow" target="_blank">ports</a> версии и , как уже упоминалось, был подключен к <a href="/tag/lighttpd" target="_blank">lighttpd</a> с помощью <strong>mod_fastcgi</strong>, какой-либо дополнительной конфигурации с моей стороны не потребовалось, я разве что выбрал список модулей (в общем-то тоже занятие не сложное, достаточно лишь осознавать какие именно используются, плюс я еще решил <strong><a href="http://www.hardened-php.net/suhosin/" rel="nofollow" target="_blank">Suhosin</a></strong> установить) и просто просмотрел по диагонали все конфиги (в основном сам <strong>php.ini</strong> и <strong>lighttpd.conf</strong>) на предмет их соответствия потребностям моего приложения. Отдельная история возникла с лишь одним модулем &#8212; <em><a href="/tag/blitz" target="_blank">Blitz</a></em>, который на данный момент все еще отсутствует в репозиториях как <a href="/tag/freebsd" target="_blank">FreeBSD</a>, так и подавляющего большинства (если не всех) дистрибутивов <a href="/tag/linux" target="_blank">Linux</a>. Его пришлось устанавливать вручную из исходников по <a href="http://alexeyrybak.com/blitz/blitz_ru.html#install_config.install" target="_blank" rel="nofollow">соответствующему мануалу</a>, что правда тоже дело не хитрое и заняло всего несколько минут.</li>
<li><strong><a href="/tag/subd" target="_blank">СУБД</a></strong> особо выбирать не пришлось &#8212; приложение написано было с расчетом на <strong><a href="/tag/postgresql" target="_blank">PostrgeSQL</a></strong>, ее соответственно и прикручивал к <strong><a href="/tag/php" target="_blank">PHP</a>.</strong> Этот этап был пожалуй одним из самых проблематичных, так как сразу после классического <strong>make install clean</strong> соответствующий daemon запускаться отказался. Какого-либо осознанного сообщения об ошибке <strong>/usr/local/etc/rc.d/postgresqld start</strong> не выводило как в консоль, так и в логи, но тем не менее консольный клиент <strong>psql</strong> и само веб-приложение жаловались на отсутствие запущенной <a href="/tag/subd" target="_blank">СУБД</a>. Этот факт сильно затруднял поиск возможных вариантов решения на просторах <a href="/tag/internet">Сети</a>, так что не найдя ничего полезного я решил заняться диагностикой проблемы и поиском решения для нее самостоятельно. Методом проб и ошибок, перебрав множество возможных вариантов запуска daemon&#8217;а, я пришел к выводу, что у пользователя от имени которого он должен был запускаться явно проблемы с доступом к файловой системе. Видимо так получилось из-за нестандартного расположения самой базы данных &#8212; в директории <strong>/var</strong>. Не смотря на тот факт, что <strong>chown</strong> и <strong>chmod</strong> были использованы по прямому назначению в отношении соответствующих директорий для установления прав доступа. В итоге оказалось, что директория указанная для этого пользователя как домашняя (по памяти пишу, могу ошибиться, но вроде <strong>/usr/local/pgsql</strong>) по каким-то причинам не создалась и соответственно именно этот факт и мешал запуску daemon&#8217;а. Восстановив справедливость в отношении этого пользователя, я обнаружил, что <strong><a href="/tag/postgresql" target="_blank">PostrgeSQL</a></strong> успешно запустился-таки, а мое приложение тоже стало функционировать именно так, как ему было положено. Проверив содержимое соответствующего конфига, я решил его больше не трогать, а то как говорится &#171;premature optimization is the root of all evil&#187;&amp;copyright;. За компанию решил установить веб-интерфейс к <a href="/tag/postgresql" target="_blank">PostrgeSQL</a> &#8212; <strong>phppgadmin</strong>. Собравшись из <a href="http://www.freebsd.org/ports/" rel="nofollow" target="_blank">портов</a>, он повел себя как-то не очень адекватно, совсем не так каким я привык его видеть у себя на <a href="/tag/noutbuk" target="_blank">ноутбуке</a>, разбираться в причинах было не охота &#8212; простое копирование и замена соответствующей директории по <em>ftp</em> буквально за минуту решило проблему.</li>
<li>Вариантов фильтров сетевого трафика в <a href="/tag/freebsd" target="_blank">FreeBSD</a> имеется предостаточно: <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#FIREWALLS-PF" target="_blank" rel="nofollow">pf</a>, <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#FIREWALLS-IPF" target="_blank" rel="nofollow">ipf</a>, <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#FIREWALLS-IPFW%22" target="_blank" rel="nofollow">ipfw</a>. Опыта работы ни с одним из них у меня не было, так что выбор происходил из достаточно субъективных критериев &#8212; очевидности принципов работы правил и достаточности документации. Так как я был уверен, что каждый из них сможет обеспечить достаточный уровень безопасности, основываясь на указанных выше критериях в итоге я выбрал <strong>ipf</strong>. Документация позволила легко и непринужденно все установить и настроить, правда за компанию пришлось разбираться и с <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html#KERNELCONFIG" rel="nofollow" target="_blank">пересборкой ядра</a>. В качестве базы для построения собственного списка правил я использовал приведенный все там же, в документации, пример. Само собой пришлось доработать его под конкретную систему, но методом проб и ошибок эта задача выполняется достаточно быстро <em>(будте осторожны с 22 портом, используемым для SSH &#8212; очень легко на этом этапе случайно заблокировать самому себе доступ к серверу)</em>. Получившийся в итоге список правил приводить не буду, так как его еще предстоит довести до ума на активно работающей системе.</li>
</ul>
<h3>Заключение</h3>
<p>Не прошло и двух дней, как из простого набора оборудования получился вполне готовый к работе веб-сервер, конечно же доводить до ума его придется еще достаточно долго, но просто стабильно работать он был в состоянии уже тогда. Дальше его отвезли в место постоянного его прибывания, подключили к более-менее приличному интернет-каналу, с моей стороны при этом потребовалось лишь слегка поменять настройки сетевого подключения, и вот &#8212; он уже доступен из <a href="/net" target="_blank">Сети</a>. Практически сразу же обнаружился один мой недочет в плане выбора <a href="/tag/po" target="_blank">ПО</a> &#8212; буквально в первую же ночь после открытия публичного доступа к серверу нашлась масса желающих попытаться подобрать по словарю логин и пароль для доступа к серверу по SSH, но он был открыт лишь для одной учетной записи, у которой было мягко говоря нестандартное имя пользователя, даже его никто за ночь не смог угадать, а до более чем 20-символьного пароля дело так и не дошло. На следующее утро я, не долго думая, установил программу под названием <strong><a href="http://www.freebsd.org/cgi/url.cgi?ports/security/sshguard/pkg-descr" rel="nofollow" target="_blank">sshguard</a></strong>, которая сразу же предотвратила все последующие попытки подобным образом издеваться над сервером. Дальше надо было настроить запись на DNS-сервере для ассоциации домена с IP нашего сервера, настроить почту, закончить работу над самим веб-приложением и много чего еще, но это уже совсем другая история.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/unix/veb-server-za-dva-vechera/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Первые впечатления от релиза KDE 4</title>
		<link>http://www.insight-it.ru/unix-way/linux/pervye-vpechatleniya-ot-reliza-kde-4/</link>
		<comments>http://www.insight-it.ru/unix-way/linux/pervye-vpechatleniya-ot-reliza-kde-4/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 16:17:01 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[kde 4]]></category>
		<category><![CDATA[kde4]]></category>
		<category><![CDATA[впечатления]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/unix-way/linux/pervye-vpechatleniya-ot-reliza-kde-4/</guid>
		<description><![CDATA[Вчера вечером, решив провести очередное обновление программного обеспечения, я обнаружил в списке замаскированных пакетов внушительное количество заветных цифр 4.0.0. Не долго думая все эти пакеты были отправлены в комментарии с целью разрешить их установку, а на ночь компьютер был оставлен включенным с указанием к утру предоставить мне рабочую версию KDE 4. И, как ни странно, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/kde.png" title="K Desktop Environment" alt="KDE Icon" style="margin: 10px; float: right" /></p>
<p>Вчера вечером, решив провести очередное обновление программного обеспечения, я обнаружил в списке <a href="http://gentoo-wiki.com/Masked" target="_blank" rel="nofollow">замаскированных</a> пакетов внушительное количество заветных цифр <em>4.0.0</em>. Не долго думая все эти пакеты были отправлены в комментарии с целью разрешить их установку, а на ночь компьютер был оставлен включенным с указанием к утру предоставить мне рабочую версию <a href="/tag/kde-4" target="_blank">KDE 4</a>. И, как ни странно, с заданием он справился более чем успешно!</p>
<p><span id="more-31"></span></p>
<p>На утро если честно был слегка удивлен. увидев сообщение в консоли о том, что пакет <strong>kde-base/kdebase-meta-4.0.0</strong> установлен успешно. Запустив по привычке <strong>etc-update</strong> и сделав на всякий случай backup настроек третьего <a href="/tag/kde" target="_blank">KDE</a>, я приступил к запуску свежеустановленного рабочего окружения.</p>
<p>Процесс оказался простым до безобразия, достаточно было лишь сменить тип сессии в <strong>kdm</strong>, и рабочее окружение успешно загрузилось. Представшее передо мной зрелище меня ничуть не удивило &#8212; мне уже доводилось собирать beta-версию <a href="/tag/kde-4" target="_blank">KDE 4</a> из SVN, да и screenshot&#8217;ы стандартного рабочего окружения KDE я видел далеко не один раз.</p>
<p>Первым делом я решил запустить Kopete, реально конечно из-за того, что перед завершением сеанса работы с третьим KDE мне кто-то успел написать в ICQ, и меня ждал неоконченный разговор, но посмотреть как он изменился со времен беты тоже хотелось. Попытавшись зайти с его помощью в ICQ, я обнаружил что этого протокола в списке доступных нет, причина нашлась быстро с помощью консоли (которая изменений практически не претерпела) &#8212; <strong>kopete</strong> по-умолчанию был собран без флага <strong>oscar</strong>. Не долго думая, по-быстрому пересобрал клиент, но в ходе указания настроек account&#8217;а он мне заявил, что ему нужен еще и <strong>KWallet</strong> для хранения пароля. Отправив на сборку и его, я решил временно отложить повторное знакомство с <strong>kopete</strong> и запустил <strong>Pidgin</strong>, которым достаточно часто пользуюсь.</p>
<p>После решения вопроса со связью, я отправился на изучения остальных пунктов <strong>KMenu</strong>, ничего принципиально нового я там не нашел, но решил все же заглянуть в пункт под названием <em>System Settings</em> с целью сделать небольшой обзор доступных настроек и оценить потенциал нового рабочего рабочего окружения в плане &#171;доработки напильником&#187;, чем я и планирую в обозримом будущем заняться. Большую часть интересных для меня настроек я нашел прямо в GUI, а если бы не поленился покопаться в конфигурационных файлах &#8212; нашел бы и все остальное.</p>
<p><strong>Plasma</strong> &#8212; по-моему одно из самых существенных изменений в новой версии KDE, в котором невооруженным глазом можно увидеть огромный потенциал для развития пользовательских интерфейсов. Но если сейчас смотреть на эту технологию как обычный пользователь, то можно увидеть во всех эти widget&#8217;ах лишь недоделанность, неудобство и непривычность. В будущем, когда ассортимент и качество &#171;плазмоидов&#187; приумножится, эта технология станет очень гибкой и удобной в повседневном использовании для очень разнообразного спектра задач.</p>
<p>Самым большим недостатком доступной на данный момент версии <a href="/tag/kde" target="_blank">KDE</a>, на мой взгляд, является та самая черная панель внизу экрана, которая используется для размещения любых виджетов наравне с рабочим столом, но имеет один большой недостаток &#8212; практически полное отсутствие каких-либо настроек (за исключением непонятно зачем и кому нужного &#171;Show tooltips&#187;), и как следствие, отсутствие элементарных способов ее переместить или изменить в размерах. Именно из-за этого факта я сейчас и пишу снова из KDE 3.5.8, так как я слишком привык получать доступ ко всем функциям рабочего окружения из верхней части экрана, а переучиваться или искать какие-либо нестандартные решения этой небольшой проблемки на данный момент нет ни времени, ни желания.</p>
<p>По не помню какой причине мне пришлось залезть в файловую систему, сделал я это естественно с помощью <strong>Dolphin</strong>, но сам факт осознал далеко не сразу: настолько привычен и удобен оказался его интерфейс, что мне показалось, что я всю жизнь всегда им пользовался, хотя на самом деле по большому счету увидел его впервые.</p>
<p>В целом новинка произвела по большей части положительные впечатления, обязательно вернусь к ее освоению через какое-то время, когда хотябы существенные недоработки будут тем или иной способом исправлены. Так что пока даже не стал ее удалять, тем более отдельными приложениями можно пользоваться и из KDE 3, что я сейчас с удовольствием и делаю в отношении нового Kopete, который в итоге прекрасно запустился и работает существенно лучше чем многие другие ICQ-клиенты.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/linux/pervye-vpechatleniya-ot-reliza-kde-4/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Gentoo Linux + Sony Vaio = &#9829;</title>
		<link>http://www.insight-it.ru/unix-way/linux/gentoo-linux-sony-vaio/</link>
		<comments>http://www.insight-it.ru/unix-way/linux/gentoo-linux-sony-vaio/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 22:06:32 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[gentoo linux]]></category>
		<category><![CDATA[notebook]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[sony]]></category>
		<category><![CDATA[sony vaio]]></category>
		<category><![CDATA[sony vaio fe41zr]]></category>
		<category><![CDATA[sony vaio vgn-fe41zr]]></category>
		<category><![CDATA[линукс]]></category>
		<category><![CDATA[ноутбук]]></category>
		<category><![CDATA[ОС]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/unix-way/linux/gentoo-linux-sony-vaio/</guid>
		<description><![CDATA[Gentoo is all about choices Абсолютно не важно, держите ли Вы в руках блестящую болванку с надписью &#171;Прощай, предустановленная Vista!&#187; или только подумываете о том, чтобы избавить свой ноутбук от тяжести этой ноши. Прочитав это повествование, Вы сможете представить себе процесс установки альтернативной операционной системы на ноутбук на примере Gentoo Linux и Sony Vaio. Я [...]]]></description>
			<content:encoded><![CDATA[<blockquote style="margin-left: 200pt"><p>Gentoo is all about choices</p></blockquote>
<p><img src="/wp-content/uploads/gentoo.png" style="float: left" title="Gentoo Linux" alt="Gentoo Linux" /></p>
<p>Абсолютно не важно, держите ли Вы в руках блестящую болванку с надписью <em>&#171;Прощай, предустановленная Vista!&#187;</em> или только подумываете о том, чтобы избавить свой ноутбук от тяжести этой ноши. Прочитав это повествование, Вы сможете представить себе процесс установки альтернативной операционной системы на ноутбук на примере <em><a href="/tag/gentoo" target="_blank">Gentoo</a> <a href="/tag/linux" target="_blank">Linux</a></em> и <em><a href="/tag/sony-vaio" target="_blank">Sony Vaio</a></em>. Я постараюсь освятить все особенности этого процесса, а также по возможности дать советы по избежанию потенциальных проблем. Не надейтесь найти здесь пересказ <a href="http://www.gentoo.org/doc/ru/handbook/index.xml" rel="nofollow" title="Gentoo Hanbook" target="_blank">Gentoo Handook</a>, ее стоит прочитать в любом случае, если Вы на самом деле задумали установить эту очень серьезную <a href="/tag/os" target="_blank">операционную систему</a>.</p>
<p><span id="more-30"></span></p>
<p>Сам я занимался этим делом уже более полугода назад на ноутбуке <strong>Sony Vaio VGN-FE41ZR</strong>, не знаю почему мой выбор в свое время пал именно на эту модель, были доступны и более производительные и &#171;навороченные&#187; &#8212; видимо приглянулась она мне чем-то. Далее речь пойдет именно об этой модели ноутбука, но думаю большая часть написанного далее будет справедлива и для других моделей линейки <a href="/tag/sony-vaio" target="_blank">Sony Vaio</a>. Поначалу процесс установки и настройки был очень непрост, ведь часто приходилось пользоваться методом &#171;проб и ошибок&#187;, да и достойную документацию найти удавалось далеко не по каждому вопросу. Все про все заняло далеко не один мой летний вечер, терпения потребовалось изрядное количество, но полученный в итоге результат до сих пор не дает повода пожалеть о потраченном свободном времени.</p>
<p>Как я уже успел намекнуть во вступлении, начинается все с болванки на которую записан <a href="http://www.gentoo.org/main/ru/where.xml" rel="nofollow" target="_blank">тот самый волшебный образ</a>. Никто не мешает выбрать любой из доступных вариантов, но предположим, что выбор пал на <a href="/tag/gentoo" target="_blank">Gentoo</a> <a href="/tag/linux" target="_blank">Linux</a> LiveCD 2007.0. Загрузка ноутбука с этого диска проходит плавно и непринужденно, ровно как и сама работа с уже загруженным LiveCD как в консоли, так и в используемом там рабочем окружении &#8212; <em>Gnome</em>. Следуя инструкциям из <em>настольной книги</em> начать установку операционной системы очень нетрудно, но если честно у меня прочитав пару раз этот немаленьких размеров текст возникла мысль попытаться сэкономить некоторое количество времени, воспользовавшись услугами двух предложенных автоматических инсталляторов &#8212; с графическим и консольным пользовательским интерфейсом &#8212; не повторяйте этой ошибки, так как качество реализации обоих вариантов на данный момент оставляет желать лучшего, заставить успешно установить систему один из них может занять ничуть не меньше времени, чем ручная установка. Лично мне приручить ни один из автоматических инсталлятора так и не удалось, но как ни странно тоже не пришлось жалеть об этом факте &#8212; как оказалось ручная установка очень качественно позволяет разобраться в структуре <a href="/tag/os" target="_blank">операционной системы</a> вцелом, ровно как и в принципе работы отдельных ее компонентов.</p>
<p>Следовать инструкциям из <em>Книги</em> я думаю у всех должно неплохо получаться, единственное что могу порекомендовать: делайте это неторопясь, стараясь как можно подробнее осознавать что, как и зачем Вы делаете. Здесь же я хочу останавливаться лишь на специфических моментах для этой модели ноутбуков.</p>
<h3>Ядро</h3>
<p>Как известно, для <a href="/tag/gentoo" target="_blank">Gentoo</a> доступно несколько вариантов ядер, в процессе установки мой выбор пал на <strong>suspend2-sources</strong>, но со временем полностью перебрался на <strong>gentoo-sources</strong>, так как я понял, что сами suspend-to-ram и suspend-to-hdd мне абсолютно не нужны, но suspend2 слегка отстают от gentoo по версиям. Тем более, насколько я знаю, в современных версиях основной ветки ядра suspend тоже поддерживается на достойном уровне (но так как мне он не нужен &#8212; пробовать на собственном опыте не доводилось).</p>
<p>Поначалу осознать как именно необходимо настроить ядро довольно непросто, часто забываешь какой-нибудь драйвер или маленькую опцию, сильно влияющую на ту или иную часть системы, или наоборот включаешь множество абсолютно бесполезных компонентов. Вариантов решения этой ситуации есть несколько:</p>
<ul>
<li><em>Просто скопировать ядро с LiveCD.</em> Этот вариант является самым простым в плане реализации, систему с его помощью запустить вполне реально &#8212; пробовал, но в плане производительности ему до идеала о-о-очень далеко.</li>
<li><em>Собрать ядро с помощью <strong>genkernel</strong> и стандартной его конфигурации.</em> Прочитав <strong>man genkernel</strong> это занятие тоже становится простым и привычным. Именно этот вариант я и выбрал в первый раз, слегка подредактировав конфигурационный файл с помощью <strong>––menuconfig</strong> в тех местах, где был точно уверен что это не повлияет на функциональность и положительно повлияет на производительность. Естественно этот вариант тоже годится только на первое время.</li>
<li><em>Ручная сборка классическим способом &#8212; <strong>make</strong>, с использованием конфигурационного файла, взятого с LiveCD</em>. Чисто теоретически возможно, но не могу порекомендовать этот способ, при его реализации возникает существенно больше проблем, до конца решить которые мне так и не удалось в процессе установки, а в последующем как-то не возникало желания возвращаться к ручной сборке ядра, так как привык к <strong>genkernel</strong> &#8212; просто и удобно.</li>
<li><em>Метод &#171;проб и ошибок&#187;.</em> Если есть желание и возможность потратить существенное количество времени на подбор оптимальной конфигурации ядра прямо в процессе установки &#8212; почему бы этим и не заняться?</li>
</ul>
<p>Вне зависимости от выбранного варианта сборки ядра, рано или поздно Вы получите успешно загружающуюся без помощи LiveCD систему (естественно имеется ввиду, что в консоль, о X-ах говорить еще рано), о которой и пойдет речь дальше.</p>
<h3>Сеть</h3>
<p>Первым делом, конечно же появляется желание выползти на просторы Сети, даже скорее не желание, а необходимость, ведь жизнь компьютера без Сети хоть и возможна, но грустна и нелегка.</p>
<p>Как известно, у большинства ноутбуков дорога в Сеть может пролегать по трем маршрутам:</p>
<ul>
<li>Сетевая карта &#8212; Ethernet</li>
<li>Беспроводная сеть &#8212; WiFi</li>
<li>Старый-добрый модем</li>
</ul>
<p>Из всех трех вариантов мне довелось опробовать только первые два, испытать модем в полевых условиях, к сожалению, не удалось в связи с отсутствием как возможности, так и желания.</p>
<h4 style="text-align: right">Ethernet</h4>
<p>Воткнув заветный штекер RJ45 в соответствующий разъем, я с удивлением обнаружил с помощью команды <strong>ifconfig</strong>, что на этом мои телодвижения по получению доступа в Интернет благополучно закончились. Все драйвера оказались на месте, DHCP-клиент без моего вмешательства получил IP-адрес, все необходимые настройки по-умолчанию были выбраны верно &#8212; вобщем в этом плане все отлично.</p>
<p>Конечно далеко не у всех локальная сеть организована таким же образом, как и у меня, возможно придется поизучать man <strong>ifconfig</strong>&#8216;а или повозиться с VPN-соединением.</p>
<h4 style="text-align: right">WiFi</h4>
<p>С беспроводным соединением все прошло далеко не так гладко, как хотелось бы. Первой задачей стояло определение того, какой же драйвер необходим для функционирования соответствующего устройства. Вариантов ответа на этот вопрос в <a href="/net" target="_blank">Сети</a> нашлось множество, но какой именно подошел бы именно к моей модели ноутбука было как минимум не очевидно.</p>
<p>Попробовав несколько вариантов, мне удалось-таки установить беспроводное соединение с помощью драйвера под названием <strong>ipw3945</strong> и сопутствующего ему daemon&#8217;а <strong>ipw3945d</strong>. Подробно весь процесс описывать не буду, я думаю при необходимости подробную инструкцию найти особого труда не составит.</p>
<p>Я еще не упоминал, что в качестве рабочего окружения предпочитаю использовать KDE, как-то с самого начала к нему привык, как внешне так и внутренне он меня более чем устраивает. Не сочтите предыдущее предложение за отступ от темы, я всеголишь хотел как-то объяснить переход к разговору об утилите, предоставляющей GUI к работе с беспроводными соединениями, &#8212; <strong>KWifiManager</strong>. Утилитка достаточно своеобразная, манера ее поведения поначалу сильно удивляла, но со временем привыкаешь. Особенно странно она производит выбор беспроводной сети, к которой подключаться. Не смотря на установленную в настройках мою домашнюю сеть, как сеть по-умолчанию, она все равно частенько пытается залезть к соседям или еще куда. И что самое интересное &#8212; вернуть ее на <em>путь истинный</em> ее же средствами мне обычно так и не удается. Из-за этого пришлось написать bash-скрипт, который помогает укратить эту утилиту. Включать в текст записи его особо желания нету, если кто хочет его заполучить: оставьте соответствующий комментарий &#8212; выложу.</p>
<h3>Альтернатива консоли</h3>
<p>Консоль &#8212; штука конечно полезная, но со временем пользоваться только ей на домашнем компьютере все же надоедает, хочется чего-то большего &#8212; например, компании состоящей из X-сервера, Xorg и какого-либо рабочего окружения (как я уже успел упомянуть &#8212; в его роли я предпочитаю использовать <a href="/tag/kde" target="_blank">KDE</a>, о нем и буду дальше говорить, но Ваш выбор это естественно ни капли не ограничивает).</p>
<p>Проблем как ни странно с этим пунктом нашей программы не возникло никаких &#8212; официальная документация по этому поводу обширна, и чуть ли не гарантированно приводит к положительным результатам. Все прекрасно собирается (правда долговато) и не менее прекрасно работает.</p>
<p>Одно время конечно возникали некоторые трудности, например в одной из версий X-сервера была неприятная недоработка с LED&#8217;ами на клавиатуре &#8212; не было видно нажат ли Caps Lock, или при одной конкретной комбинации программного обеспечения и ядра системы по странному стечению обстоятельств частоиспользуемая клавиша <strong>F2</strong> приводила к сворачиванию X-сервера и возвращению в консоль, что тоже доставляло массу неудобств. На данный же момент все проблемы такого рода решены руками огромного <a href="/tag/opensource" target="_blank">opensource</a>-сообщества и все снова замечательно работает точно также как и полгода назад сразу после установки системы.</p>
<p>Через некоторое время после установки <a href="/tag/kde" target="_blank">KDE</a> мне все же захотелось привести его в более приятный моим глазам внешний вид. Вооружившись любимым графическим редактором под названием <strong>The GIMP</strong> я принялся за дело. В итоге получилось  нечто странное, которое выглядит примерно вот так:</p>
<p><a href="/wp-content/uploads/screenshot-desktop.jpg" target="_blank"><img src="/wp-content/uploads/screenshot-desktop-s.jpg" alt="Screenshot" title="KDE 3.5.8 Screenshot" /></a></p>
<h3>Видео</h3>
<p>Используемый по-умолчанию видеодрайвер <em>vesa</em> оставляет желать лучшего, этот факт заметен сразу же после первой загрузки рабочего окружения, а значит ничего не остается кроме как искать ему замену. Искать долго не придется &#8212; отличный видеодрайвер для присутствующей в внутри этого ноутбука <em>Nvidia GeForce 7600</em> легко доступен через Portage, называется он, как ни странно, <strong>nvidia-drivers</strong>.</p>
<p>Впечатления он оставляет только положительные: легко настраивается, достаточно производительный, поддерживает множество технологий, в том числе пресловутый Composite Extension в Xorg, который необходим для работы большинства (если не всех) трехмерных приложений.</p>
<h3>Аудио</h3>
<p>С ним все еще проще &#8212; достаточно лишь не забыть включить <strong>ALSA</strong> и <strong>Intel HD Audio</strong> в конфигурации ядра.</p>
<p>Качество конечно не идеальное, но для такого класса устройств звук вполне &#171;на уровне&#187;, для просмотра фильмов и негромкого воспроизведения музыки более чем достаточно.</p>
<h3>Bluetooth</h3>
<p>Синий зуб прекрасно чувствует себя под руководством встроенного в ядра драйвера <strong>BlueZ</strong>, с работой в качестве GUI для работы с этим устройством также неплохо справляются KDE&#8217;шные утилиты KBluetooth и компания.</p>
<p>На роль помощника в тестировании и настройке bluetooth&#8217;а я не смог придумать ничего лучше, чем выбрать свой старенький телефон <em>Qtek S200</em>. Передача файлов заработала безукоризненно в обоих направлениях, а вот с использованием телефона в роли GPRS-модема пришлось изрядно повозиться: узнать необходимые настройки соединения на сайте оператора, найти хотябы примерно подходящую документацию по данному вопросу, настроить все как положено. Когда дело дошло до процесса дозвона по указанному номеру, телефон по каким-то причинам отказывался реагировать на запросы компьютера. Попытки понять в чем же причина длились достаточно долго, пока я не наткнулся в интернете на подробное техническое описание своего телефона, где было сказано, что он просто-напросто не поддерживает доступ у своему GPRS-модему через bluetooth-соединение. Узнав об этом факте я решил больше себя не мучать и бросил эту затею, но чисто технически с другим телефоном оно должно было заработать, но на практике проверить руки так до сих пор и не дошли.</p>
<h3>Разные мелочи</h3>
<p>Устав от продолжительной установки и настройки системы, на вещи, которыми я не планировал активно пользоваться, я не тратил много времени, по-этому упомяну их лишь вкратце.</p>
<p>Очень удивил меня тот факт, что для приведения к жизни различных нестандартных кнопок вроде регулировки громкости, S1, S2 и Fn необходима достаточно серьезная &#171;работа напильником&#187;: модули ядра вроде <strong>sonypi</strong> способны оживить их лишь частично, для полного их функционирования возможно придется изрядно покопаться в конфигурационных файлах, а также написать/найти некоторое количество bash-скриптов. Надеюсь в будущем найду в себе силы довести это дело до конца, правда особого дискомфорта от ненастроенных кнопок я не испытываю &#8212; не успел к ним привыкнуть, да и реализованного на уровне оборудования mute sound мне вполне хватает.</p>
<p>Регулировка яркости дисплея работает прекрасно через консоль с помощью утилиты <strong>nvclock</strong>, но какого-либо GUI к ней мне найти не удалось, т.к. особой необходимости в этом не испытываю &#8212; все равно предпочитаю держать экран максимально ярким, лишь в очень редких случаях возникает необходимость его приглушить, но в таких случаях обычно проще бывает нажать <strong>Alt+F2</strong> и набрать необходимую команду.</p>
<p>Встроенная камера заслуживает отдельного разговора. С одной стороны драйвера под нее есть и легко доступны, весь необходимый набор модулей для ядра &#8212; <strong>v4l, gspcav1</strong>, установить абсолютно не проблема. Найдя неплохую статейку в вики я достаточно быстро разобрался с их установкой, но после этого возник вопрос: а зачем оно собственно говоря надо? Как оказалось, камера является абсолютно бесполезным для меня device&#8217;ом, и я даже не придумал никакого адекватного способа проверить ее работоспособность. Так эти драйвера и находятся установленными в системе непонятно зачем.</p>
<p>Порт IEEE 1394 aka FireWire опробовать в действии не удалось, так как я не являюсь обладателем устройств, его использующих, но я не вижу каких-либо причин для того, чтобы он не работал: если мне не изменяет память, то он фигурировал в настройках ядра наравне с USB, который замечательно работает.</p>
<p>Cardreader&#8217;ов в комплекте было два &#8212; один встроенный для MemoryStick, и внешний в 34мм-слот для SD/MMC. Насчет первого не могу ничего сказать, так как карточек таких у меня не нашлось, а второй отлично определился без каких-либо дополнительных действий с моей стороны.</p>
<p>Про DVD-привод, miniJack и прочие стандартные вещи наверное и упоминать смысла нет &#8212; с ними все в порядке.</p>
<h3>Подведем итоги</h3>
<p>Как Вы уже успели заметить, в целом процесс установки этого одного из самых &#171;сложных&#187; дистрибутивов <a href="/tag/linux" target="_blank">Linux</a> на ноутбук является далеко не элементарной задачей. Когда я писал этот текст, передо мной не стояло задачи убедить как можно больше читателей последовать по тому пути, что выбрал я и стать активным пользователем операционной системы под гордым названием <em><a href="/tag/gentoo" target="_blank">Gentoo</a> <a href="/tag/linux" target="_blank">Linux</a></em>, я всеголишь хотел показать Вам выбор, который стоит перед каждым пользователем персональных компьютеров, как настольных, так и портативных.</p>
<p>На закуску я хотел бы поделиться своими впечатлениями насчет активной эксплуатации такой системы на протяжении достаточного длительного периода времени. Промолчав про несравнимую производительность и стабильность, сразу перейду к тому, как я использую свой ноутбук: в основном для меня он просто является устройством, позволяющим пользоваться всем разнообразием услуг <a href="/net" target="_blank">Сети</a>: общаться, получать разного рода информацию, делиться информацией. Помимо этого я подрабатываю программированием на некоторых языках программирования, а также удаленным администрированием. Для каждой из этих задач существует огромнейший набор вариантов воплощения их в жизнь, и выбор каким из них мне пользоваться в каждой конкретной ситуации остается за мной, за <em>пользователем</em>, а не за производителями программного обеспечения, которые навязывают своим клиентам свои решения.</p>
<p>Закончить хотелось бы той же цитатой из <em>Gentoo Handbook</em>, которую я использовал в эпиграфе к этой статье: <em>&#171;Gentoo is all about choices.&#187;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/linux/gentoo-linux-sony-vaio/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>KDE 4 увидел свет</title>
		<link>http://www.insight-it.ru/unix-way/linux/kde-4-uvidel-svet/</link>
		<comments>http://www.insight-it.ru/unix-way/linux/kde-4-uvidel-svet/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 18:37:40 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[программное обеспечение]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/unix-way/linux-unix-way/kde-4-uvidel-svet/</guid>
		<description><![CDATA[Наконец-то наступил тот самый день, которого так долго ждали многие пользователи различных дистрибутивов Linux и многих других unix-like операционных систем. Да-да, сегодня вышла новая major-версия знаменитого K Desktop Environment под номером 4.0! Вкратце перескажу оффициальный пресс-релиз: Набор библиотек, лежащих в основе KDE, был кардинальным образом переделан, изменения произошли в каждой из них. Появилось два новых [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/kde.png" title="K Desktop Environment" alt="KDE Icon" style="margin: 10px; float: right;" /></p>
<p>Наконец-то наступил тот самый день, которого так долго ждали многие пользователи различных дистрибутивов Linux и многих других unix-like операционных систем. Да-да, сегодня вышла новая major-версия знаменитого K Desktop Environment под номером 4.0!</p>
<p><span id="more-24"></span></p>
<p>Вкратце перескажу <a target="_blank" href="http://www.kde.org/announcements/4.0/index.php">оффициальный пресс-релиз</a>:</p>
<p>Набор библиотек, лежащих в основе KDE, был кардинальным образом переделан, изменения произошли в каждой из них. Появилось два новых framework&#8217;а: один мультимедийный.- Phonon, а второй &#8212; Solid &#8212; для интеграции интерфейса для работы с используемым оборудованием в рабочее окружение.</p>
<p>Рабочий стол KDE приобрел новую оболочку под названием Plasma, которая поддерживает огромное количество widget&#8217;ов, эффектов и прочих украшательств.</p>
<p>Все программное обеспечение, входящее в его состав также не осталось без изменений (немного от себя: лично мне больше всего понравились изменения в Kopete &#8212; единственный icq клиент под *nix, в котором появилась возможность использования x-status, которой сильно не хватало, успел заценить его еще некоторое время назад в beta-версии KDE 4). Помимо Konqueror появился новый файловый менеджер под названием Dolphin и просмотрщик документов Okular (основанный на KPDF, но поддерживающий существенно большее количество форматов документов).</p>
<p>Тема рабочего окружения, используемая по-умолчанию также изменилась и называется она теперь Oxygen, на вкус и цвет конечно, но я думаю найдется много людей, которым она прийдется по душе.</p>
<div style="margin: 16px; text-align: center;"><img src="http://www.kde.org/announcements/4.0/screenshots/desktop_thumb.jpg" alt="KDE4 Screenshot" title="KDE 4.0 Screenshot" /></div>
<p>Вот так вот примерно выглядит новинка в стандартном варианте оформления, естественно практически безграничные возможности по модификации пользовательского интерфейса не только никуда не делись, а только преувеличились.</p>
<p>&nbsp;</p>
<p>На личном опыте новый релиз я опробовать еще не успел, но планирую этим делом заняться в ближайшем будующим, наверное сразу же как появятся ebuild&#8217;ы для Gentoo. После чего несомненно поделюсь с Вами впечатлениями.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/linux/kde-4-uvidel-svet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix way</title>
		<link>http://www.insight-it.ru/unix-way/unix-way/</link>
		<comments>http://www.insight-it.ru/unix-way/unix-way/#comments</comments>
		<pubDate>Sun, 06 Jan 2008 16:30:16 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Unix way]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[идеология]]></category>
		<category><![CDATA[программное обеспечение]]></category>
		<category><![CDATA[философия]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/programming/unix-way/</guid>
		<description><![CDATA[На эту тему в Сети можно найти несметное количество статей и обсуждений, не удивлюсь если Вам уже доводилось читать что-либо подобное в прошлом или может быть работать в одной из множества операционных систем, разработанных с использованием этой идеологии. За этим словосочетанием скрывается целая философия разработки программного обеспечения, начавшая свое развитие в середине 90-х годов прошлого [...]]]></description>
			<content:encoded><![CDATA[<p>На эту тему в Сети можно найти несметное количество статей и обсуждений, не удивлюсь если Вам уже доводилось читать что-либо подобное в прошлом или может быть работать в одной из множества операционных систем, разработанных с использованием этой идеологии. За этим словосочетанием скрывается целая философия разработки программного обеспечения, начавшая свое развитие в середине 90-х годов прошлого века и воплощенная в огромном количестве операционных систем и в еще большем количестве <a href="/tag/opensource" target="_blank">opensource</a> проектов. В этом тексте я хочу поведать Вам свой взгляд на эту философию с двух точек зрения: программиста и пользователя.</p>
<p>Наиболее точно охарактеризовать то, о чем пойдет речь можно лишь процитировав одного из основателей традиций <a href="/tag/unix" target="_blank">Unix</a> и разработчика <a href="/tag/tekhnologiya" target="_blank">технологии</a> под названием &quot;Unix pipes&quot; &#8212; <a href="http://www.cs.dartmouth.edu/~doug/" target="_blank" rel="nofollow">Douglas&#8217;а Mcllroy&#8217;а</a>:</p>
<blockquote><p>&quot;This is the Unix philosophy:</p>
<dl>
<dd>Write programs that do one thing and do it well.</dd>
<dd>Write programs to work together.</dd>
<dd>Write programs to handle text streams, because that is a universal interface.&quot;</dd>
</dl>
</blockquote>
<p> <span id="more-15"></span></p>
<p>Для начала воспроизведу суть цитаты для тех читателей, кто возможно не знает в достаточной степени английского языка:</p>
<p><cite>Философия написания программ для <a href="/tag/unix" target="_blank">Unix</a> заключается в написании программ, качественно решающих строго одну задачу, но при этом тесно работающих вместе. В качестве стандартного универсального интерфейса между ними предлагается использование стандартных потоков текстовых данных.</cite></p>
<p>Сразу же позволю себе слегка отойти от темы, упомянув что существует также и абсолютно противоположный подход к написанию программного обеспечения, который стоит упомянуть для того, чтобы &quot;почувствовать разницу&quot;. Он используется в большинстве <abbr title="Платное программное обеспечение с закрытым кодом">проприетарных</abbr> программ и заключается в нагромождении максимального количества функционала внутри одного программного продукта, в большинстве случаев с целью получения дополнительных возможностей для построения рекламной компании и, как следствие, более выгодного ведения продаж. К сожалению, при таком подходе разработчики часто забывают о качестве ПО, о возможностях расширение, удобстве использования, возможностях модификации со стороны пользователя и многом другом, но зато в итоге получают продукт, о котором можно указать &quot;установил &#8212; и сразу что-то как-то работает&quot;, но что именно, как оно работает, и как долго еще сможет работать до тех пор пока не начнутся неполадки, и как с ними бороться в случае если они появятся &#8212; остается загадкой для  как для подавляющего большинства пользователей, так и не редко для самих разработчиков тоже.</p>
<p>Закончив лирическое отступление, хочется взглянуть на нашу философию с точки зрения программиста.</p>
<h3 style="text-align: right;">Взгляд с точки зрения программиста</h3>
<p>Философия <a href="/tag/unix" target="_blank">Unix</a> предлагает программисту набор элементарных правил, соблюдение которых не только упростит работу программиста, но и позволит расширить сферу применения получившегося программного продукта с помощью различных вариантов интеграции с другими программами.</p>
<p>Как же это выглядит?</p>
<h4>Одна задача &#8212; одна программа</h4>
<p>С помощью этого правила список действий, требуемых от программиста для написания готовой программы, резко сокращается до двух позиций, одной из которых является собственно реализация задачи. Задачи эти чаще всего элементарны до безобразия и заключается в переработки входных данных, например: вывод содержимого указанного каталога, подсчет длины указанного файла, фильтрация входных данных, отправка локального электронного письма на удаленный сервер (да-да, для приема, сортировки, хранения, чтения, редактирования и отправки электронных писем могут использоваться отдельные программы).</p>
<p>Подобное множество программ решающих элементарные задачи делает количество способов решения какой-либо комплексной задачи стремящимся к бесконечности, ведь при наличии стандартизованного интерфейса комбинировать программы можно в любой последовательности. Для расширения возможностей такого рода комбинирования используются различные скриптовые языке, которых существует достаточно много, наиболее распространенным из которых являются bash скрипты, основанные на командах одноименной оболочки командной строки, используемой по-умолчанию во всех (хотя возможно стоило не использовать громких слов и написать &quot;в большинстве&quot;) дистрибутивах <a href="/tag/linux" target="_blank">Linux</a>.</p>
<h4>Unix pipes</h4>
<p>Этот механизм является основным способом реализации столько раз упоминавшегося выше интерфейса между элементарными программами.  Реализация его поддержки является как раз второй задачей, которая ставится перед программистом, идущим по пути <a href="/tag/unix" target="_blank">Unix</a>. С использованием большинства языков программирования она является тривиальной, особенно это справедливо для C.</p>
<p>На подробностях реализации останавливаться не будем, по этому позволю себе плавно перейти к следующему разделу и продолжить эту тему уже там.</p>
<h3 style="text-align: right;">Взгляд с точки зрения пользователя</h3>
<p>Слово pipes можно переводить по-разному, мне больше нравится вариант <em>потоки</em>,  но также часто используется и дословный перевод &#8212; <em>трубы</em>. Также имеет смысл сразу сказать, что его реализация полностью основывается на командной строке и командах различных ее оболочек, а также тесно интегрирована с устройствами компьютера и файловой системой.</p>
<p>У каждой элементарной программы, соответствующей этой идеологии, должен быть входной и выходной стандартные текстовые потоки &#8212; stdin и stdout соответственно. Механизм unix pipes позволяет перенаправлять эти потоки любой программы произвольным образом с помощью трех простых операторов: |, &gt; и &lt;. Первый из них &#8212; | перенаправляет stdout команды слева от него в stdin команды справа, а &gt; и &lt; предназначены для перенаправление потоков в/из файлы по схожему принципу.</p>
<p>Предлагаю рассмотреть  этот механизм на примерах. Возьмем несколько базовых утилит, имеющихся на практически любой unix-like системе:</p>
<ul>
<li><em>cat</em> &#8212; вывод содержимого указанного первым параметром файла в stdout (по умолчанию stdout в большинстве программ направляется  в консоль)</li>
<li><em>less</em> &#8212; постраничный вывод текста, полученного в stdin в stdout (переключение страниц и некоторые другие функции производятся с клавиатуры, возможны и другие варианты использования, но они нам не нужны)</li>
<li><em>grep</em> &#8212; построчная фильтрация текста, полученного в stdin, вывод только строк, содержащих текст, указанный первым аргументом, и вывод результата в stdout.</li>
</ul>
<p>Начнем с примера, позволяющего прочитать постранично любой файл:</p>
<pre lang="bash">
cat readme.txt | less</pre>
<p>Не смотря на наличие более простых методов достижения той же цели, этот пример наглядно демонстрирует процесс перенаправления ввода-вывода, другими словами с помощью оператора | была создана так называемая pipe, которая и дала название этому механизму. Пример, демонстрирующий перенаправление в файл будет столь же элементарным, хотя может быть с первого взгляда покажется &quot;пострашнее&quot;:</p>
<pre lang="bash">
cat readme.txt | grep unix > readme.txt
</pre>
<p>Этот пример должен был бы удалить из файла все строки, где нет слова &quot;unix&quot;. <em>Маленькое замечание:</em> при использовании такого перенаправления, перед началом передачи данных файл обнуляется. В этом и заключается ошибка данного примера: файл очищается до того, как поток данных успел пройти через фильтрацию <strong>grep</strong>, что приводит к просто очистке файла. Если же Вам все же нужен отфильтрованный список строк &#8212; стоит разместить в другом файле (которым можно было бы подменить исходный при необходимости), просто поменяв его название:</p>
<pre lang="bash">
cat readme.txt | grep unix > meread.txt
</pre>
<p>Если же Вы хотите избежать очищения файла, в который производится запись, необходимо написать символ &gt; дважды, тогда новые данные припишутся в конец:</p>
<pre lang="bash">
cat readme.txt | grep unix >> readme.txt</pre>
<p>В unix-like системах есть еще одна интересная особенность, косвенно связанная с этим механизмом: <em>все устройства являются файлами</em> и соответственно, прикреплены к файловой системе, для них выделена отдельная директория, по традиции называемая /dev. Работа с ними также ведется на тех же правах что и с обычными файлами, например набрав в консоли:</p>
<pre lang="bash">
cat readme.txt > /dev/dsp</pre>
<p>в ответ от компьютера Вы услышите некоторый звук, издаваемый из колонок или наушников.</p>
<h4>Подводим итоги</h4>
<p>С точки зрения простого пользователя использование opensource решений, построенных на базе философии unix, является как минимум нетривиальной задачей &#8212; ведь от него требуется как минимум понимание насколько мощная и гибкая система попала ему/ей в руки.  Отсутствие единственного верного способа решения той или иной задачи ставит большинство людей попросту в тупик, у них начинают разбегаться глаза от десятков тысяч программ, доступа к которым есть у всех пользователей unix-like операционных систем, с помощью набора простой волшебной команды в консоли, состоящей не более чем из трех-четырех слов.</p>
<p>Но если пользователь находит в себе силы понять что за зверь попал ему в руки, он сможет превратить любой компьютер в универсальное устройство по решению любых задач именно тем способом, который удобен <em>пользователю</em>, а не который навязали ему <em>производители</em> <abbr title="Платное программное обеспечение с закрытым кодом">проприетарного</abbr> програмного обеспечения.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/unix-way/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

