<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2527931752033667994</id><updated>2011-11-27T17:08:30.141-08:00</updated><category term='tab'/><category term='space'/><category term='tcp'/><category term='домашний сервер'/><category term='intel'/><category term='shell'/><category term='enermax'/><category term='twitter'/><category term='3com'/><category term='свитч'/><category term='policy routing'/><category term='network'/><category term='vim'/><category term='inwin'/><category term='сеть'/><category term='домашняя'/><category term='twit'/><category term='iproute'/><category term='switch'/><category term='ip'/><title type='text'>hexbot</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-8132550645315649582</id><published>2009-07-26T05:18:00.000-07:00</published><updated>2009-07-27T00:04:49.550-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intel'/><category scheme='http://www.blogger.com/atom/ns#' term='enermax'/><category scheme='http://www.blogger.com/atom/ns#' term='домашний сервер'/><title type='text'>Домашний сервер. Часть вторая — сборка.</title><content type='html'>И года не прошло, а всего лишь месяц и у меня появилась возможность заняться своим новым домашним сервером и дописать статью.&lt;br /&gt;В &lt;a href="http://hexbot.blogspot.com/2009/06/blog-post_19.html" &gt;первой статье&lt;/a&gt; я рассказал о выборе комплектующих, а здесь я покажу как это все выглядит и что из этого получилось.&lt;br /&gt;Куда все будет собираться - инвиновский корпус &lt;a href="http://www.in-win.us/products_pccase_series.php?cat_id=1&amp;amp;series_id=24#here"&gt;bm639&lt;/a&gt;:&lt;br /&gt;&lt;a href="http://img188.imageshack.us/i/caseunpacking.jpg/" target="_blank"&gt;&lt;img src="http://img188.imageshack.us/img188/7898/caseunpacking.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;Если вам захочется использовать дополнительную плату расширения, например мне нужна будет вторая сетевушка, чтобы использовать сервер как шлюз, тогда вам понадобятся их низкопрофильные варианты:&lt;br /&gt;&lt;a href="http://img268.imageshack.us/i/casefeatures.jpg/" target="_blank"&gt;&lt;img src="http://img268.imageshack.us/img268/6034/casefeatures.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;Теперь ядро всей системы, материнская плата от Intel &lt;a href="http://www.intel.com/products/desktop/motherboards/D945GCLF2-D945GCLF2D/D945GCLF2-D945GCLF2D-overview.htm"&gt;D945GCLF2D&lt;/a&gt; со встроенным процессором &lt;a href="http://processorfinder.intel.com/details.aspx?sSpec=SLG9Y" &gt;Atom 330&lt;/a&gt;, что приятно - эта плата имеет встроенную гигабитную(!) сетевушку:&lt;br /&gt;&lt;a href="http://img248.imageshack.us/i/mbunpackingfeatures.jpg/" target="_blank"&gt;&lt;img src="http://img248.imageshack.us/img248/9195/mbunpackingfeatures.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;Средство хранения данных - жесткий диск &lt;a href="http://www.wdc.com/en/products/products.asp?driveid=617"&gt;WD10EVDS&lt;/a&gt;. В принципе, выбранный корпус позволяет использовать два жестких диска, второй диск можно вставить в 5-ти дюймовый отсек, так что в теории выбранная конфигурация позволяет хранить до 4Тб данных:&lt;br /&gt;&lt;a href="http://img248.imageshack.us/i/hddf.jpg/" target="_blank"&gt;&lt;img src="http://img248.imageshack.us/img248/8364/hddf.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;А теперь все собранное вместе:&lt;br /&gt;&lt;a href="http://img110.imageshack.us/i/assembly.jpg/" target="_blank"&gt;&lt;img src="http://img110.imageshack.us/img110/7089/assembly.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;Самым большим удивлением для меня было то насколько это все вместе громко работает. Вы можете убедиться в этом сами (видео снималось только ради звука, так что извините за качество картинки :):&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/gBMqJMAishM&amp;hl=ru&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/gBMqJMAishM&amp;hl=ru&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Всего в системе 3 кулера + шум от жесткого диска. На кулер блока питания я особо не мог повлиять, да в принципе он самый тихий из троицы, а вот остальные два (кулер на корпусе и на северном мосте) я решил заменить. Кулер северного моста я, сначала, планировал заменить на пассивный &lt;a href="http://www.thermalright.com/new_a_page/product_page/chipset/hr05/product_chitset_cooler_hr05.htm" &gt;HR-05&lt;/a&gt;, но оказалось что он не войдет по высоте да и по ширине ему будет тесновато. В итоге я его просто подключил через регулятор скорости и установил его на 2000 об/м (изначально было 4000 об/м). Кулер системного блока был заменен на &lt;a href="http://www.enermaxru.com/produkte/peripherie/everest.html" &gt;Enermax UCEV8&lt;/a&gt;, этот кулер сам меняет скорость вращения в зависимости от температуры (500 об/м при температуре меньше 45 градусов и 1500, если больше):&lt;br /&gt;&lt;a href="http://img248.imageshack.us/i/ucev8.jpg/" target="_blank"&gt;&lt;img src="http://img248.imageshack.us/img248/7587/ucev8.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;Результат получился довольно хорошим:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3yFoF1SE11U&amp;hl=ru&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/3yFoF1SE11U&amp;hl=ru&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Получился довольно приятный домашний сервер:&lt;br /&gt;&lt;a href="http://img263.imageshack.us/i/exteriorj.jpg/" target="_blank"&gt;&lt;img src="http://img263.imageshack.us/img263/5494/exteriorj.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" /&gt;&lt;/a&gt;&lt;br /&gt;И на последок несколько результатов тестов производительности:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Под Windows XP:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;PCMark05 - 2207&lt;/li&gt;&lt;li&gt;WinRar (встроенный тест):&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Один поток - 233 Kb/s&lt;/li&gt;&lt;li&gt;Многопоточный режим - 568 Kb/s&lt;/li&gt;&lt;li&gt;Одновременно 4-е однопоточных теста - 157+158+157+158=630 Kb/s&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Под Fedora 11:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Компиляция lighttpd 1.4.23 (./configure --without-pcre --without-bzip2):&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Время выполнения - 1:18 (эту же операцию Core2Duo-8200 за 0:23, P-II 400 за 3:23)&lt;/li&gt;&lt;li&gt;Время выполнения 4-х параллельных компиляций - 2:13, 2:14, 2:14, 2:14&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-8132550645315649582?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/8132550645315649582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=8132550645315649582' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8132550645315649582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8132550645315649582'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/07/blog-post.html' title='Домашний сервер. Часть вторая — сборка.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-2298290181075308838</id><published>2009-06-24T11:05:00.000-07:00</published><updated>2009-07-01T08:49:29.840-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='сеть'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='домашняя'/><category scheme='http://www.blogger.com/atom/ns#' term='switch'/><category scheme='http://www.blogger.com/atom/ns#' term='3com'/><category scheme='http://www.blogger.com/atom/ns#' term='свитч'/><title type='text'>3Com® Gigabit Switch 5 3CGSU05A.</title><content type='html'>Вслед за модернизацией домашнего сервака, проапгрейдил домашнюю сеть до гигабитной. В качестве свича остановился на &lt;a href="http://www.3com.ph/products/en_US/detail.jsp?tab=features&amp;amp;pathtype=purchase&amp;amp;sku=3CGSU05A"&gt;трикомовском гигабитнике&lt;/a&gt;.&lt;br /&gt;Свич оказался меньше, чем казался на фотографии на &lt;a href="http://www.3com.ph/products/en_US/detail.jsp?tab=features&amp;amp;pathtype=purchase&amp;amp;sku=3CGSU05A"&gt;сайте&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-Z8XPlGI968/SkjsKFHBgRI/AAAAAAAAAAc/iuscwZSfzw8/s1600-h/24062009654.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_-Z8XPlGI968/SkjsKFHBgRI/AAAAAAAAAAc/iuscwZSfzw8/s320/24062009654.jpg" alt="" id="BLOGGER_PHOTO_ID_5352787815044317458" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Z8XPlGI968/SkjsDiVZbPI/AAAAAAAAAAU/icFwtVbs1Sw/s1600-h/24062009655.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_-Z8XPlGI968/SkjsDiVZbPI/AAAAAAAAAAU/icFwtVbs1Sw/s320/24062009655.jpg" alt="" id="BLOGGER_PHOTO_ID_5352787702630149362" border="0" /&gt;&lt;/a&gt;Вживую он выглядит поприличее чем на фото.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Z8XPlGI968/SkjsmeKiHgI/AAAAAAAAAAk/amXy_-XfdBc/s1600-h/24062009657.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_-Z8XPlGI968/SkjsmeKiHgI/AAAAAAAAAAk/amXy_-XfdBc/s320/24062009657.jpg" alt="" id="BLOGGER_PHOTO_ID_5352788302806261250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Z8XPlGI968/SkjswlMNSxI/AAAAAAAAAAs/cws_0M02Guc/s1600-h/24062009662.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_-Z8XPlGI968/SkjswlMNSxI/AAAAAAAAAAs/cws_0M02Guc/s320/24062009662.jpg" alt="" id="BLOGGER_PHOTO_ID_5352788476491025170" border="0" /&gt;&lt;/a&gt;И наконец-то он в действии.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Z8XPlGI968/SkjtBEoyS4I/AAAAAAAAAA0/rgcr5JLIRF8/s1600-h/24062009670.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_-Z8XPlGI968/SkjtBEoyS4I/AAAAAAAAAA0/rgcr5JLIRF8/s320/24062009670.jpg" alt="" id="BLOGGER_PHOTO_ID_5352788759810296706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-2298290181075308838?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/2298290181075308838/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=2298290181075308838' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/2298290181075308838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/2298290181075308838'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/06/3com-gigabit-switch-5-3cgsu05a.html' title='3Com® Gigabit Switch 5 3CGSU05A.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-Z8XPlGI968/SkjsKFHBgRI/AAAAAAAAAAc/iuscwZSfzw8/s72-c/24062009654.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-848683951420784270</id><published>2009-06-19T14:43:00.000-07:00</published><updated>2009-07-27T00:05:48.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intel'/><category scheme='http://www.blogger.com/atom/ns#' term='inwin'/><category scheme='http://www.blogger.com/atom/ns#' term='домашний сервер'/><title type='text'>Домашний сервер. Часть первая — выбор комплектующих.</title><content type='html'>Сейчас мой домашний сервер представляет из себя комп с процессором Pentium 400Mhz и 384Mb памяти. Главные задачи, которые я ставил перед собой, были сделать его еще тише, меньше по размерам и быстрее.&lt;br /&gt;Сначала я подобрал комплектующие.&lt;br /&gt;&lt;habracut /&gt;&lt;br /&gt;Уменьшить размеры можно только используя маленькие комплектующие :) поэтому я остановился на форм факторе &lt;a href="http://en.wikipedia.org/wiki/Mini-ITX"&gt;mini-ITX&lt;/a&gt;. Для начала был выбран корпус, который я искал в ассортименте корпусов Inwin. К сожелению у них совсем небольшой выбор mini-ITX корпусов, но то что было вполне мне подошло, мой выбор пал на &lt;a href="http://www.in-win.us/products_pccase_series.php?cat_id=1&amp;series_id=24#here"&gt;bm639&lt;/a&gt;. Встроенный в корпус блок питания выдает 120W с таким особо не разгуляешься, но для моих задач этого более чем достаточно.&lt;br /&gt;Соответствуя моим условиям, все внутренности сервера должны быть тихими и, желательно, с пониженным энергопотреблением. Итак, в качестве процессора я решил брать Atom, более чем подходящий по всем параметрам, а так как я хотел все таки побыстрее, то искал &lt;a href="http://processorfinder.intel.com/details.aspx?sSpec=SLG9Y"&gt;Atom 330&lt;/a&gt;. Из материнских плат с таким процессором я нашел претендентов от Intel, Gygabyte и парочки нонеймов. Претендента от Gygabyte я отбросил, так как имел несколько раз неприятные глюки с их комплектующими, поэтому решил брать плату от Intel, хотя с интеловскими мамками особо и не работал. Из двух интеловских плат я выбрал модель без излишеств &lt;a href="http://www.intel.com/products/desktop/motherboards/D945GCLF2-D945GCLF2D/D945GCLF2-D945GCLF2D-overview.htm"&gt;Intel Desktop Board D945GCLF2D&lt;/a&gt;.&lt;br /&gt;Про память сказать особо нечего, я взял по максимуму сколько поддерживала материнская плата - 2Gb.&lt;br /&gt;Осталось разобраться с винтом. Жесткие диски я просмотрел у всех основных производителей. Здесь победил WD cо своей серией Green Power. Они имеют пониженное энергопотребление и скорость врашения шпинделя 5400, что обеспечивает более тихую работу. Сначала я хотел брать 500Gb винт, но по акустическим параметрам лучше выглядел террабайтник &lt;a href="http://www.wdc.com/en/products/products.asp?driveid=617"&gt;WD10EVDS&lt;/a&gt;, который я в итоге и взял.&lt;br /&gt;Все это я написал пока скачивалась Windows 7 64-bit для установки на новую систему. Ставить буду только для тестов, в итоге, все таки, на серваке обоснуется Fedora 11 :)&lt;br /&gt;Во второй части статьи я выложу фотоотчет по сборке.&lt;br /&gt;&lt;br /&gt;Вторая часть - Сборка.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-848683951420784270?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/848683951420784270/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=848683951420784270' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/848683951420784270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/848683951420784270'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/06/blog-post_19.html' title='Домашний сервер. Часть первая — выбор комплектующих.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-5527099800834771000</id><published>2009-06-18T10:20:00.000-07:00</published><updated>2009-06-18T10:27:05.132-07:00</updated><title type='text'>Обновление домашнего сервера.</title><content type='html'>Наконец-то руки добрались до обновления моего домашнего сервака. Вместо старенького Pentium II 400Mhz у меня будет Atom 330 :), благодаря этой платке &lt;a href="http://www.intel.com/products/desktop/motherboards/D945GCLF2-D945GCLF2D/D945GCLF2-D945GCLF2D-overview.htm"&gt;Intel Desktop Board D945GCLF2D&lt;/a&gt;. Корпус взял &lt;a href="http://www.in-win.us/products_pccase_series.php?cat_id=1&amp;series_id=24&amp;model_id=241#here"&gt;этот&lt;/a&gt;. Ну а ставить буду одиннадцатую федору. Наверное займусь этим в выходные еще ведь надо докупить мозгов и винт.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-5527099800834771000?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/5527099800834771000/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=5527099800834771000' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/5527099800834771000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/5527099800834771000'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/06/blog-post.html' title='Обновление домашнего сервера.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-5466805213683913866</id><published>2009-03-26T01:43:00.000-07:00</published><updated>2009-03-26T02:17:16.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='tab'/><category scheme='http://www.blogger.com/atom/ns#' term='space'/><title type='text'>Vim. Spaces vs Tabs.</title><content type='html'>Vim замечательный редактор, в котором почти все поддается настройке. Процесс редактирования почти никогда не обходится без использования отступов, как правило они выполняются табуляцией, но иногда требуется делать это некоторым количеством пробелов. Так например в языке программирования &lt;a href="http://python.org"&gt;python&lt;/a&gt; &lt;a href="http://docs.python.org/3.0/tutorial/controlflow.html#intermezzo-coding-style"&gt;рекомендуется &lt;/a&gt;делать отступы при помощи 4 пробелов. Vim позволяет легко переключаться с отступов по табам на отступы пробелами, за эти параметры отвечают 3 настройки:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;expandtab&lt;/li&gt;&lt;br /&gt;&lt;li&gt;shiftwidth&lt;/li&gt;&lt;br /&gt;&lt;li&gt;softtabstop&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;На следующей схемке показано, за что каждый из параметров отвечает:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;         (нажимаем tab)&lt;br /&gt;|&lt;-softtabstop-&gt;|&lt;-softtabstop-&gt;|&lt;br /&gt;                |               |&lt;br /&gt;print('ok')     |       (нажимаем enter)&lt;br /&gt;                |&lt;-shiftwidth--&gt;|&lt;--shiftwidth-&gt;|&lt;br /&gt;def is_vim_best():              |               |&lt;br /&gt;                if(1 == 1):     |               |&lt;br /&gt;                                if(2 == 2):     |&lt;br /&gt;                                                return 'yes'&lt;br /&gt;&lt;br /&gt;print('is vim best? - ' + is_vim_best())&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Тоесть, expandtab - включает замену табов на пробелы (:set expandtab для включения и :set noexpandtab для выключения), в значении softtabstop хранится количество пробелов, на которое подменяется таб (:set softtabstop=4), когда нажимается таб, в shiftwidth хранится количестов пробелов, на которое заменяется отступ, когда выполняется авто-отступ или операции &lt;&lt; &gt;&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-5466805213683913866?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/5466805213683913866/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=5466805213683913866' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/5466805213683913866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/5466805213683913866'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/03/vim-spaces-vs-tabs.html' title='Vim. Spaces vs Tabs.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-8556596890545095014</id><published>2009-03-25T08:38:00.000-07:00</published><updated>2009-03-27T05:08:31.220-07:00</updated><title type='text'>Используем 2+ провайдера с применением модуля CONNMARK</title><content type='html'>Еще один способ использования нескольких каналов в интернет, теперь с использованием модуля CONNMARK. Когда я с ним начинал знакомится все выглядело довольно просто, но в процессе настройки я столкнулся со множеством подводных камней.&lt;br /&gt;Допустим мы имеем следующие правила маршрутизации:&lt;br /&gt;&lt;blockquote&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;IF1=eth1&lt;br /&gt;IF2=eth2&lt;br /&gt;IP1=xx.xx.xx.xx&lt;br /&gt;IP2=xx.xx.xx.xx&lt;br /&gt;P1=xx.xx.xx.xx&lt;br /&gt;P2=xx.xx.xx.xx&lt;br /&gt;P1_NET=xx.xx.xx.xx/24&lt;br /&gt;P2_NET=xx.xx.xx.xx/24&lt;br /&gt;PC=xx.xx.xx.xx&lt;br /&gt;&lt;br /&gt;ip route add $P1_NET dev $IF1 src $IP1 table T1&lt;br /&gt;ip route add default via $P1 table T1&lt;br /&gt;ip route add $P2_NET dev $IF2 src $IP2 table T2&lt;br /&gt;ip route add default via $P2 table T2&lt;br /&gt;&lt;br /&gt;ip route add $P1_NET dev $IF1 src $IP1&lt;br /&gt;ip route add $P2_NET dev $IF2 src $IP2&lt;br /&gt;&lt;br /&gt;ip route add default via $P1 metric 10&lt;br /&gt;&lt;br /&gt;ip rule add from $IP1 table T1&lt;br /&gt;ip rule add from $IP2 table T2&lt;br /&gt;&lt;br /&gt;ip rule add fwmark 2 table T2&lt;/blockquote&gt;&lt;br /&gt;Здесь IF - интерфейсы нашего роутера, смотрящие к провайдерам, IP - внешние айпишники, P - шлюзы, P_NET - провайдерские подсети, PC - ПК во внутренней сети.&lt;br /&gt;Допустим на PC у нас работает SMTP сервер, и необходимо чтобы он обрабатывал соединения поступающие на любой из внешних адресов. Для этого понадобятся правила DNAT:&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_PRIM -d $GLOBAL_IP_PRIM -p tcp --dport 25 -j DNAT --to-destination $PC&lt;br /&gt;$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_SEC -d $GLOBAL_IP_SEC -p tcp --dport 25 -j DNAT --to-destination $PC&lt;/blockquote&gt;&lt;br /&gt;И следующий набор правил:&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -m state --state ESTABLISHED -j CONNMARK --restore-mark&lt;br /&gt;$IPTABLES -t mangle -A FORWARD -i $GLOBAL_ETH_PRIM -m state --state NEW -j CT&lt;br /&gt;$IPTABLES -t mangle -A FORWARD -i $GLOBAL_ETH_SEC -m state --state NEW -j CT&lt;/blockquote&gt;&lt;br /&gt;В первой строке мы восстанавливаем маркер, установленный модулем CONNMARK, причем необходимо явно указать, что применяется это к пакетам идущим из внутренней подсети, либо добавить в таблицы маршрутизации пути к локальной подсети, иначе некорректно будут отрабатыватся правила DNAT. Все новые пакеты отправляются на маркировку в пользовательскую цепочку CT вот она:&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -t mangle -N CT&lt;br /&gt;&lt;br /&gt;$IPTABLES -t mangle -A CT -i $GLOBAL_ETH_PRIM -p tcp --dport 25 -j CONNMARK --set-mark 1&lt;br /&gt;$IPTABLES -t mangle -A CT -i $GLOBAL_ETH_SEC -p tcp --dport 25 -j CONNMARK --set-mark 2&lt;/blockquote&gt;&lt;br /&gt;Пакеты маркируются в соответствии с интерфейсом получения. В принципе маркировать пакеты, приходящие на интерфейс по умолчанию не обязательно. Вот и все, если не считать правил, разрешающих прохождение пакета.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-8556596890545095014?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/8556596890545095014/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=8556596890545095014' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8556596890545095014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8556596890545095014'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/03/2-connmark.html' title='Используем 2+ провайдера с применением модуля CONNMARK'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-1548048325104823561</id><published>2009-03-23T05:29:00.000-07:00</published><updated>2009-03-24T13:14:39.577-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='twit'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Twit. Правильное продолжение.</title><content type='html'>Исправляю предыдущий вариант скрипта. Как я уже &lt;a href="http://hexbot.blogspot.com/2008/07/twit.html"&gt;сказал&lt;/a&gt; правильно будет анализировать ответ от сервера (по правде говоря мне сказали).&lt;br /&gt;Итак, теперь с помощью xsl-файла twit.xsl:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;#39;1.0&amp;#39;?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version=&amp;#39;1.0&amp;#39; xmlns:xsl=&amp;#39;http://www.w3.org/1999/XSL/Transform&amp;#39;&amp;gt;&lt;br /&gt;&amp;lt;xsl:template match=&amp;#39;/&amp;#39;&amp;gt;&lt;br /&gt;&amp;lt;xsl:value-of select=&amp;#39;status/id&amp;#39;/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Буду проверять существует ли в ответе id нового сообщения.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;# Made by rsk -- http://rsk.me&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Imports $TPASS, $TUSER&lt;br /&gt;. ~/.twit/pass&lt;br /&gt;XSLPATH=/etc/twit/twit.xsl&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;echo &amp;quot;Type in your message...&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MSG=&amp;quot;$(perl -e&amp;#39;$_=&amp;lt;&amp;gt;,print&amp;#39;)&amp;quot;&lt;br /&gt;&lt;br /&gt;echo -n &amp;quot;Sending...&amp;quot;&lt;br /&gt;RESULT=$(curl --basic --user $TUSER:$TPASS --data status=&amp;quot;$MSG&amp;quot; http://twitter.com/statuses/update.xml 2&amp;gt; /dev/null | xsltproc $XSLPATH - | tail -n 1)&lt;br /&gt;&lt;br /&gt;if [ -n &amp;quot;$RESULT&amp;quot; ]; then&lt;br /&gt;echo &amp;quot;ok&amp;quot;;&lt;br /&gt;else&lt;br /&gt;echo &amp;quot;Sending failed!&amp;quot;;&lt;br /&gt;fi&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-1548048325104823561?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/1548048325104823561/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=1548048325104823561' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/1548048325104823561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/1548048325104823561'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/03/twit.html' title='Twit. Правильное продолжение.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-8675727404920191013</id><published>2009-03-20T15:00:00.000-07:00</published><updated>2009-03-23T00:29:05.853-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='twit'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Twit. Продолжение.</title><content type='html'>&lt;a href="http://hexbot.blogspot.com/2008/06/twitter-twit-usrlocalsbin-devnull-if-eq.html"&gt;Начало.&lt;/a&gt;&lt;br /&gt;Появился чуток свободного времени и я немного довел до ума свой скриптик постинга сообщений в твиттер из командной строки.&lt;br /&gt;Во-первых я изменил способ передачи сообщения, теперь оно считывается из stdout (тут не обошлось без перломагии). А во-вторых я добавил обратную связь - теперь скрипт проверяет действительно ли сообщение дошло до твиттера.&lt;br /&gt;Если с первым все понятно, то со вторым пришлось повозиться. Эту задачу я решил сравнивая последний id сообщения до и после отправки.&lt;br /&gt;id сообщения я получаю применяя этот xslt-файл к http://twitter.com/statuses/user_timeline.xml (&lt;a href="http://apiwiki.twitter.com/REST+API+Documentation#statuses/usertimeline"&gt;twitter api&lt;/a&gt;):&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&amp;lt;?xml version='1.0'?&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &amp;lt;xsl:template match='/'&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;  &amp;lt;xsl:value-of select='statuses/status/id'/&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Он будет лежать в /etc/twit/twit.xsl.&lt;br /&gt;Далее собственно сам скрипт:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;#!/bin/sh&lt;br /&gt;&lt;/li&gt;&lt;li&gt;# Made by rsk -- http://rsk.me&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;# Imports $TPASS, $TUSER&lt;br /&gt;&lt;/li&gt;&lt;li&gt;. ~/.twit/pass&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XSLPATH=/etc/twit/twit.xsl&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;echo "Type in your message..."&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MSG="$(perl -e'$_=&amp;lt;&amp;gt;,print')"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;echo "Checking last id..."&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LASTIDOLD=$(curl --basic --user $TUSER:$TPASS  http://twitter.com/statuses/user_timeline.xml 2&amp;gt;/dev/null | xsltproc $XSLPATH - | grep -v ^$ | tail -n 1)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;echo "Sending..."&lt;br /&gt;&lt;/li&gt;&lt;li&gt;curl --basic --user $TUSER:$TPASS --data status="$MSG" http://twitter.com/statuses/update.xml &amp;gt; /dev/null 2&amp;gt; /dev/null&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;echo "Checking last id..."&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sleep 1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LASTIDNEW=$(curl --basic --user $TUSER:$TPASS  http://twitter.com/statuses/user_timeline.xml 2&amp;gt;/dev/null | xsltproc $XSLPATH - | grep -v ^$ | tail -n 1)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;if [ $LASTIDOLD -eq $LASTIDNEW ]; then&lt;br /&gt;&lt;/li&gt;&lt;li&gt; echo "Sending failed!";&lt;br /&gt;&lt;/li&gt;&lt;li&gt;else&lt;br /&gt;&lt;/li&gt;&lt;li&gt; echo "ok";&lt;br /&gt;&lt;/li&gt;&lt;li&gt;fi&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Искуственную задержку в 18 строке пришлось добавить, потому что один раз id оказались одинаковыми, хотя сообщение и дошло.&lt;br /&gt;Теперь осталось записать пароли в ~/.twit/pass:&lt;br /&gt;&lt;blockquote&gt;&lt;ol&gt;&lt;li&gt;TUSER=user&lt;br /&gt;&lt;/li&gt;&lt;li&gt;TPASS=pass&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;UPD. &lt;/span&gt;На самом деле это все неправильно :-) Надо анализировать ответ при отправке нового статуса и по ответу определять дошло ли сообщение. Обязуюсь исправить.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-8675727404920191013?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/8675727404920191013/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=8675727404920191013' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8675727404920191013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8675727404920191013'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2008/07/twit.html' title='Twit. Продолжение.'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-8800465219952135416</id><published>2009-03-20T10:34:00.000-07:00</published><updated>2009-03-24T03:16:06.862-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tcp'/><category scheme='http://www.blogger.com/atom/ns#' term='policy routing'/><category scheme='http://www.blogger.com/atom/ns#' term='ip'/><category scheme='http://www.blogger.com/atom/ns#' term='iproute'/><title type='text'>Используем 2+ провайдера (вторая часть)</title><content type='html'>Продолжим настройку нашего шлюза, про который я говорил в &lt;a href="http://hexbot.blogspot.com/2009/03/2.html"&gt;предыдущей статье&lt;/a&gt;. Напомню, там мы настроили правила маршрутизации, теперь нам надо заняться iptables. Сейчас мы настроим сеть состоящую из шлюза и сервера. На шлюзе будет работать SSH и DNS, а сервер у нас будет виндовый на нем у нас RDP и SMTP. Сеть будет настроена таким образом, что через любой из внешних айпишников мы сможем подключаться к любому из серверов, а SMTP сервер будет выходить наружу через основного провайдера.&lt;br /&gt;Ну и конечно, же начнем с переменных, причем вынесем следующие настройки в отдельный файл, это нам сильно пригодиться в будущем:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;export GLOBAL_ETH_PRIM=eth1&lt;br /&gt;export GLOBAL_ETH_SEC=eth2&lt;br /&gt;export GLOBAL_IP_PRIM=10.10.10.10&lt;br /&gt;export GLOBAL_IP_SEC=20.20.20.20&lt;br /&gt;export MARK_PRIM=10&lt;br /&gt;export MARK_SEC=20&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Назовем этот файл &lt;font style="font-style: italic;"&gt;ipt_p1.conf&lt;/font&gt;. А содержит он данные о том, какой из интерфейсов является главным, а какой запасным (PRIM и SEC соответственно) и значения для маркировки пакетов.&lt;br /&gt;Перейдем к основному файлу конфигурации iptables, назовем его &lt;font style="font-style: italic;"&gt;ipt.conf&lt;/font&gt;. Запишем переменные ;-)&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;IPTABLES=/sbin/iptables&lt;br /&gt;MODPROBE=/sbin/modprobe&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Это для того, чтобы меньше зависеть от дистрибутива - пути к исполняемым файлам.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;LOCAL_ETH=eth0&lt;br /&gt;GLOBAL_ETH_P1=eth1&lt;br /&gt;GLOBAL_ETH_P2=eth2&lt;br /&gt;LOCAL_IP=192.168.0.1&lt;br /&gt;LOCAL_NET=192.168.0.0/24&lt;br /&gt;GLOBAL_IP_P1=10.10.10.10&lt;br /&gt;GLOBAL_IP_P2=20.20.20.20&lt;/blockquote&gt;&lt;br /&gt;Тут мы описали конфигурацию нашей сети, по порядку: локальный интерфейс, интерфейсы, которые смотрят к провайдерам, локальный айпишник и подсеть, айпишники, которые выданы провайдерами.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;SRV11=192.168.0.11&lt;br /&gt;SRV12=192.168.0.12&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;А это наш сервер, для которого мы настраивали маршрутизацию на основе политик, используя метки. Как я уже говорил этот сервер на своем сетевом интерфейсе имеет два айпишника, чуть ниже я расскажу для чего это нам пригодиться.&lt;br /&gt;&lt;blockquote&gt;. $1&lt;/blockquote&gt;&lt;br /&gt;Зацепили внешние настройки, в данном случае это будет наш файл &lt;font style="font-style: italic;"&gt;ipt_p1.conf&lt;/font&gt;.&lt;br /&gt;Хватит о скучном, приступим к настройке, причем попытаемся все сделать красиво:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;echo "[+] Flushing existing iptables rules..."&lt;br /&gt;$IPTABLES -F&lt;br /&gt;$IPTABLES -F -t nat&lt;br /&gt;$IPTABLES -F -t raw&lt;br /&gt;$IPTABLES -F -t mangle&lt;br /&gt;$IPTABLES -X&lt;br /&gt;$IPTABLES -P INPUT DROP&lt;br /&gt;$IPTABLES -P OUTPUT DROP&lt;br /&gt;$IPTABLES -P FORWARD DROP&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Очищаем все правила iptables, в первой строке говорим, что делаем, почему по английски, а чтобы не было проблем с кодировками. Последние три строчки устанавливают правила по умолчанию - все пакеты не подходящие под список правил будут просто отброшены.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$MODPROBE ip_conntrack&lt;br /&gt;$MODPROBE iptable_nat&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Загрузили модули ядра, которые будем использовать.&lt;br /&gt;Теперь пройдемся по цепочкам iptables и заполним их необходимыми правилами:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;echo "[+] Setting up INPUT chain..."&lt;br /&gt;&lt;br /&gt;$IPTABLES -A INPUT -m state --state INVALID -j DROP&lt;br /&gt;$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Используя возможности модуля &lt;font style="font-style: italic;"&gt;state&lt;/font&gt; мы отбрасываем некорректные пакеты и принимаем пакеты относящиеся к уже установленным соединениям либо ко вторичными соединениям (таким как передача данных в ftp).&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Принимаем подключения по SSH отовсюду.&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A INPUT -i $LOCAL_ETH -s $LOCAL_NET -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Локальный трафик будет ходить без ограничений, хотя это не всегда правильно.&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A INPUT -i lo -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Тоже на localhost.&lt;br /&gt;Продолжаем с цепочкой OUTPUT:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;echo "[+] Setting up OUTPUT chain..."&lt;br /&gt;&lt;br /&gt;$IPTABLES -A OUTPUT -m state --state INVALID -j DROP&lt;br /&gt;$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Эти правила аналогичны правилам в цепочке INPUT.&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A OUTPUT -o $GLOBAL_ETH_PRIM -p udp --dport 53 -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Мы разрешили работать нашему DNS серверу через основного провайдера&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A OUTPUT -o $GLOBAL_ETH_PRIM -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;А также разрешили выходить наружу по SSH.&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A OUTPUT -o $LOCAL_ETH -d $LOCAL_NET -m state --state NEW -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Опять же на исходящий локальный трафик ограничений нет.&lt;br /&gt;Переходим к обработке трафика из локальной сети:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;echo "[+] Setting up FORWARD chain..."&lt;br /&gt;&lt;br /&gt;$IPTABLES -A FORWARD -m state --state INVALID -j DROP&lt;br /&gt;$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Все те же два удобных правила.&lt;br /&gt;&lt;blockquote&gt;$IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT&lt;br /&gt;$IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT&lt;br /&gt;$IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT&lt;br /&gt;$IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT&lt;/blockquote&gt;&lt;br /&gt;Так у нас получается, что пакеты приходящие на первого провайдера пропускаются только на первый айпишник сервера, второго - на второй.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$IPTABLES -A FORWARD -i $LOCAL_ETH -s $SRV11 -j ACCEPT&lt;br /&gt;$IPTABLES -A FORWARD -i $LOCAL_ETH -s $SRV12 -j ACCEPT&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Разрашаем весь исходящий трафик с нашего сервера, опять же это не совсем правильно.&lt;br /&gt;Далее идут правила NAT:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$IPTABLES -t nat -A POSTROUTING -s $SRV11 -p tcp --dport 25 -j SNAT --to-source $GLOBAL_IP_PRIM&lt;br /&gt;$IPTABLES -t nat -A POSTROUTING -s $SRV12 -p tcp --dport 25 -j SNAT --to-source $GLOBAL_IP_PRIM&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Все, что наш сервер попытается отправить по SMTP пойдет через основного провайдера.&lt;br /&gt;И опять самое интересное нам осталось на последок. Переходим к PREROUTING, здесь то мы и воспользуемся возможностью маркировать пакеты, которая нам понадобится для маршрутизации вот в этих двух строчках:&lt;br /&gt;&lt;blockquote&gt;&lt;font style="font-style: italic;"&gt;&lt;br /&gt;ip rule add from $SRV11 fwmark 10 table T1&lt;br /&gt;ip rule add from $SRV12 fwmark 20 table T2&lt;br /&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;br /&gt;Итак, наши правила:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --dport 25 -j MARK --set-mark $MARK_PRIM&lt;br /&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --dport 25 -j MARK --set-mark $MARK_PRIM&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Все пакеты уходящие с нашего внутреннего сервера на 25 порт мы маркируем значением $MARK_PRIM. Давайте проследим, что это нам дает: исходящий пакет маркируется значением 10, значит маршрутизироваться он будет по таблице T1, а соответствуя этой таблице пакет должен уйти через первого провайдера, в цепочке FORWARD есть разрешающее правило, поэтому пакет безпрепятственно проходит - все правильно это нам и требовалось.&lt;br /&gt;Теперь нам надо разобраться с соединениями идущими к нам. Сначала, конечно же, должен отработать DNAT:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 25 -j DNAT --to-destination $SRV11&lt;br /&gt;$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 3389 -j DNAT --to-destination $SRV11&lt;br /&gt;$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 25 -j DNAT --to-destination $SRV12&lt;br /&gt;$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 3389 -j DNAT --to-destination $SRV12&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Вроде бы все правильно, проверяем: пакет приходит на внешний интерфейс шлюза, в зависимости от принадлежности интерфейса провайдеру, он перенаправляется на первый или второй айпишник внутреннего сервера, сервер отвечает с того же(!) айпишника, пакет на шлюзе маршрутизируется по основной таблице, проходит через FORWARD и отправляется через основного провайдера, а вот это уже не правильно, ведь пакет мог прийти и через запасного провайдера. Исправляем, добавляя правила:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 25 -j MARK --set-mark $MARK_PRIM&lt;br /&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 3389 -j MARK --set-mark $MARK_PRIM&lt;br /&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 25 -j MARK --set-mark $MARK_SEC&lt;br /&gt;$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 3389 -j MARK --set-mark $MARK_SEC&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Теперь на обратном пути мы маркируем пакеты в соответствии с адресом, с которого они отправляются. Далее в дело вступают таблицы маршрутизации T1 и T2, поэтому решение через какой интерфейс отправлять пакеты принимается правильное.&lt;br /&gt;Все! Готово. Для применения правил выполняем команду &lt;font style="font-style: italic;"&gt;"./ipt.conf ipt_p1.conf"&lt;/font&gt;. Теперь наши сервера доступны, пока хотя бы один из провайдеров дает нам доступ в интернет.&lt;br /&gt;Еще хотел рассказать, как можно переключаться между провайдерами и сделать парочку замечаний, но объем статьи и так уже слишком большой, видимо будет третья часть.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://7lv.ru/11170063"&gt;Скачать скрипты из первой и второй части.&lt;/a&gt; (&lt;a href="http://www.box.net/shared/y9dz4t5eho"&gt;зеркало&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p.s. Написано, чтобы понять самому и рассказать другим.©&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-8800465219952135416?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/8800465219952135416/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=8800465219952135416' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8800465219952135416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8800465219952135416'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/03/2_20.html' title='Используем 2+ провайдера (вторая часть)'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-2411775952138345652</id><published>2009-03-18T07:46:00.000-07:00</published><updated>2009-03-20T09:10:56.929-07:00</updated><title type='text'>Используем 2+ провайдера (первая часть)</title><content type='html'>Здесь я хочу рассказать о настройке шлюза на Linux'e, для использования 2-х (и более) провайдеров интернета.&lt;br /&gt;Для настройки мы будем использовать возможности iptables и утилиты ip из пакета, который как правило называется iproute2.  А для решения поставленной задачи пакеты мы будем маршрутизировать на основе "policy routing" (т.е. маршрутизация на основе политик), а не "destination routing" (маршрутизация на основе адреса получателя).&lt;br /&gt;Итак, приступим. Для начала определимся с переменными:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;IF1=eth1&lt;br /&gt;IF2=eth2&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;IF - это сетевые интерфейсы, которые смотрят в интернет, через наших провайдеров&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;IP1=10.10.10.10&lt;br /&gt;IP2=20.20.20.20&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;IP - это наши внешние IP-адреса, которые нам выдали провайдеры&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;P1=10.10.10.1&lt;br /&gt;P2=20.20.20.1&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;P - это шлюзы по умолчанию у наших провайдеров&lt;br /&gt;Policy routing позволяет выполнять маршрутизацию на основе адреса источника поэтому перечислим сервера которые будут учавствовать:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;SRV11=192.168.0.11&lt;br /&gt;SRV12=192.168.0.12&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Здесь SRV11 и SRV12 - это два айпишника одного и тогоже сервера (это важно!), это позволяет одному серверу обрабатывать входящие соединения с двух провайдеров. Конечно же, существуют и другие варианты реализовать эту возможность, но я буду использовать именно айпишники, мне кажется для начала так будет проше.&lt;br /&gt;Ну а теперь самое интересное - пишем правило для маршрутизации.&lt;br /&gt;Первое что мы должны сделать это добавить свои таблицы маршрутизации, для этого необходимо отредактировать файл /etc/iproute2/rt_tables, например так:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#echo "101 T1" &gt;&gt; /etc/iproute2/rt_tables&lt;br /&gt;#echo "102 T2" &gt;&gt; /etc/iproute2/rt_tables&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Заполняем первую таблицу:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ip route add $P1_NET dev $IF1 src $IP1 table T1&lt;br /&gt;ip route add default via $P1 table T1&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Тоесть мы добавляем маршруты, в которых указываем что попасть в подсеть первого провайдера можно через первый интерфейс. Во второй строчке мы добавляем шлюз по умолчанию.&lt;br /&gt;Тоже самое и во второй:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ip route add $P2_NET dev $IF2 src $IP2 table T2&lt;br /&gt;ip route add default via $P2 table T2&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Затем разберемся с основной таблицей, которая называется "main". Ее мы видим, когда набираем ip route:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ip route add $P1_NET dev $IF1 src $IP1&lt;br /&gt;ip route add $P2_NET dev $IF2 src $IP2&lt;br /&gt;ip route add default via $P1 metric 10&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Первые две строчки аналогичны предыдущим записям, только опущено "table main". В третьей строчке задается маршрут по умолчанию с указанием метрики.&lt;br /&gt;На этом с маршрутизацией разобрались, чтобы посмотреть что у нас находится в таблице маршрутизации можно выполнить команду &lt;span style="font-style: italic;"&gt;"ip route show table &lt;имя таблицы&gt;&lt;/span&gt;". Теперь приступим к правилам. Как раз по правилам и будет приниматься решения какой пакет по какой таблице будет маршрутизироваться.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ip rule add from $IP1 table T1&lt;br /&gt;ip rule add from $IP2 table T2&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Здесь мы указали, что если адрес источника равен первому внешнему адресу, тогда маршрутизация выполняется по таблице T1. Аналогично вторая запись.&lt;br /&gt;И наконец самое интересное:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ip rule add from $SRV11 fwmark 10 table T1&lt;br /&gt;ip rule add from $SRV12 fwmark 20 table T2&lt;br /&gt;&lt;/blockquote&gt;Используя iptables мы можем маркировать интересующие нас пакеты и маршрутизировать их на основе этих меток. Собственно здесь мы добавили два правила: для пакетов, имеющих метку 10, использовать таблицу T1, для пакетов с меткой 20 - T2. Сейчас возможно не очень понятно для чего это может потребоваться, но из правил iptables все станет ясно. Для просмотра правил выполняем &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;"ip rule"&lt;/span&gt;&lt;/span&gt;, при маршрутизации они проверяются по порядку.&lt;br /&gt;Ну вот половина работы сделана осталось написать правила для iptables, об этом мы поговорим во второй части.&lt;br /&gt;&lt;br /&gt;p.s. Написано, чтобы понять самому и рассказать другим.&lt;span&gt;©&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-2411775952138345652?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/2411775952138345652/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=2411775952138345652' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/2411775952138345652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/2411775952138345652'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2009/03/2.html' title='Используем 2+ провайдера (первая часть)'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-6798256659587087732</id><published>2008-06-15T07:19:00.001-07:00</published><updated>2008-06-29T06:11:11.932-07:00</updated><title type='text'>Создаем поисковый плагин для Firefox</title><content type='html'>Firefox довольно простыми методами позволяет добавить себе новые поисковые движки. Хотя уже имеется большая их подборка на сайте &lt;a href="https://addons.mozilla.org/ru/firefox/browse/type:4"&gt;Mozilla&lt;/a&gt;, но все таки там есть не все. В этом случае можно добавить плагин самому.&lt;br /&gt;Итак изначально для этого нам понадобится шаблон. Для GET запросов подойдет такой:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;font-size:85%;color:black;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SearchPlugin&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="http://www.mozilla.org/2006/browser/search/"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns:os&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="http://a9.com/-/spec/opensearch/1.1/"&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:ShortName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:ShortName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:InputEncoding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;UTF-8&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:InputEncoding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Image&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="16"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="16"&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;data:image/x-icon;base64,&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Image&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Url&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="text/html"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;method&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="GET"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;template&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=""&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Url&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SearchPlugin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Теперь заполняем его. Для примера я сделаю плагин для запросов на Whois сервис nic.ru:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;В тег &lt;span style="font-weight: bold;"&gt;ShortName&lt;/span&gt; пишем короткое имя, оно будет указывается в строке поиска и в списке плагинов&lt;/li&gt;&lt;li&gt;В теге &lt;span style="font-weight: bold;"&gt;Description&lt;/span&gt; указываем описание плагина&lt;/li&gt;&lt;li&gt;В тег &lt;span style="font-weight: bold;"&gt;Image&lt;/span&gt; мы должны записать иконку закодированную с помощью base64 (т.к. мы не можем записывать в xml файлы бинарные данные) для этого: &lt;ol&gt;&lt;li&gt;Сначала получаем иконку (это можно сделать несколькими способами, например, скачать favicon c сайта либо сделать самому и сохранить в формате bmp размером 16х16)&lt;/li&gt;&lt;li&gt;Теперь с помощью замечательного набора утилит openssl кодируем данные в формате base64: команда будет выглядеть так "openssl enc -base64 -in favicon.ico"&lt;/li&gt;&lt;li&gt;Весь вывод команды openssl копируем в тег Image после строки "data:image/x-icon;base64,"&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;В &lt;span style="font-weight: bold;"&gt;Url&lt;/span&gt;, в атрибуте &lt;span style="font-weight: bold;"&gt;template&lt;/span&gt; указываем строку-шаблон для поиска:&lt;ol&gt;&lt;li&gt;Для этого идем на сайт&lt;/li&gt;&lt;li&gt;Пишем любой запрос, например на поиск "12345678"&lt;/li&gt;&lt;li&gt;В строке поиска видно, что шаблон поиска выглядит так: "http://www.nic.ru/whois/?query=" и в конце добавляется наша срока&lt;/li&gt;&lt;li&gt;В template указываем url запроса, а вместо строки запроса пишем {searchTerms}&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;В итоге получаем:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;font-size:85%;color:black;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SearchPlugin&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="http://www.mozilla.org/2006/browser/search/"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns:os&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="http://a9.com/-/spec/opensearch/1.1/"&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:ShortName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;NIC WhoIS&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:ShortName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;WhoIS сервис&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:InputEncoding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;UTF-8&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:InputEncoding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Image&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="16"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="16"&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAA&lt;br /&gt;AAAAAAAAAAAAAAAAAAD////////////////////////379/v3r/v3r/79+//////&lt;br /&gt;///////////////////////////////////gvX/JjB/BfADBfADBfADBfADMlC/o&lt;br /&gt;zp/////////////////////////379/MlC/BfADBfADBfADBfADBfADBfADBfADB&lt;br /&gt;fADQnD/79+/////////////9+/fkxY7gvX/YrWDUpFHgvX/gvX/kxY/hwofFhBfB&lt;br /&gt;fADBfADMlC/79+/////////k8v2Xy/ev2Pn05s/05s+v2PmXy/fK5fv////////w&lt;br /&gt;3r/FhBfBfADgvX/////58ubX6/w0mfA/n/H///////8/n/E0mfDK5fvy48j47t//&lt;br /&gt;///05s/BfADFhA/79+/iwYr///80mfA0mfDk8v3X6/w0mfA0mfD////JjCXBfAD7&lt;br /&gt;9/D////YrWDBfADozp/UpU/47t9ksfQ0mfC93vqKxfc0mfBwuPX9+vXBfADBfADj&lt;br /&gt;xY/////nzp/BfADgvX/QnD/r1q6Kxfc0mfA0mfA0mfA0mfCj0vj////UpFHBfADY&lt;br /&gt;rWD////05s/BfADgvX/YrV/gvX+j0vg0mfBhsPS12vphsPQ0mfCXy/f47t/BfADM&lt;br /&gt;lDP////////BfADgvX/kxY/UpFHK5fs0mfBstvT////x9vk0mfA/n/H////JjCXB&lt;br /&gt;fAD////////QnULs1q/379/JjCX///80mfA0mfCKxfdisfQ0mfBLpPL9+/fBfADB&lt;br /&gt;fADw3r/////euXf////////ctW/79/BYrPM0mfA0mfBLpPJ9v/a93vrq1KrBfADB&lt;br /&gt;fADctW/w3r/t27j////////////z48v////////////79/Dnzp/UpFHFhBfBfADB&lt;br /&gt;fADBfADYrV/////////////////79+/UpU/BfADBfADBfADBfADBfADBfADBfADB&lt;br /&gt;fADctW/////////////////////////////v3r/UpU/FhA/BfADBfADJjB/YrV/v&lt;br /&gt;3r////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&lt;br /&gt;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Image&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Url&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="text/html"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;method&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="GET"&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;template&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="http://www.nic.ru/whois/?query={searchTerms}"&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;os:Url&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;#60;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SearchPlugin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;#62;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Все это необходимо сохранить как xml файл, например, nic-whois.xml и скопировать в папку searchplugins своего профиля:&lt;br /&gt;Для Linux пользователей это будет "~/.mozilla/firefox/xxxxxxxx.default/searchplugins"&lt;br /&gt;Для Windows пользователей "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\searchplugins"&lt;br /&gt;xxxxxxxx - это название вашего профиля, оно у всех имеет разное значение.&lt;br /&gt;Вот и все.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.mozilla.org/en/docs/Creating_OpenSearch_plugins_for_Firefox"&gt;Здесь&lt;/a&gt; (!warning  eng) можно прочитать о том же, но более подробно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-6798256659587087732?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/6798256659587087732/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=6798256659587087732' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/6798256659587087732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/6798256659587087732'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2008/06/firefox.html' title='Создаем поисковый плагин для Firefox'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-5012397233808019987</id><published>2008-06-14T14:48:00.000-07:00</published><updated>2008-06-14T15:12:03.616-07:00</updated><title type='text'>Twit</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;Между делом написал небольшую поделку для постинга сообщений в twitter из командной строки:&lt;br /&gt;файл twit (кладем, например, в /usr/local/sbin/):&lt;br /&gt;&lt;blockquote style="color: rgb(102, 51, 0);"&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# Imports $TPASS, $TUSER&lt;br /&gt;. ~/.twit/pass&lt;br /&gt;&lt;br /&gt;curl --basic --user $TUSER:$TPASS --data status="$1" http://twitter.com/statuses/update.xml &gt; /dev/null 2&gt; /dev/null&lt;br /&gt;&lt;br /&gt;if [ $? -eq "0" ]; then&lt;br /&gt;    echo "ok";&lt;br /&gt;else&lt;br /&gt;    echo "not ok";&lt;br /&gt;fi&lt;/blockquote&gt;А файл pass кидаем в ~/.twit/ (не забываем дать права 400):&lt;br /&gt;&lt;blockquote style="color: rgb(102, 51, 0);"&gt;TUSER=YourTwitterUser&lt;br /&gt;TPASS=YourTwitterPassword&lt;/blockquote&gt;И используем:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote style="color: rgb(102, 51, 0);"&gt;$twit "Мелочь, а приятно"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-5012397233808019987?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/5012397233808019987/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=5012397233808019987' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/5012397233808019987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/5012397233808019987'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2008/06/twitter-twit-usrlocalsbin-devnull-if-eq.html' title='Twit'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-8825655087617297951</id><published>2008-06-14T14:25:00.000-07:00</published><updated>2008-06-15T07:14:53.561-07:00</updated><title type='text'>Up</title><content type='html'>Перешел на Ubuntu x64 8.04 с Ubuntu x86 7.10:&lt;br /&gt;Порадовало:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Теперь у меня в распоряжении все мои законные 4Гб оперативки&lt;/li&gt;&lt;li&gt;У меня уже сейчас браузер ФФ3 (хотя и под 7ой можно его поставить)&lt;/li&gt;&lt;li&gt;Почти не было проблем по переносу настроек&lt;/li&gt;&lt;li&gt;HiRes видео не тормозит&lt;/li&gt;&lt;li&gt;Дровишки для моей 8800gt, уже есть репозитории :-)&lt;/li&gt;&lt;li&gt;!В ФФ3 работает flash (т.к. я ставил 64-битную систему, адобовский флеш-плагин работает через типа-эмулятор 32-битного апи)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Разочаровало:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ФФ3 не поддерживает google browser sync (и возможно browser sync уже не будет развиваться, хотя поживем увидим)&lt;/li&gt;&lt;li&gt;Для ФФ3 еще не сделали TabMixPlus&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;UPD:&lt;/span&gt; &lt;strike&gt;флешка после отмонтирования в наутилусе, не меняет название (с метки диска на название флешки, как было в 7-ой версии)&lt;/strike&gt;(у отмонтированных девайсов гаснет эмулятор лампочки на иконке диска, но так как эта лампочка всего пару пикселей, то очень уж не заметно)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;UPD:&lt;/span&gt; &lt;strike&gt;я еще не нашел, где отключается автозапуск у флешек (в старом месте его нет)&lt;/strike&gt;(отключается через меню наутилуса)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Вот как-то так, я остался в выигрыше.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-8825655087617297951?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/8825655087617297951/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=8825655087617297951' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8825655087617297951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/8825655087617297951'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2008/06/ubuntu-x64-8.html' title='Up'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2527931752033667994.post-1553543834906402607</id><published>2008-06-14T14:15:00.000-07:00</published><updated>2008-06-28T07:02:59.382-07:00</updated><title type='text'>Начало</title><content type='html'>Мысли, замечания, примеры и находки по работе и не только.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2527931752033667994-1553543834906402607?l=hexbot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexbot.blogspot.com/feeds/1553543834906402607/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2527931752033667994&amp;postID=1553543834906402607' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/1553543834906402607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2527931752033667994/posts/default/1553543834906402607'/><link rel='alternate' type='text/html' href='http://hexbot.blogspot.com/2008/06/blog-post.html' title='Начало'/><author><name>Роман</name><uri>http://www.blogger.com/profile/13548703786345442062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
