<?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>The WebDevil &#187; tutorials</title>
	<atom:link href="http://dmitry.shaposhnik.name/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmitry.shaposhnik.name</link>
	<description>Enjoy development</description>
	<lastBuildDate>Mon, 24 May 2010 01:29:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OpenVZ on Ubuntu 8.10</title>
		<link>http://dmitry.shaposhnik.name/2009/03/01/openvz-on-ubuntu-810/</link>
		<comments>http://dmitry.shaposhnik.name/2009/03/01/openvz-on-ubuntu-810/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 05:47:48 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpenVZ]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=264</guid>
		<description><![CDATA[Только-что закончил эксперименты с OpenVZ на Ubuntu 8.10 (intrepid). Успешно.
Итак, задача: создать виртуальную (для начала одну) машину с Ubuntu 8.10, которая будет доступна в локальной сети. Хост-система &#8211; Ubuntu 8.10, выступает в роли роутера для локальной сети, имеет на себе DHCP-сервер. Настройки сети виртуальная машинка должна получать по DHCP, роутиться другим роутером (два провайдера). Задача [...]]]></description>
			<content:encoded><![CDATA[<p>Только-что закончил эксперименты с <a href="http://wiki.openvz.org/Main_Page">OpenVZ</a> на Ubuntu 8.10 (intrepid). Успешно.</p>
<p>Итак, задача: создать виртуальную (для начала одну) машину с Ubuntu 8.10, которая будет доступна в локальной сети. Хост-система &#8211; Ubuntu 8.10, выступает в роли роутера для локальной сети, имеет на себе DHCP-сервер. Настройки сети виртуальная машинка должна получать по DHCP, роутиться другим роутером (два провайдера). Задача осложняется тем, что из intrepid убрали поддержку виртуализации посредством OpenVZ и сделали упор на KVM. Так как имеем машинку на базе AMD Duron (900MHz) то приходится выкручиваться. Опыт, как говорится, бесценен.</p>
<p><span id="more-264"></span></p>
<p>Пару слов о состоянии виртуализации в Ubuntu: </p>
<ul>
<li>
		<a href="http://kvm.qumranet.com/kvmwiki">KVM</a>. В 8.10 сделали упор на KVM, который требует аппаратной поддержки виртуализации процессором. В данном случае процессор устаревший, так что KVM отпадает.
	</li>
<li>
		<a href="http://linux-vserver.org/Welcome_to_Linux-VServer.org">VServer</a>. Выглядит неплохо, но у меня не удалось при помощи make-kpkg собрать ядро (2.6.27-15, наиболее близкое к имеющемуся в 8.10 &#8211; 2.6.27-11).
	</li>
<li>
		<a href="http://wiki.openvz.org/Main_Page">OpenVZ</a>. Неплохое решение, но ядро с поддержкой виртуализации было в 8.04, в 8.10 от него отказались в пользу KVM.
	</li>
<li>
		<a href="http://www.xen.org/">Xen</a>. Не горел желанием использовать решения полной виртуализации, так как вируализировать оборудование мне не требовалось &#8211; это дополнительные накладные расходы. Вроде бы поддержка есть&#8230; но, как оказалось, лишь в качестве гостевой ОС (DomU &#8211; гостевая, Dom0 &#8211; хост-система). А сервером (Dom0) &#8211; увы. В 8.04 было ядро умеющее быть сервером.
	</li>
<li>
		<a href="http://www.vmware.com/">VMWare Server</a>. Также полная виртуализация, тяжеловесное решение. Но хорошо тем, что не требует хаков с ядром.
	</li>
</ul>
<p>Итогом чтения доки стала установка VMWare Server, и обошлось без косяков. Но снес его через несколько часов. </p>
<p>Во-первых, одновременно с VMWare Server нельзя пользоваться комплектом netatalk.</p>
<p>Во-вторых, теперь у VMWare Server появилась вебморда. И все бы ничего, если б не ее тормознутость. Посмотрев список процессов &#8211; sun-jre, apache-tomcat. Не знаю у кого как, но на столь небыстрой машинке вебморда тормозила и лагала безбожно. Некогда был Remote Console, но я так и не смог его найти.</p>
<p>Таким образом я пришел к OpenVZ.</p>
<p>Для начала я прописал в <tt>/etc/apt/sources.list</tt> репозиторий от 8.04:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse<br />
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse<br />
deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse</div></div>
<p>Далее &#8211; по учебнику:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install linux-openvz vzctl</div></div>
<p>Получил ядро linux-image-2.6.24-23-openvz и проверил, что пакет linux-restricted-modules-openvz потянул за собой linux-restricted-modules-common. Пользуясь aptitude установил версию 2.6.24.16-23.56.</p>
<p>Так как сервер уже работал роутером, то изменений в /etc/sysctl.conf я не вносил &#8211; более-менее с рекомендациями мои значения совпали.</p>
<p>Со странички <a href="http://wiki.openvz.org/Download/template/precreated">шаблонов</a> стянул ubuntu-8.10-x86.tar.gz:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cd /var/lib/vz/template/cache &amp;&amp; wget http://download.openvz.org/template/precreated/ubuntu-8.10-x86.tar.gz</div></div>
<p>Затем создал виртуальный контейнер</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl create 101 --ostemplate ubuntu-8.10-x86 --config vps.basic</div></div>
<p>задал виртуальной машине hostname</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl set 101 --hostname gretchin --save</div></div>
<p>и добавил запуск этой VPS вместе с запуском OpenVZ (<tt>/etc/init.d/vz</tt>)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl set 101 --onboot yes --save</div></div>
<p>Чудесно. На данный момент имеем виртуальную машину без сети. Для того чтоб она была видна в локальной сети нужно соорудить bridge. Для этого понадобится пакет bridge-utils:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install bridge-utils</div></div>
<p>Теперь подправил /etc/network/interfaces:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">auto lo<br />
iface lo inet loopback<br />
<br />
#Inet iface<br />
auto eth0<br />
iface eth0 inet dhcp<br />
<br />
#eth1 - LAN<br />
auto br0<br />
iface br0 inet static<br />
&nbsp; &nbsp; &nbsp; &nbsp; address 192.168.1.1<br />
&nbsp; &nbsp; &nbsp; &nbsp; netmask 255.255.255.0<br />
&nbsp; &nbsp; &nbsp; &nbsp; bridge_ports eth1</div></div>
<p>Заодно подправил интерфейс в /etc/default/dhcp3-server:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">INTERFACES</span>=<span style="color: #ff0000;">&quot;br0&quot;</span></div></div>
<p>Затем применил настройки:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/etc/init.d/network restart</div></div>
<p>&#8230;и лишился сети. Сам не понял что и как, но после ребута роутера и сидения перед его консолью все заработало самостоятельно. Хм.</p>
<p>Добавил сетевой интерфейс в виртуальную машину:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl set 101 --netif_add eth0 --save</div></div>
<p>В vzctl версии &gt;3.0.22 можно указать еще и bridge, к которому присоединяться. Но в ubuntu 8.10 версия 3.0.22, и поэтому пришлось дописывать небольшой скрипт. А заодно исправить мелкий баг.</p>
<p>Итак, в /etc/vz/conf/101.conf нужно дописать</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">CONFIG_CUSTOMIZED</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><br />
<span style="color: #007800;">VZHOSTBR</span>=<span style="color: #ff0000;">&quot;br0&quot;</span></div></div>
<p>Теперь создадим скрипт /etc/vz/bin/vznetaddbr</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>bin<br />
<span style="color: #c20cb9; font-weight: bold;">touch</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>vznetaddbr<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>vznetaddbr</div></div>
<p>с таким содержимым</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #666666; font-style: italic;"># /etc/vz/bin/vznetaddbr</span><br />
<span style="color: #666666; font-style: italic;"># a script to add virtual network interfaces (veth-s) in a CT to a bridge on CT0</span><br />
<br />
<span style="color: #007800;">CONFIGFILE</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vz<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$VEID</span>.conf<br />
. <span style="color: #007800;">$CONFIGFILE</span><br />
<span style="color: #007800;">VZHOSTIF</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$NETIF</span> <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^.*host_ifname=\(.*\),.*$/\1/g'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZHOSTIF</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;According to <span style="color: #007800;">$CONFIGFILE</span> CT<span style="color: #007800;">$VEID</span> has no veth interface configured.&quot;</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZHOSTBR</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;According to <span style="color: #007800;">$CONFIGFILE</span> CT<span style="color: #007800;">$VEID</span> has no bridge interface configured.&quot;</span><br />
&nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Adding interface <span style="color: #007800;">$VZHOSTIF</span> to bridge <span style="color: #007800;">$VZHOSTBR</span> on CT0 for CT<span style="color: #007800;">$VEID</span>&quot;</span><br />
<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ifconfig</span> <span style="color: #007800;">$VZHOSTIF</span> <span style="color: #000000;">0</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$VZHOSTIF</span><span style="color: #000000; font-weight: bold;">/</span>proxy_arp<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$VZHOSTIF</span><span style="color: #000000; font-weight: bold;">/</span>forwarding<br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>brctl addif <span style="color: #007800;">$VZHOSTBR</span> <span style="color: #007800;">$VZHOSTIF</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></div></div>
<p>и затем создадим /etc/vz/vznet.conf со следующим содержимым:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #007800;">EXTERNAL_SCRIPT</span>=<span style="color: #ff0000;">&quot;/etc/vz/bin/vznetaddbr&quot;</span></div></div>
<p>Теперь про баг (устраненный в 3.0.23): в процессе старта при наличии vznet.conf вызывается скрипт /usr/sbin/vznetcfg. Так как в debian/ubuntu используется dash (/bin/sh), то там по чистой случайности нету команды <tt>source</tt>, а оттого ошибка появляется на строке 20:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">source</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span></div></div>
<p>Решение &#8211; заменить на</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> .<span style="color: #ff0000;">&quot;<span style="color: #007800;">$VZNETCFG</span>&quot;</span></div></div>
<p>Заменить можно через sed (I&#8217;m loving it!):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>vznetcfg <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>vznetcfg.orig<br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">'s/source &quot;$VZNETCFG&quot;/\. &quot;$VZNETCFG&quot;/'</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>vznetcfg</div></div>
<p>Соответственно теперь выполним</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl stop <span style="color: #000000;">101</span><br />
vzctl start <span style="color: #000000;">101</span><br />
brctl show</div></div>
<p>В конце мы должны увидеть нечто похожее на veth101.0:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bridge name &nbsp; &nbsp; bridge id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STP enabled &nbsp; &nbsp; interfaces<br />
br0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8000.00024494a7ac &nbsp; &nbsp; &nbsp; no &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;eth1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; veth101.0</div></div>
<p>Если все удалось &#8211; то можно смело идти в виртуальную машину</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vzctl enter <span style="color: #000000;">101</span></div></div>
<p>и делать все чего хочется.</p>
<p>По поводу роутинга через другого провайдера: подсмотрев в <tt>ifconfig -a</tt> внутри виртуальной машинки мак-адрес сетевого интерфейса достаточно в <tt>/etc/dhcp3/dhcpd.conf</tt> на хост-машине (я же говорил &#8211; она еще и роутер) прописать что-то вроде:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">host gretchin {<br />
&nbsp; &nbsp; &nbsp; &nbsp; hardware ethernet 00:18:51:80:8A:D9;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fixed-address 192.168.1.101;<br />
&nbsp; &nbsp; &nbsp; &nbsp; server-name &quot;gretchin&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; option routers 192.168.1.2;<br />
}</div></div>
<p>где 192.168.1.2 &#8211; второй роутер в той же сети.</p>
<p>По материалам:</p>
<ol>
<li>
		<a href="https://help.ubuntu.com/community/OpenVZ#8.04%20Hardy">help.ubuntu.com</a>
	</li>
<li>
		<a href="http://ubuntuforums.org/showthread.php?p=3798970">ubuntuforums.org</a>
	</li>
<li>
		<a href="http://www.howtoforge.com/openvz_debian_vps_p2">Howtoforge</a>
	</li>
<li>
		<a href="http://forum.openvz.org/index.php?t=msg&#038;goto=32687&#038;&#038;srch=meminfo#msg_32687">forum.openvz.org</a>
	</li>
<li>
		<a href="http://en.gentoo-wiki.com/wiki/OpenVZ_VLAN">Gentoo Wiki</a>
	</li>
<li>
		<a href="http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf">OpenVZ-Users-Guide.pdf</a>
	</li>
</ol>
<p>PS: не забывайте про GNU Screen. Это избавляет от многих проблем, особенно при конфигурации сети.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/03/01/openvz-on-ubuntu-810/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>LVM Rocks</title>
		<link>http://dmitry.shaposhnik.name/2009/03/01/lvm-rocks/</link>
		<comments>http://dmitry.shaposhnik.name/2009/03/01/lvm-rocks/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 23:18:18 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[webtech]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=251</guid>
		<description><![CDATA[Давно заметил что в Ubuntu (server edition) во время инсталляции начали предлагать использовать LVM. Но я все не решался поставить production на него. Затем пообщался со теми кто его использовал, почитал доку &#8211; и последний год стал его использовать, так как постиг скрытую в нем мощь  

Допустим, у нас есть простенький бюджетный сервер. Мы [...]]]></description>
			<content:encoded><![CDATA[<p>Давно заметил что в Ubuntu (server edition) во время инсталляции начали предлагать использовать LVM. Но я все не решался поставить production на него. Затем пообщался со теми кто его использовал, почитал доку &#8211; и последний год стал его использовать, так как постиг скрытую в нем мощь <img src='http://dmitry.shaposhnik.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-251"></span></p>
<p>Допустим, у нас есть простенький бюджетный сервер. Мы развернули новое приложение, и его база стала расти весьма стремительно. Итого &#8211; база, веб-файлы и система живут на одном физическом диске.</p>
<p>Был куплен диск WD Razor, и на него перенесли базу. Нагрузка диска (<tt>iostat -x -m 1</tt>) составила 1-2%. Решено перенести туда же и веб-файлы, однако решение это пришло лишь через пару дней. Так что получилось наглядно продемонстрировать возможности LVM.</p>
<h3>Part1. Creating&#8230;</h3>
<p>Когда поставили разор на нем создали один раздел &#8211; LVM:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># fdisk -l</span><br />
<br />
Disk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb: <span style="color: #000000;">74.3</span> GB, <span style="color: #000000;">74355769344</span> bytes<br />
<span style="color: #000000;">255</span> heads, <span style="color: #000000;">63</span> sectors<span style="color: #000000; font-weight: bold;">/</span>track, <span style="color: #000000;">9039</span> cylinders<br />
Units = cylinders of <span style="color: #000000;">16065</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000;">512</span> = <span style="color: #000000;">8225280</span> bytes<br />
Disk identifier: 0x00000000<br />
<br />
&nbsp; &nbsp;Device Boot &nbsp; &nbsp; &nbsp;Start &nbsp; &nbsp; &nbsp; &nbsp; End &nbsp; &nbsp; &nbsp;Blocks &nbsp; Id &nbsp;System<br />
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">1</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">9039</span> &nbsp; &nbsp;<span style="color: #000000;">72605736</span> &nbsp; 8e &nbsp;Linux LVM</div></div>
<p>Пару слов об организации LVM.<br />
<strong>Уровень 1</strong>: volume group (vg). Это наивысший уровень абстракции, объединяющий в себе logical volumes и physical volumes.<br />
<strong>Уровень 2</strong>: physical volume (pv). Это некое блочное устройство, способное хранить данные (HDD, RAID, &#8230;)<br />
<strong>Уровень 3</strong>: logical volume (lv). Это эквивалент раздела на жестком диске.</p>
<p>Таким образом в группу добавляются физические тома (pv), и потом во всем этом пространстве свободного места создаются разделы (lv), на которых уже создается файловая система.</p>
<p>Итак, сначала создавался pv:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">pvcreate <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1</div></div>
<p>Затем vg:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vgcreate sys_vg <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1</div></div>
<p>И затем на все свободное место указанного pv (/dev/sdb1) создали lv с именем var_lib_mysql:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lvcreate <span style="color: #660033;">-L</span> <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span>PVS -nvar_lib_mysql sys_vg <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1</div></div>
<p>Дело за малым:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkreiserfs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql stop<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> mysql:mysql <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql start</div></div>
<p>Вот собственно и почти все. Последний штрих &#8211; прописать монтирование раздела в fstab, дабы это происходило при загрузке автоматом. Можно скучно сделать это через blkid, увидеть там нужный UUID (например, f6946e54-c7d6-4688-8fac-05dcb1bf9973), скопировать его, открыть /etc/fstab и вставить туда строку вида:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">UUID</span>=f6946e54-c7d6-<span style="color: #000000;">4688</span>-8fac-05dcb1bf9973 &nbsp; <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql reiserfs defaults <span style="color: #000000;">0</span> <span style="color: #000000;">2</span></div></div>
<p>а можно сделать так:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>UUID=<span style="color: #780078;">`blkid | grep sys_vg-var_lib_mysql | sed -r 's/.*UUID=&quot;([^&quot;]*).*/\1/i'`</span><span style="color: #000099; font-weight: bold;">\t</span>/var/lib/mysql reiserfs defaults 0 2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>fstab</div></div>
<p>Да, если сделать umount /var/lib/mysql &#038;&#038; mount /var/lib/mysql до ребута &#8211; то /dev/disk/by-uuid/f6946e54-c7d6-4688-8fac-05dcb1bf9973 (или какой там получится) там еще не будет. Для того чтоб появился до ребута надо перезапустить udev:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>udev restart</div></div>
<h3>Part2. Resizing&#8230;</h3>
<p>Как я говорил раньше, с опозданием пришла мысль о том, что неплохо бы вынести и статические файлы на этот же винт. И сделать это совсем просто! Для этого от того lv что был создан раньше (и именуется var_lib_mysql) откусим немного места.</p>
<p>Сначала остановим все службы (говорят, reiserfs увеличивается/уменьшается без проблем налету, но я этого пока не пробовал на себе):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql stop<br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql</div></div>
<p>Затем уменьшим файловую систему, а затем и lv на 20ГБ:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">resize_reiserfs <span style="color: #660033;">-s-20G</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql<br />
lvreduce <span style="color: #660033;">-L-20G</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql</div></div>
<p>На всякий случай я предпочел проверить фс на ошибки (а вдруг!):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">reiserfsck <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql</div></div>
<p>Ну и возвращаем обратно MySQL:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql start</div></div>
<p>Теперь создадим lv для веб-файлов, и так как их намного меньше 20ГБ, я решил оставить 5ГБ про запас, никому их не присвоив. Потом можно будет налету добавить туда где закончится место.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lvcreate <span style="color: #660033;">-L</span> 15G -nvar_www sys_vg<br />
mkreiserfs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_www</div></div>
<p>Далее &#8211; перенос файлов:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx stop<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 stop<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_www <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_www <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 start<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx start</div></div>
<p>И опять не забываем про fstab:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>UUID=<span style="color: #780078;">`blkid | grep sys_vg-var_www | sed -r 's/.*UUID=&quot;([^&quot;]*).*/\1/i'`</span><span style="color: #000099; font-weight: bold;">\t</span>/var/lib/mysql reiserfs defaults 0 2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>fstab</div></div>
<p>По материалам:</p>
<ol>
<li><a href="http://wiki.linuxquestions.org/wiki/LVM#example">http://wiki.linuxquestions.org/wiki/LVM#example</a></li>
<li><a href="http://www.tldp.org/HOWTO/LVM-HOWTO/reducelv.html">http://www.tldp.org/HOWTO/LVM-HOWTO/reducelv.html</a></li>
</ol>
<p>PS: после изменения размера мог измениться UUID для lv var_lib_mysql, хотя я и не уверен в этом. Но проверить не помешает.<br />
PS2: если работаете удаленно &#8211; не забывайте про <a href="http://www.gnu.org/software/screen/screen.html">screen</a>.<br />
PS3: писалось по памяти, так что могут быть некоторые неточности. Тупой копипаст без вовлечения мыслительного процесса чреват боком. Я предупредил <img src='http://dmitry.shaposhnik.name/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/03/01/lvm-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git, gitosis, tailor, and bzr</title>
		<link>http://dmitry.shaposhnik.name/2008/12/09/git-gitosis-tailor-and-bzr/</link>
		<comments>http://dmitry.shaposhnik.name/2008/12/09/git-gitosis-tailor-and-bzr/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 22:45:15 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bzr]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=248</guid>
		<description><![CDATA[git
До общения с Oleganza я не видел у git каких-либо ярких преимуществ перед bzr.
И, наверное, не увидел бы, если бы не Олег. 
Первое что было самым необычным &#8211; git полностью децентрализованый. И привычный svn-like workflow тут не работает. Надо было привыкать к branch-style.
Второе &#8211; это то, что команды с теми же названиями что и у [...]]]></description>
			<content:encoded><![CDATA[<h2>git</h2>
<p>До общения с Oleganza я не видел у <a href="http://git.or.cz">git</a> каких-либо ярких преимуществ перед <a href="http://bazaar-vcs.org">bzr</a>.<br />
И, наверное, не увидел бы, если бы не Олег. </p>
<p>Первое что было самым необычным &#8211; git полностью децентрализованый. И привычный svn-like workflow тут не работает. Надо было привыкать к branch-style.</p>
<p>Второе &#8211; это то, что команды с теми же названиями что и у svn имеют другой смысл.</p>
<p>Жутко понравилось что ветки git держит в себе, то есть не надо плодить по 3-4 папки для разных фичей.</p>
<h2>gitosis</h2>
<p>Также я задумался о совместной работе. <a href="http://github.com">github</a> &#8211; это, конечно, хорошо, но у меня уже есть <a href="http://redmine.org">багтракер</a> понимающий git. Отчего бы не попробовать git на своем сервере?</p>
<p>Был заведен юзерь git без пароля</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> adduser <span style="color: #660033;">--shell</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sh</span> <span style="color: #660033;">--gecos</span> <span style="color: #ff0000;">'git version control'</span> <span style="color: #660033;">--disabled-password</span> <span style="color: #660033;">--home</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">git</span> <span style="color: #c20cb9; font-weight: bold;">git</span></div></div>
<p>поставлен gitosis</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> gitosis</div></div>
<p>сделаны небольшие правки его сорсов (дело в том, что по умолчанию gitosis создает репо с маской 0750, мне же надо было с 0755 &#8211; чтоб www-data мог его читать):<br />
правим</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>python-support<span style="color: #000000; font-weight: bold;">/</span>python2.5<span style="color: #000000; font-weight: bold;">/</span>gitosis-<span style="color: #000000;">0.2</span>-py2.5.egg<span style="color: #000000; font-weight: bold;">/</span>gitosis<span style="color: #000000; font-weight: bold;">/</span>repository.py</div></div>
<p>и заменяем 0750 на 0755.</p>
<p>Подробнее описано в <a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way">блоге разработчика gitosis</a>.</p>
<h2>tailor and bzr</h2>
<p>Когда все взлетело с git, решил попробовать отконвертировать при помощи утилиты <a href="http://progetti.arstecnica.it/tailor">tailor</a> старые репо из bzr в git.<br />
Конфиг получился примерно такой (замечания приветствуются):</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>DEFAULT<span style="">&#93;</span></span><br />
<span style="color: #000099;">verbose</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> True</span><br />
<br />
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>project<span style="">&#93;</span></span><br />
<span style="color: #000099;">target</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> git:target</span><br />
<span style="color: #000099;">start-revision</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> INITIAL</span><br />
<span style="color: #000099;">root-directory</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /home/dm/tmp/bzr2git</span><br />
<span style="color: #000099;">state-file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> tailor.state</span><br />
<span style="color: #000099;">source</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> bzr:source</span><br />
<span style="color: #000099;">subdir</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> bzr2git.tmp</span><br />
<br />
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>bzr:source<span style="">&#93;</span></span><br />
<span style="color: #000099;">repository</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /home/dm/bzr/BZR_PROJECT_HERE</span><br />
<br />
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>git:target<span style="">&#93;</span></span><br />
<span style="color: #000099;">repository</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /home/dm/tmp/bzr2git/tmp/.git</span></div></div>
<p>и после запуска</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">tailor bzr2git.conf</div></div>
<p>в /home/dm/tmp/bzr2git/bzr2git.tmp появляется вполне живой git-репозитарий. Его я уже стягивал к себе и вливал в gitosis от себя.</p>
<h2>Примечание</h2>
<p>git не отслеживает пустые папки, и в процессе конвертации теряются &#8220;log&#8221;, &#8220;tmp&#8221;, etc&#8230; Чтоб отслеживал достаточно</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> log<br />
<span style="color: #c20cb9; font-weight: bold;">touch</span> log<span style="color: #000000; font-weight: bold;">/</span>.empty</div></div>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/12/09/git-gitosis-tailor-and-bzr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migration to PowerDNS</title>
		<link>http://dmitry.shaposhnik.name/2008/07/11/migration-to-powerdns/</link>
		<comments>http://dmitry.shaposhnik.name/2008/07/11/migration-to-powerdns/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 22:14:10 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[PowerDNS]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=183</guid>
		<description><![CDATA[Наверняка многие видели сообщение об уязвимости в DNS. Во многих дистрибах линукса весьма скоро появились секьюрити-патчи, которые эту уязвимость исправляли. Уязвимость, может, и не слишком уж страшная, но она напомнила мне о PowerDNS, который я с интересом рассматривал в начале 2008го года.
Расматривал я его в основном из-за родной интеграции с MySQL. Мне весьма понравилось как [...]]]></description>
			<content:encoded><![CDATA[<p>Наверняка многие видели <a href="http://www.opennet.ru/opennews/art.shtml?num=16872">сообщение об уязвимости в DNS</a>. Во многих дистрибах линукса весьма скоро появились секьюрити-патчи, которые эту уязвимость исправляли. Уязвимость, может, и не слишком уж страшная, но она напомнила мне о <a href="http://www.powerdns.com/">PowerDNS</a>, который я с интересом рассматривал в начале 2008го года.</p>
<p>Расматривал я его в основном из-за родной интеграции с MySQL. Мне весьма понравилось как она реализована. Однако у меня были уже рабочие конфиги BIND9, и я просто ленился испытать PowerDNS на собственной шкуре.</p>
<p>А зря боялся, как оказалось. Упомянутая уязвимость не задела PowerDNS, и этим мое внимание было вновь привлечено к нему. И переход таки состоялся.<br />
<span id="more-183"></span></p>
<h2>Что дал переход</h2>
<p>Во-первых, я получил возможность использовать найденый вчера <a href="https://www.poweradmin.org/trac/">poweradmin</a>. Штука оказалась немного неуклюжая, но порадовала меня тем, что не надо более ковыряться в конфигах.</p>
<p>Во-вторых, при изменении/добавлении/удалении записей в зоне маркер (Serial) в SOA меняется сам. Мелочь, но приятно.</p>
<p>В-третьих, теперь можно давать доступ к редактированию зон другим людям.</p>
<p>Вот то, что бросилось мне в глаза. А теперь более подробно о самом переходе.</p>
<h2>Процесс перехода</h2>
<p>PowerDNS состоит из двух компонентов &#8211; основной сервер имен и преобразователь имен. Основной сервер имен выдает информацию только о тех записях, которые в нем есть. Преобразователь имен же помогает резолвить то, чего нету непосредственно у данного сервера.</p>
<p>Итак, понадобится выполнить следующие действия:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install pdns-server pdns-recursor pdns-backend-mysql</div></div>
<p>Желательно во время установки стопнуть bind, потому как dpkg будет ругаться из-за неудачного запуска демона.</p>
<p>После установки можно тушить pdns и стартовать bind до окончания миграции.</p>
<p>В конфиге /etc/powerdns/pdns.conf надо сделать следующие изменения:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
#allow-recursion=127.0.0.1<br />
...<br />
launch=gmysql<br />
...<br />
local-address=_real_external_ip_here_<br />
...<br />
recursor=127.0.0.1<br />
...</div></div>
<p>Этим мы будем передавать все неизвестные запросы от основного сервера к recursor&#8217;у.<br />
У рекурсора в конфиге стоит local-address=127.0.0.1 по умолчанию, если мне не изменяет память.</p>
<p>В /etc/powerdns/pdns.d/pdns.local вписываем</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gmysql-host=localhost<br />
gmysql-port=3306<br />
gmysql-dbname=_username_here_<br />
gmysql-user=_dbname_here_<br />
gmysql-password=_dbpass_here_<br />
gmysql-socket=/var/run/mysqld/mysqld.sock</div></div>
<p>Проверяем, есть ли нужная БД и пользователь, и может ли он подключиться к базе.</p>
<p>Пример начальной базы есть в /usr/share/doc/pdns-backend-mysql.<br />
Советую туда сразу добавить в конец</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> records <span style="color: #993333; font-weight: bold;">ADD</span> CONSTRAINT <span style="color: #ff0000;">`records_ibfk_1`</span> <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`domain_id`</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> <span style="color: #ff0000;">`domains`</span><br />
<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> CASCADE;</div></div>
<p>При его тестировании было замечено что работает он бытрее с таблицами InnoDB. Наверное, из-за большого кеша у этого типа таблиц. Я не стал менять таблицы на MyISAM, однако добавил при создании таблиц <tt>default collate utf8_general_ci</tt> &#8211; для надежности. </p>
<p>Потом надо втянуть записи имеющиеся у BIND. Для этого в комплекте есть утилита <a href="http://doc.powerdns.com/migration.html">zone2sql</a>. Рекомендую использовать ее с ключиком <tt>--gmysql</tt> &#8211; так она правильнее работает, создавая записи и в domains и в records.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">zone2sql --named-conf=/etc/bind/named.conf --gmysql &gt; import.sql</div></div>
<p>и вначале выкосил все до основных зон. Потом скормил это mysql&#8217;ю. Также можно во всех <a href="http://doc.powerdns.com/types.html#AEN4582">записях SOA</a> поставить Serial в 0 &#8211; так PowerDNS будет вычислять его автоматически.</p>
<p>Пробуем стопнуть bind9 и запустить pdns и pdns-recursor. Если все правильно &#8211; все взлетит, и в сислоге будут сообщения о состоянии полета.</p>
<p>Проверить можно набрав</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nslookup - dns.yourserver.com</div></div>
<p>и попробовать ввести что-то существующее на сервере и что-то несуществующее.<br />
У меня основной сервер без recursor&#8217;а не хотел отдавать записи типа CNAME при просмотре nslookup&#8217;ом. Пришлось установит recursor и настроить их общение.</p>
<p>Ну а установка <a href="https://www.poweradmin.org/trac/">poweradmin</a> для управления сервером не должна вызвать трудностей вообще.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/07/11/migration-to-powerdns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Two ISP and LAN using iproute2</title>
		<link>http://dmitry.shaposhnik.name/2008/05/20/two-isp-and-lan-using-iproute2/</link>
		<comments>http://dmitry.shaposhnik.name/2008/05/20/two-isp-and-lan-using-iproute2/#comments</comments>
		<pubDate>Tue, 20 May 2008 02:41:24 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=179</guid>
		<description><![CDATA[Для меня давно уже возникала необходимость подружить сервер с двумя провайдерами и локальной сетью. И вот вчера проблема стала весьма актуальной.
Итак, имеем:
eth0 &#8211; 192.168.0.0/24 &#8211; LAN
eth1 &#8211; 13.13.13.13/24 &#8211; ISP#1
eth2 &#8211; 6.6.6.6/24 &#8211; ISP#2
ISP#2 отдает IP через DHCP
ISP#1 &#8211; статика (на самом деле DHCP но удалось договориться на статику)
LAN &#8211; его надо NAT&#8217;ить в мир [...]]]></description>
			<content:encoded><![CDATA[<p>Для меня давно уже возникала необходимость подружить сервер с двумя провайдерами и локальной сетью. И вот вчера проблема стала весьма актуальной.</p>
<p>Итак, имеем:<br />
eth0 &#8211; 192.168.0.0/24 &#8211; LAN<br />
eth1 &#8211; 13.13.13.13/24 &#8211; ISP#1<br />
eth2 &#8211; 6.6.6.6/24 &#8211; ISP#2</p>
<p>ISP#2 отдает IP через DHCP<br />
ISP#1 &#8211; статика (на самом деле DHCP но удалось договориться на статику)<br />
LAN &#8211; его надо NAT&#8217;ить в мир через ISP#1 (кое-что можно отправлять и через ISP#2, это будет показано).</p>
<p>Так как при использовании dhclient сетевые настройки не заменялись получеными мы это запретим в файле /etc/dhcp3/dhclient.conf:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">request subnet-mask, broadcast-address, time-offset, routers;</div></div>
<p>Отлично. Теперь мы получим лишь IP и шлюз. Теперь в файле /etc/iproute2/rt_tables добавим таблицу маршрутизации ISP2:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">2 &nbsp; &nbsp; &nbsp; ISP2</div></div>
<p>Теперь надо заносить получаемые значения шлюза в эту таблицу, и определить маршрут, по которому пакеты будут попадать в эту таблицу. Для этого напишем два скрипта:<br />
/etc/dhcp3/dhclient-enter-hooks.d/duallink</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> x<span style="color: #007800;">$reason</span> == <span style="color: #ff0000;">'xBOUND'</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route flush table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-F</span> PREROUTING <span style="color: #660033;">-t</span> mangle<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route flush cache<br />
&nbsp; &nbsp; &nbsp; &nbsp; ip rule show <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> ISP2 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> <span style="color: #660033;">-r</span> line ; <span style="color: #000000; font-weight: bold;">do</span> &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ip rule del <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$line</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">':'</span> -f2<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">prefix</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$new_ip_address</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> . <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span>-<span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> x<span style="color: #007800;">$prefix</span> == <span style="color: #ff0000;">'x192.168'</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#ISP1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add 13.13.13.13<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> dev eth1 table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> dev eth1 table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#LAN</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> dev eth0 table ISP2<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#ISP2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip rule add from <span style="color: #007800;">$new_ip_address</span> table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip rule add fwmark 0x2 table ISP2<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#А тут можно пометить пакеты, которые уйдут через ISP2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-I</span> PREROUTING <span style="color: #660033;">-t</span> mangle <span style="color: #660033;">-i</span> eth0 <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">443</span> <span style="color: #660033;">-j</span> MARK <span style="color: #660033;">--set-mark</span> <span style="color: #000000;">2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-I</span> PREROUTING <span style="color: #660033;">-t</span> mangle <span style="color: #660033;">-i</span> eth0 <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> &nbsp;<span style="color: #660033;">-j</span> MARK <span style="color: #660033;">--set-mark</span> <span style="color: #000000;">2</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #007800;">isp2_gateway</span>=<span style="color: #007800;">$new_routers</span><br />
<span style="color: #007800;">new_routers</span>=<span style="color: #ff0000;">&quot;&quot;</span></div></div>
<p>/etc/dhcp3/dhclient-exit-hooks.d/duallink</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> x<span style="color: #007800;">$reason</span> == <span style="color: #ff0000;">'xBOUND'</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">my_new_network</span>=<span style="color: #000000; font-weight: bold;">`</span>ipcalc <span style="color: #660033;">-n</span> <span style="color: #007800;">$new_ip_address</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$new_subnet_mask</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> Network <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-b</span> <span style="color: #000000;">12</span>-<span style="color: #000000;">32</span><span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add <span style="color: #007800;">$my_new_network</span> dev <span style="color: #007800;">$interface</span> table ISP2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>ip route add default via <span style="color: #007800;">$isp2_gateway</span> table ISP2<br />
<span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>Да, не забудьте установить <b>ipcalc</b>!</p>
<p>Собственно, все. Теперь осталось воткнуть ISP#2 и посмотреть на получившуюся картину командами</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ip rule show<br />
ip route show<br />
ip route show table ISP2</div></div>
<p>статья собрана по материалам<br />
<a href="https://help.ubuntu.com/community/InternetAndNetworking/DualHomedGatewayDHCP">Configuring several Internet connections on the same Computer</a><br />
<a href="http://lartc.org/howto/lartc.rpdb.html">Rules &#8211; routing policy database</a><br />
<a href="http://linux-ip.net/html/tools-ip-route.html">Appendix D. IP Route Management</a><br />
и других перелистаных в процессе отладки.</p>
<p>На убунтовской вики упоминается /usr/local/sbin/flush_rules.pl, но что внутри этого скрипта &#8211; автор умолчал.</p>
<p>Все замечания приветствуются!</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/05/20/two-isp-and-lan-using-iproute2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux pxe boot</title>
		<link>http://dmitry.shaposhnik.name/2008/02/02/linux-pxe-boot/</link>
		<comments>http://dmitry.shaposhnik.name/2008/02/02/linux-pxe-boot/#comments</comments>
		<pubDate>Sat, 02 Feb 2008 04:12:39 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/2008/02/02/linux-pxe-boot/</guid>
		<description><![CDATA[Когда-то давным-давно я работал админом-помощником в университете. И были у нас компы без cdrom, со всем встроеным. И надо было туда поставить форточки и весь софт для учебных классов. Столкнулся с проблемой =) USB-CDROM тогда взять было негде, и было две мысли &#8211; USB boot и PXE boot. Последнее &#8211; это сетевая загрузка, многие интегрированые [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то давным-давно я работал админом-помощником в университете. И были у нас компы без cdrom, со всем встроеным. И надо было туда поставить форточки и весь софт для учебных классов. Столкнулся с проблемой =) USB-CDROM тогда взять было негде, и было две мысли &#8211; USB boot и PXE boot. Последнее &#8211; это сетевая загрузка, многие интегрированые сетевые чипы могут ее осилить, остальным же (это платки за 5$) нужен чип с биосом. С первым с горем пополам что-то получалось, а со вторым &#8211; нет. А загрузившись в линух можно было уже развернуть образ на винт&#8230;</p>
<p>Так вот подобная задача встала передо мной снова &#8211; массовая установка FreeBSD с одинаковым конфигом. Ну, лишь с небольшими поправками.<br />
<span id="more-169"></span><br />
Погуглив я наткнулся на <a href="http://www.plop.at/en/ploplinux.html">PLoP Linux</a> &#8211; дистрибутивчик напичкан всем полезным, о чем можно подумать &#8211; ntfs-3g, partimage, возможность бута откуда угодно.<br />
Попробовал сделать PXE-boot &#8211; все-равно есть сервер, который раздает домашние директории по NFS.<br />
Сразу скажу &#8211; я ставил tftpd, но он не поддерживает операцию tsize &#8211; потому для PXE-boot не годится. Но для этого подходит tftpd-hpa.</p>
<p>Итак, устанавливаем tftpd-hpa:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> tftp-hpa tftpd-hpa</div></div>
<p>и потом он скажет что добавил в конфиг inetd. Я же предпочитаю xinetd, и для него конфиг приходится подправить.<br />
Да, и корень tftp-сервера я делаю не в /var/lib/tftpboot а в /tftpboot:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># cat /etc/xinetd.d/tftp </span><br />
service tftp<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; socket_type &nbsp; &nbsp; = dgram<br />
&nbsp; &nbsp; &nbsp; &nbsp; protocol &nbsp; &nbsp; &nbsp; &nbsp;= udp<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">wait</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; user &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= root<br />
&nbsp; &nbsp; &nbsp; &nbsp; server &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>in.tftpd<br />
&nbsp; &nbsp; &nbsp; &nbsp; server_args &nbsp; &nbsp; = <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>tftpboot<br />
&nbsp; &nbsp; &nbsp; &nbsp; disable &nbsp; &nbsp; &nbsp; &nbsp; = no<br />
&nbsp; &nbsp; &nbsp; &nbsp; per_source &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">11</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cps &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000;">100</span> <span style="color: #000000;">2</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Вот так. Кстати, конфиг без правок подходит и для tftpd, но повторюсь &#8211; tftpd не работает для PXE-boot.</p>
<p>Далее &#8211; у нас должен быть установлен DHCP-сервер. При загрузке PXE запросит у него IP и вместе с тем получит параметры для дальнейшей загрузки. А из параметров к нему надо добавить вот что:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
allow booting;<br />
allow bootp;<br />
...<br />
subnet 192.168.0.0 netmask 255.255.255.0 <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; ...<br />
&nbsp; next-server 192.168.0.1;<br />
&nbsp; filename <span style="color: #ff0000;">&quot;/ploplinux/pxelinux.0&quot;</span>;<br />
&nbsp; ...<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Ок, получим файл для загрузки и нужно будет грузить откуда-то систему. Plop-linux позволяет загружать ее с smb и nfs. NFS показался мне более предпочтительным, и я использовал его.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># cat /etc/exports</span><br />
...<br />
<span style="color: #000000; font-weight: bold;">/</span>tftpboot<span style="color: #000000; font-weight: bold;">/</span>ploplinux <span style="color: #7a0874; font-weight: bold;">&#40;</span>ro<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Ок, теперь нужно положить все нужные файлы в /tftpboot/ploplinux. Вот эти файлы:<br />
<a href="http://download.plop.at/files/ploplinux/ploplinux-v3.7.1.tar.gz">http://download.plop.at/files/ploplinux/ploplinux-v3.7.1.tar.gz</a><br />
<a href="http://download.plop.at/plop/ploplinux/ploplinux-v3.7.1-pxeboot.tgz">http://download.plop.at/plop/ploplinux/ploplinux-v3.7.1-pxeboot.tgz</a><br />
Да-да, будет структура вида:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># ls -l /tftpboot/ploplinux/</span><br />
total <span style="color: #000000;">5345</span><br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root &nbsp; &nbsp; <span style="color: #000000;">847</span> <span style="color: #000000;">2008</span>-01-<span style="color: #000000;">25</span> <span style="color: #000000;">14</span>:<span style="color: #000000;">43</span> boot.msg<br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root <span style="color: #000000;">3299016</span> <span style="color: #000000;">2008</span>-01-<span style="color: #000000;">25</span> <span style="color: #000000;">13</span>:<span style="color: #000000;">58</span> bzimage<br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root <span style="color: #000000;">1960996</span> <span style="color: #000000;">2008</span>-01-<span style="color: #000000;">25</span> <span style="color: #000000;">16</span>:02 initrfs.gz<br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root &nbsp; <span style="color: #000000;">94356</span> <span style="color: #000000;">2004</span>-<span style="color: #000000;">11</span>-<span style="color: #000000;">11</span> <span style="color: #000000;">17</span>:00 memtest<br />
drwxr-xr-x <span style="color: #000000;">3</span> root root &nbsp; &nbsp; <span style="color: #000000;">288</span> <span style="color: #000000;">2008</span>-01-<span style="color: #000000;">25</span> 09:07 ploplinux<br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root &nbsp; <span style="color: #000000;">42652</span> <span style="color: #000000;">2008</span>-01-<span style="color: #000000;">25</span> <span style="color: #000000;">13</span>:07 plpbt.com<br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root &nbsp; <span style="color: #000000;">40113</span> <span style="color: #000000;">2008</span>-01-<span style="color: #000000;">25</span> <span style="color: #000000;">13</span>:09 plpinst.com<br />
drwxr-xr-x <span style="color: #000000;">3</span> root root &nbsp; &nbsp; &nbsp;<span style="color: #000000;">96</span> <span style="color: #000000;">2007</span>-<span style="color: #000000;">12</span>-<span style="color: #000000;">10</span> 09:02 pluspacks<br />
<span style="color: #660033;">-rw-r--r--</span> <span style="color: #000000;">1</span> root root &nbsp; <span style="color: #000000;">13940</span> <span style="color: #000000;">2007</span>-06-<span style="color: #000000;">10</span> <span style="color: #000000;">17</span>:<span style="color: #000000;">51</span> pxelinux.0<br />
drwxr-xr-x <span style="color: #000000;">2</span> root root &nbsp; &nbsp; <span style="color: #000000;">152</span> <span style="color: #000000;">2008</span>-02-01 <span style="color: #000000;">20</span>:<span style="color: #000000;">49</span> pxelinux.cfg</div></div>
<p>В файле /tftpboot/ploplinux/pxelinux.cfg/default нужно внести некоторые правки:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># cat /tftpboot/ploplinux/pxelinux.cfg/default </span><br />
default linux<br />
display boot.msg<br />
timeout <span style="color: #000000;">100</span><br />
prompt <span style="color: #000000;">1</span><br />
<br />
label linux<br />
kernel bzimage<br />
append <span style="color: #007800;">initrd</span>=initrfs.gz <span style="color: #007800;">vga</span>=<span style="color: #000000;">1</span> <span style="color: #007800;">nfsmount</span>=192.168.0.1:<span style="color: #000000; font-weight: bold;">/</span>tftpboot<span style="color: #000000; font-weight: bold;">/</span>ploplinux<br />
<br />
<br />
label linuxfb<br />
kernel bzimage<br />
append <span style="color: #007800;">initrd</span>=initrfs.gz <span style="color: #007800;">vga</span>=0x318 <span style="color: #007800;">nfsmount</span>=192.168.0.1:<span style="color: #000000; font-weight: bold;">/</span>tftpboot<span style="color: #000000; font-weight: bold;">/</span>ploplinux<br />
<br />
label hd<br />
localboot 0x80<br />
append -<br />
<br />
label plp<br />
kernel plpbt.com<br />
append -<br />
<br />
label plpinst<br />
kernel plpinst.com<br />
append -<br />
<br />
label memtest<br />
kernel memtest</div></div>
<p>Собственно, правки &#8211; указание IP сервера, с которого все потянется.<br />
Теперь, если все правильно сделано, удаленный компьютер сможет загрузиться с этим линухом. А дальше &#8211; дело техники.</p>
<p>ЗЫ: а с USB у меня пока загрузиться не получилось &#8211; наверное в такой час пропустил какой-то шаг&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/02/02/linux-pxe-boot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtual FTP accounts</title>
		<link>http://dmitry.shaposhnik.name/2007/12/17/virtual-ftp-accounts/</link>
		<comments>http://dmitry.shaposhnik.name/2007/12/17/virtual-ftp-accounts/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 03:49:57 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/2007/12/17/virtual-ftp-accounts/</guid>
		<description><![CDATA[Понадобилось мне заводить виртуальных ftp-пользователей.
Так как вся информация об аккаунтах для почты живет в MySQL &#8211; то и FTP я решил не делать исключением.

Итак, первым претендентом на роль FTP-сервера стал vsftpd.
Vsftpd
Преимущества

быстрый
держит большие нагрузки абсолютно спокойно
имеет очень простой конфиг
работает через pam

Недостатки

chroot для виртуальных юзверей в строго определенные папки: /home/vsftpd/$USER. Все. Указать для каждого юзеря свою директорию [...]]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне заводить виртуальных ftp-пользователей.<br />
Так как вся информация об аккаунтах для почты живет в MySQL &#8211; то и FTP я решил не делать исключением.<br />
<span id="more-152"></span><br />
Итак, первым претендентом на роль FTP-сервера стал vsftpd.</p>
<h2>Vsftpd</h2>
<h3>Преимущества</h3>
<ul>
<li>быстрый</li>
<li>держит большие нагрузки абсолютно спокойно</li>
<li>имеет очень простой конфиг</li>
<li>работает через pam</li>
</ul>
<h3>Недостатки</h3>
<ul>
<li>chroot для виртуальных юзверей в строго определенные папки: /home/vsftpd/$USER. Все. Указать для каждого юзеря свою директорию &#8211; нельзя.</li>
<li>Или локальные пользователи, или виртуальные. Вместе не живут (авторизацию я вроде как прошел, но вместо /home/dm меня попыталось зачрутить в /home/vsftpd/dm, что, естественно, не удалось)</li>
<li>Квот нету в приципе</li>
</ul>
<h3>Ссылки</h3>
<p>Ставил по <a href="http://www.howtoforge.com/vsftpd_mysql_debian_etch">наставлению howtoforge</a>. Без проблем стало, но недостатки отпугнули.</p>
<h3>Резюме</h3>
<p>Подходит для простой схемы без изысков. Увы, мне не подошел.</p>
<h2>Pure-ftpd</h2>
<h3>Преимущества</h3>
<ul>
<li>довольно быстрый</li>
<li>имеет простой конфиг</li>
<li>работает и через pam</li>
<li>наличие квот</li>
</ul>
<h3>Недостатки</h3>
<ul>
<li>не успел найти</li>
</ul>
<h3>Ссылки</h3>
<p>Ставил по <a href="http://www.howtoforge.com/debian_etch_virtual_hosting_pureftpd_mysql_quota">наставлению howtoforge</a>. Проблем небыло, начал плеваться на конфиг &#8211; не понравился он мне чисто субъективно.</p>
<h3>Резюме</h3>
<p>Вполне нормально, но вкус не понравился.</p>
<h2>Proftpd</h2>
<h3>Преимущества</h3>
<ul>
<li>имеет простой и удобный конфиг</li>
<li>модульный</li>
<li>наличие квот</li>
<li>очень богатые настройки</li>
</ul>
<h3>Недостатки</h3>
<ul>
<li>при большой нагрузке вел себя плохо &#8211; сильно грузил систему и медленно работал</li>
<li>давно были замечены странные паузы на 5-10 секунд при коннекте, сейчас не наблюдается</li>
</ul>
<h3>Ссылки</h3>
<p>Ставил по <a href="http://www.howtoforge.com/proftpd_mysql_virtual_hosting">наставлению howtoforge</a>. Проблем небыло. Сделал небольшую поправку в /etc/proftpd/proftpd.conf:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SQLAuthTypes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Crypt</div></div>
<h3>Резюме</h3>
<p>Вполне нормально, настраивается более чем достаточно. Квоты есть, шейпер есть. При первом обращении существующего в БД пользователя его домашний каталог создается автоматически. На нем и остановился.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/12/17/virtual-ftp-accounts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux tips v.1</title>
		<link>http://dmitry.shaposhnik.name/2007/07/09/linux-tips-v1/</link>
		<comments>http://dmitry.shaposhnik.name/2007/07/09/linux-tips-v1/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 16:55:55 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Newbie]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/07/09/linux-tips-v1/</guid>
		<description><![CDATA[Серия относится к категории &#8220;newbies&#8221;. Используемый дистрибутив &#8211; Ubuntu.
В этой части: 

как сменить разрешение экрана вручную
как сменить видеодрайвер
как восстановить загрузчик (grub) после установки Windoze
запись в NTFS


Как сменить разрешение экрана вручную + как сменить видеодрайвер
В примере используется драйвер nv и заменяется на nvidia (проприетарный, но зато с 3Д-ускорением).
Можно обойтись без бэкапа, но настоятельно рекомендую его делать.

Открываем [...]]]></description>
			<content:encoded><![CDATA[<p>Серия относится к категории &#8220;newbies&#8221;. Используемый дистрибутив &#8211; Ubuntu.</p>
<p>В этой части: </p>
<ul>
<li>как сменить разрешение экрана вручную</li>
<li>как сменить видеодрайвер</li>
<li>как восстановить загрузчик (grub) после установки Windoze</li>
<li>запись в NTFS</li>
</ul>
<p><span id="more-119"></span></p>
<h1>Как сменить разрешение экрана вручную + как сменить видеодрайвер</h1>
<p>В примере используется драйвер nv и заменяется на nvidia (проприетарный, но зато с 3Д-ускорением).<br />
Можно обойтись без бэкапа, но настоятельно рекомендую его делать.</p>
<ol>
<li>Открываем терминал
<ul>
<li>БЭКАП: cp /etc/X11/xorg.conf ~/</li>
</ul>
</li>
<li>sudo apt-get install nvidia-glx</li>
<li>gksudo gedit /etc/X11/xorg.conf</li>
<li>Далее ищем (ближе к концу) раздел, в котором указаны разрешения (Section &#8220;Screen&#8221;).</li>
<li>В нем указано кол-во бит (DefaultDepth, значение как правило 16 или 24, иногда 32).</li>
<li>Или в список для указанной битности добавляем наше разрешение в начало, или во все.</li>
<li>Еще выше (Section &#8220;Device&#8221;) ищем:
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Driver <span style="color: #933;">&quot;nv&quot;</span></div></div>
<p>или возможно <tt>"vesa"</tt>.<br />
	Заменяем на</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Driver nvidia</div></div>
</li>
<li>Сохраняем (Ctrl+O). Закрываем все окна. Делаем логаут.</li>
<li>Теперь нажимаем alt+control+backspace либо ребутаемся. Это перезагрузит графическую оболочку.</li>
<li>Теперь если все ок &#8211; то все заведется, если же нет &#8211; то настало время откатиться назад.</li>
</ol>
<p>Откат (Если делали бэкап):</p>
<ol>
<li>в консоли логинимся</li>
<li>sudo cp ~/xorg.conf /etc/X11/xorg.conf</li>
<li>sudo /etc/init.d/gdm restart</li>
</ol>
<p>Если не делали бэкап: </p>
<ol>
<li>в консоли логинимся</li>
<li>sudo nano /etc/X11/xorg.conf</li>
<li>Мотаем пока не найдем Driver nvidia</li>
<li>Изменяем на Driver nv</li>
<li>Ctrl+O &#8211; сохраняем.</li>
<li>sudo /etc/init.d/gdm restart</li>
</ol>
<p>Это не самый простой метод, но для меня родной =)</p>
<h1>Оживляем загрузчик</h1>
<p><a href="http://ubuntuforums.org/archive/index.php/t-24113.html">Взято отсюда</a></p>
<ol>
<li>Загрузиться с Ubuntu LiveCD.</li>
<li>Открыть окошко терминала.</li>
<li>Набрать <tt>grub</tt></li>
<li>Набрать <tt>root (hd0,6)</tt> &#8211; номер диска и загрузочного раздела с линуксом (например, если /boot на разделе /dev/sda7, то это будет hd0,6 для grub).</li>
<li>Набрать <tt>setup (hd0)</tt>, где 0 &#8211; номер винчейстера.</li>
<li>Выйти по команде <tt>quit</tt>.</li>
<li>Reboot.</li>
</ol>
<p><i>Уточнение по п.4:</i> можно воспользоваться командой &#8220;find /boot/grub/stage1&#8243;, которая скажет номер диска и раздела.<br />
Не забывайте, что номер раздела на единичку меньше &#8211; счет ведется с 0.<br />
Как было показано &#8211; sda7 будет hd(0,6).</p>
<h1>Пишем в NTFS</h1>
<p>Надо выполнит команду (или из терминала или из апплета Run)</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gksudo gedit <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>fstab</div></div>
<p>и прописать для раздела с виндой пирмерно следующее:</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/dev/hdc1 /media/hdc1 ntfs-3g defaults,locale<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">en_US.utf8,umask=007,gid=46,force 0 0</span></div></div>
<p><tt>/dev/hdc1</tt> &#8211; раздел с виндой, можно подсмотреть в gparted<br />
<tt>/media/hdc1</tt> &#8211; где будет смонтировано (надо создать заранее &#8211; <tt>sudo mkdir /media/hdc1</tt>)<br />
<tt>defaults,locale=en_US.utf8,umask=007,gid=46,force</tt> &#8211; все обычно, форс &#8211; чтоб монтировался даже если раздел не помечен как чистый (не выполнился checkdisk) &#8211; <strong><u>у меня от этого force винда ХР умерла</u></strong> =)<br />
<tt>0 0</tt> &#8211; не дампить и не проверять.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/07/09/linux-tips-v1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Service monitoring</title>
		<link>http://dmitry.shaposhnik.name/2007/06/15/service-monitoring/</link>
		<comments>http://dmitry.shaposhnik.name/2007/06/15/service-monitoring/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 15:49:38 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/06/15/service-monitoring/</guid>
		<description><![CDATA[Наверняка всем приходимлось спешно (особенно после звонкавозмущенного клиента) подымать упавший mysql, apache или свой сервис?
К примеру, на моей практике раз в три дня регулярно падает одна из сборок siteMeta на старенькой FreeBSD.
И это хотелось бы отслеживать и в случае падения пытаться автоматически поднять. Для этого существует несколько программных решений.
Самым простым мне показался Monit.
Настраивается минут за [...]]]></description>
			<content:encoded><![CDATA[<p>Наверняка всем приходимлось спешно (особенно после звонкавозмущенного клиента) подымать упавший mysql, apache или свой сервис?</p>
<p>К примеру, на моей практике раз в три дня регулярно падает одна из сборок siteMeta на старенькой FreeBSD.</p>
<p>И это хотелось бы отслеживать и в случае падения пытаться автоматически поднять. Для этого существует несколько программных решений.</p>
<p>Самым простым мне показался <a href="http://www.tildeslash.com/monit/">Monit</a>.</p>
<p>Настраивается минут за 5, причем конфиги имеют довольно читаемый вид, хорошо прокомментированы, да и на сайте есть две пачки примеров, которых мне хватило чтоб настроить все что было нужно (ну, кое-что я оттуда вырезал).</p>
<p>Интерфейс у Monit&#8217;а есть вэбовский, а можно его и не включать. Также он умеет запрашивать авторизацию и разрешать только отдельные IP для доступа.</p>
<p>Вэб-интерфейс, кстати, довольно приятен: <a href="http://www.tildeslash.com/monit/doc/screen.php">скриншоты</a>.</p>
<p>Вот, в общем-то, то, чем хотел поделиться.</p>
<p><em>PS: уже месяц как работает на всех моих серверах &#8211; нареканий нет.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/06/15/service-monitoring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu tips</title>
		<link>http://dmitry.shaposhnik.name/2007/06/14/ubuntu-tips/</link>
		<comments>http://dmitry.shaposhnik.name/2007/06/14/ubuntu-tips/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 09:33:20 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/06/14/ubuntu-tips/</guid>
		<description><![CDATA[Через гугль случайно нашел вот это: http://my.opera.com/necrolin/blog/index.dml/tag/Ubuntu
Дабы не забыть, публикую содержимое и тут.

Enabling encrypted DVD playback
sudo /usr/share/doc/libdvdread3/install-css.sh
Enabling DMA (Direct Memory Access)
For some reason DMA by the CD-ROM is turned off by default on Ubuntu. To solve this problem use your favorite text editor to edit /etc/hdparm.conf and uncomment dma on your CD. Instructions:

sudo gedit /etc/hdparm.conf
delete [...]]]></description>
			<content:encoded><![CDATA[<p>Через гугль случайно нашел вот это: <a href="http://my.opera.com/necrolin/blog/index.dml/tag/Ubuntu">http://my.opera.com/necrolin/blog/index.dml/tag/Ubuntu</a><br />
Дабы не забыть, публикую содержимое и тут.<br />
<span id="more-114"></span><br />
<strong>Enabling encrypted DVD playback</strong></p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>doc<span style="color: #000000; font-weight: bold;">/</span>libdvdread3<span style="color: #000000; font-weight: bold;">/</span>install-css.sh</div></div>
<p><strong>Enabling DMA (Direct Memory Access)</strong><br />
For some reason DMA by the CD-ROM is turned off by default on Ubuntu. To solve this problem use your favorite text editor to edit /etc/hdparm.conf and uncomment dma on your CD. Instructions:</p>
<ol>
<li>sudo gedit /etc/hdparm.conf</li>
<li>delete &#8220;#&#8221; tags from your CD-ROM and dma sections.</li>
</ol>
<p>So, for example my config is:</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/dev/hda <span style="">&#123;</span><br />
#mult_sect_io <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 16</span><br />
#write_cache <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> off</span><br />
<span style="color: #000099;">dma</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> on</span><br />
<span style="">&#125;</span></div></div>
<p><strong>Avoid having to re-enter your keyring password for your wireless connection</strong><br />
a) Ensure your keyring is the same as your login password. If it&#8217;s not then run the following command from the terminal.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>.gnome2<span style="color: #000000; font-weight: bold;">/</span>keyrings<span style="color: #000000; font-weight: bold;">/</span>default.keyring</div></div>
<p>Next time you&#8217;re asked for the keyring enter the same password as your login.</p>
<p>b) Install libpam-keyring software package. To do this in Ubuntu run the command:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libpam-keyring</div></div>
<p>c) Edit /etc/pam.d/gdm and append one line to the end of the file. Do not erase anything, just add the line at the end of the file. Commands are:</p>
<ol>
<li>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gedit <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>pam.d<span style="color: #000000; font-weight: bold;">/</span>gdm</div></div>
</li>
<li>Append the line: @include common-pamkeyring</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/06/14/ubuntu-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
