<?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; Linux</title>
	<atom:link href="http://dmitry.shaposhnik.name/category/linux/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>Samba, AFP and OS X</title>
		<link>http://dmitry.shaposhnik.name/2010/05/24/samba-afp-and-os-x/</link>
		<comments>http://dmitry.shaposhnik.name/2010/05/24/samba-afp-and-os-x/#comments</comments>
		<pubDate>Mon, 24 May 2010 01:15:06 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOSX]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=312</guid>
		<description><![CDATA[Настраивал файлохранилище. В качестве эксперимента &#8211; добавил поддержку AFP.
Поставить самбу &#8211; нетяжело, и особо вдаваться в детали я не стану. Все коробочное, кроме общей шары:
[storage]
&#160; &#160;comment = General storage area
&#160; &#160;path = /home/storage
&#160; &#160;guest ok = yes
&#160; &#160;browseable = yes
&#160; &#160;
&#160; &#160;create mask = 0666
&#160; &#160;directory mask = 0777

&#160; &#160;read only = no
Попробуйте на такую [...]]]></description>
			<content:encoded><![CDATA[<p>Настраивал файлохранилище. В качестве эксперимента &#8211; добавил поддержку AFP.</p>
<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">[storage]<br />
&nbsp; &nbsp;comment = General storage area<br />
&nbsp; &nbsp;path = /home/storage<br />
&nbsp; &nbsp;guest ok = yes<br />
&nbsp; &nbsp;browseable = yes<br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;create mask = 0666<br />
&nbsp; &nbsp;directory mask = 0777<br />
<br />
&nbsp; &nbsp;read only = no</div></div>
<p>Попробуйте на такую шару скопировать файл из-под винды. Правильно, права будут 0666. А теперь из-под линукса/мака. Права совсем не 0666, а скорее 0644 или 600. Кроме того, файл создастся от имени залогиненого пользователя. То есть пользователи не смогут удалить файлы оставленные им другими пользователями.</p>
<p>Я долго копался, и благодаря <a href="http://errormessaging.com/">Роману</a> нашел решение:</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">[global]<br />
...<br />
unix extensions = no<br />
...</div></div>
<p>Это решает проблему с правами. Но чуть позже я вернул unix extensions и добавил в шару опцию</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">force user = nobody</div></div>
<p>Но на OS X 10.6.3 внезапно явилась проблема: при загрузке папки она ставит на нее расширенные аттрибуты. Ругается, и не дает загрузить файлы. Вручную же файлы именно вовнутри папки загружаются. Все это сопровождается сообщением &#8220;operation can’t be completed because you don’t have permission to access&#8230;&#8221; (<a href="http://discussions.apple.com/message.jspa?messageID=11307035">раз</a>, <a href="http://discussions.apple.com/thread.jspa?messageID=11359742">два</a>).</p>
<p><a href="http://lists.apple.com/archives/macos-x-server/2008/Jan/msg00760.html">Решением</a> стало добавление</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">[global]<br />
...<br />
acl check permissions = no<br />
...</div></div>
<p>С AFP в Ubuntu 10.04 все хорошо &#8211; пакет пересобирать не надо, он собран уже с шифрованой передачей пароля. Однако конфиг подровнять пришлось.</p>
<p>В /etc/netatalk/afpd.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">- -transall -uamlist uams_dhx.so,uams_dhx2.so,uams_guest.so -nosavepassword</div></div>
<p>Кроме варианта по-умолчанию сюда добавлен uams_guest.so для доступа к анонимной свалке.</p>
<p>Рядом в файле /etc/netatalk/AppleVolumes.default пишем</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">~/ &nbsp;&quot;Home Directory&quot; options:usedots<br />
/home/storage/ &nbsp;&quot;Common storage&quot; dperm:0777 fperm:0666 options:usedots</div></div>
<p>Как принудительно заставить писать от имени nobody в storage я не нашел, потому выставил соответствующие права.<br />
Опция <strong>usedots</strong> не дает преобразовывать точку в &#8220;<strong>:2e</strong>&#8220;.</p>
<p>Финальным шагом был анонс сервисов через бонжур при помощи avahi-daemon.</p>
<p>/etc/avahi/services/afpd.service</p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#004a43; '>&lt;?</span><span style='color:#004a43; '>xml</span> <span style='color:#004a43; '>version</span><span style='color:#808030; '>=</span><span style='color:#008c00; '>"1.0"</span> <span style='color:#004a43; '>standalone</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>'no'</span><span style='color:#004a43; '>?></span><span style='color:#696969; '>&lt;!--</span><span style='color:#696969; '>*-nxml-*</span><span style='color:#696969; '>--></span>
<span style='color:#004a43; '>&lt;!</span><span style='color:#004a43; '>DOCTYPE</span> <span style='color:#004a43; '>service-group</span> <span style='color:#800000; font-weight:bold; '>SYSTEM</span> <span style='color:#0000e6; '>"avahi-service.dtd"</span><span style='color:#004a43; '>></span>

<span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>service-group</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>name</span> <span style='color:#274796; '>replace-wildcards</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>"</span><span style='color:#0000e6; '>yes</span><span style='color:#0000e6; '>"</span><span style='color:#a65700; '>></span>%h<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>name</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>service</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>type</span><span style='color:#a65700; '>></span>_afpovertcp._tcp<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>type</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>port</span><span style='color:#a65700; '>></span>548<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>port</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>service</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>service</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>type</span><span style='color:#a65700; '>></span>_device-info._tcp<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>type</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>port</span><span style='color:#a65700; '>></span>0<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>port</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>txt-record</span><span style='color:#a65700; '>></span>model=Xserve<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>txt-record</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>service</span><span style='color:#a65700; '>></span>
<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>service-group</span><span style='color:#a65700; '>></span>
</pre>
<p>/etc/avahi/services/samba.service</p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#004a43; '>&lt;?</span><span style='color:#004a43; '>xml</span> <span style='color:#004a43; '>version</span><span style='color:#808030; '>=</span><span style='color:#008c00; '>"1.0"</span> <span style='color:#004a43; '>standalone</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>'no'</span><span style='color:#004a43; '>?></span><span style='color:#696969; '>&lt;!--</span><span style='color:#696969; '>*-nxml-*</span><span style='color:#696969; '>--></span>
<span style='color:#004a43; '>&lt;!</span><span style='color:#004a43; '>DOCTYPE</span> <span style='color:#004a43; '>service-group</span> <span style='color:#800000; font-weight:bold; '>SYSTEM</span> <span style='color:#0000e6; '>"avahi-service.dtd"</span><span style='color:#004a43; '>></span>

<span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>service-group</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>name</span> <span style='color:#274796; '>replace-wildcards</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>"</span><span style='color:#0000e6; '>yes</span><span style='color:#0000e6; '>"</span><span style='color:#a65700; '>></span>%h<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>name</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>service</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>type</span><span style='color:#a65700; '>></span>_smb._tcp<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>type</span><span style='color:#a65700; '>></span>
        <span style='color:#a65700; '>&lt;</span><span style='color:#5f5035; '>port</span><span style='color:#a65700; '>></span>139<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>port</span><span style='color:#a65700; '>></span>
    <span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>service</span><span style='color:#a65700; '>></span>
<span style='color:#a65700; '>&lt;/</span><span style='color:#5f5035; '>service-group</span><span style='color:#a65700; '>></span>
</pre>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2010/05/24/samba-afp-and-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plesk and virtual FTP users</title>
		<link>http://dmitry.shaposhnik.name/2010/05/22/plesk-and-virtual-ftp-users/</link>
		<comments>http://dmitry.shaposhnik.name/2010/05/22/plesk-and-virtual-ftp-users/#comments</comments>
		<pubDate>Sat, 22 May 2010 14:28:31 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Plesk]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=310</guid>
		<description><![CDATA[В Plesk для каждого домена заводится FTP путем создания обычного системного юзеря. Дополнительный фтп можно сделать не иначе как через под-домен. Но иногда бывает надо дать фтп в под-папку домена.
Так как плеск использует proftpd, то конфигурация чертовски проста.
Создаем /etc/proftpd.authuserfile.
Правим /etc/proftpd.include и добавляем:
AuthUserFile /etc/proftpd.authuserfile
Правим /etc/proftpd.authuserfile и добавляем записсь вида:
username:crypted_pass:uid:gid:gekos:home:shell
пример:
someacc:xhppo.NGU0Fjw:10065:2523::/var/www/vhosts/example.org/private/someacchome:/bin/false
crypted_pass можно получить вызвав
openssl passwd -crypt passwordhere
или просто [...]]]></description>
			<content:encoded><![CDATA[<p>В Plesk для каждого домена заводится FTP путем создания обычного системного юзеря. Дополнительный фтп можно сделать не иначе как через под-домен. Но иногда бывает надо дать фтп в под-папку домена.</p>
<p>Так как плеск использует proftpd, то конфигурация чертовски проста.</p>
<p>Создаем <strong>/etc/proftpd.authuserfile</strong>.</p>
<p>Правим <strong>/etc/proftpd.include</strong> и добавляем:</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">AuthUserFile /etc/proftpd.authuserfile</div></div>
<p>Правим <strong>/etc/proftpd.authuserfile</strong> и добавляем записсь вида:</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">username:crypted_pass:uid:gid:gekos:home:shell</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">someacc:xhppo.NGU0Fjw:10065:2523::/var/www/vhosts/example.org/private/someacchome:/bin/false</div></div>
<p><strong>crypted_pass</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">openssl <span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #660033;">-crypt</span> passwordhere</div></div>
<p>или просто вызвав системный crypt.</p>
<p>Подсмотреть UID/GID можно в <strong>/etc/passwd</strong>. Нужен он для раздачи прав, чтобы и владелец домена мог править/удалять файлы, загруженные виртуальным пользователем.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2010/05/22/plesk-and-virtual-ftp-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring apache with GOD</title>
		<link>http://dmitry.shaposhnik.name/2009/11/30/monitoring-apache-with-god/</link>
		<comments>http://dmitry.shaposhnik.name/2009/11/30/monitoring-apache-with-god/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 09:38:07 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=301</guid>
		<description><![CDATA[&#8220;Посчастливилось&#8221; мне заполучить VPS с сайтом на битриксе. Из-за Zend Optimizer (сорсы покриптованы) нет возможности установить APC. Вроде бы умеет xcache работать вместе с ним, еще не проверял. Периодически апач съедает всю память, свап, и машинка умирает окончательно. Хуже то, что апач работает с mpm-prefork, то есть он порождает не потоки, а процессы. И при [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Посчастливилось&#8221; мне заполучить VPS с сайтом на битриксе. Из-за Zend Optimizer (сорсы покриптованы) нет возможности установить APC. Вроде бы умеет xcache работать вместе с ним, еще не проверял. Периодически апач съедает всю память, свап, и машинка умирает окончательно. Хуже то, что апач работает с mpm-prefork, то есть он порождает не потоки, а процессы. И при мониторинге виден родительский процесс, который занимает всего 13М памяти. </p>
<p>Вначале для рестарта апача в период дикого роста я пытался использовать monit, но результат был неадекватный &#8211; при указании memory > 90% он убивал его когда памяти была занята всего треть.</p>
<p>После <a href="http://mmonit.com/monit/">monit</a> я попробовал использовать <a href="http://god.rubyforge.org/">god</a>. Но он мониторит только один процесс, без его чайлдов. Вроде бы есть проект <a href="http://github.com/arya/bluepill/">bluepill</a>, который идейно растет из god. Но примеры найти оказалось проблематично, да и в процессе решил таки остаться с god.</p>
<p>Среди условий у god была обнаружена фича &#8211; :lambda. После недолгого размышления на bash была написана строка, показывающая занятый апачем процент памяти:</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">ps -e -o pmem,cmd | grep apache2 | grep -v grep | awk '{sum += $1;}END{print sum;}'</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">w.restart_if do |restart|<br />
&nbsp; restart.condition(:lambda) do |c|<br />
&nbsp; &nbsp; c.lambda = lambda{`ps -e -o pmem,cmd | grep apache2 | grep -v grep | awk '{sum += \$1;}END{print sum;}'`.to_i &gt; 90}<br />
&nbsp; end<br />
end</div></div>
<p>Итого конфиг для апача выглядит так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">God::Contacts::Email.delivery_method = :sendmail<br />
<br />
God.contact(:email) do |c|<br />
&nbsp; c.name = 'maintainer'<br />
&nbsp; c.email = 'pager@sms.gate.isp'<br />
end<br />
<br />
<br />
God::Contacts::Email.format = lambda do |name, email, message, time, priority, category, host|<br />
&nbsp; &lt; &lt;-EOF<br />
From: god<br />
To: #{name} &lt;#{email}&gt;<br />
Subject: Alert!<br />
Date: #{Time.now.httpdate}<br />
Message-Id: &lt; #{rand(1000000000).to_s(36)}.#{$$}.#{self.message_settings[:from]}&gt;<br />
<br />
#{host} (#{priority}): #{message}<br />
&nbsp; EOF<br />
end<br />
<br />
<br />
%w{80}.each do |port|<br />
&nbsp; God.watch do |w|<br />
&nbsp; &nbsp; w.name = &quot;apache2&quot;<br />
&nbsp; &nbsp; w.pid_file = &quot;/var/run/apache2.pid&quot;<br />
&nbsp; &nbsp; w.interval = 10.seconds # default<br />
&nbsp; &nbsp; w.start = &quot;/etc/init.d/apache2 start&quot;<br />
&nbsp; &nbsp; w.stop = &quot;/etc/init.d/apache2 stop&quot;<br />
&nbsp; &nbsp; w.restart = &quot;/etc/init.d/apache2 restart&quot;<br />
&nbsp; &nbsp; w.start_grace = 10.seconds<br />
&nbsp; &nbsp; w.restart_grace = 20.seconds<br />
<br />
&nbsp; &nbsp; w.start_if do |start|<br />
&nbsp; &nbsp; &nbsp; start.condition(:process_running) do |c|<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.interval = 5.seconds<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.running = false<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; end<br />
&nbsp; &nbsp; w.restart_if do |restart|<br />
&nbsp; &nbsp; &nbsp; restart.condition(:lambda) do |c|<br />
&nbsp; &nbsp; &nbsp; &nbsp; c.lambda = lambda{`ps -e -o pmem,cmd | grep apache2 | grep -v grep | awk '{sum += \$1;}END{print sum;}'`.to_i &gt; 90}<br />
&nbsp; &nbsp; &nbsp; &nbsp; c.notify = 'maintainer'<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
end</div></div>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/11/30/monitoring-apache-with-god/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LAMP through fcgid with suexec</title>
		<link>http://dmitry.shaposhnik.name/2009/08/11/lamp-through-fcgid-with-suexec/</link>
		<comments>http://dmitry.shaposhnik.name/2009/08/11/lamp-through-fcgid-with-suexec/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 08:11:49 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[webtech]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=294</guid>
		<description><![CDATA[Взглянем на Apache+mod_php. Плюсы:

настраивается максимально просто
интерпретатор стартует вместе с каждым форком апача

Минусы: 

mpm_prefork далеко не самый быстрый
все работает под одним пользователем (да-да, можно накрутить mod_itk)

В попытках сделать секьюрно и по возможности быстро я решил скрутить apache (mpm_worker) + mod_fcgid + suexec.
Сам по себе CGI очень небыстр за счет того, что при каждом запросе подымается интерпретатор. [...]]]></description>
			<content:encoded><![CDATA[<p>Взглянем на Apache+mod_php. Плюсы:</p>
<ul>
<li>настраивается максимально просто</li>
<li>интерпретатор стартует вместе с каждым форком апача</li>
</ul>
<p>Минусы: </p>
<ul>
<li>mpm_prefork далеко не самый быстрый</li>
<li>все работает под одним пользователем (да-да, можно накрутить mod_itk)</li>
</ul>
<p>В попытках сделать секьюрно и по возможности быстро я решил скрутить apache (mpm_worker) + <a href="http://fastcgi.coremail.cn/">mod_fcgid</a> + suexec.<br />
Сам по себе CGI очень небыстр за счет того, что при каждом запросе подымается интерпретатор. FastCGI быстрее, так как интерпретатор держится отдельным процессом. А mod_fcgid &#8211; модуль, бинарно совместимый с mod_fastcgi, с новой стратегией управления процессами.</p>
<p>Suexec в свою очередь позволяет выполнять CGI/FastCGI/SSI с указанными uid/gid. Да-да, в системе будут заводиться реальные пользователи.</p>
<p>Расстановкой прав можно добиться того, что даже взломав один сайт злоумышленник не сможет увидеть другие сайты.<br />
<span id="more-294"></span><br />
Приступим.</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 apache2-mpm-worker apache2-suexec ache2-threaded-dev libapache2-mod-fcgid php5-cgi</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">mkdir -p /root/web/skel<br />
cd /root/web/skel<br />
mkdir {cgi-bin,etc,logs,tmp,www}<br />
chmod 770 tmp<br />
chmod 751 {etc,logs,www}<br />
cp /etc/php5/cgi/php.ini ./etc</div></div>
<p>Правим php.ini на предмет вывода ошибок и прочих мелких твиков.<br />
Теперь сделаем враппер для самого обработчика (cgi-bin/php-cgi):</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: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$CGI_BIN_DIR</span><br />
<span style="color: #007800;">PHP_INI</span>=..<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini<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;">-f</span> <span style="color: #007800;">$PHP_INI</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: #007800;">PHP_INI</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cgi<span style="color: #000000; font-weight: bold;">/</span>php.ini<br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php5-cgi <span style="color: #660033;">-c</span> <span style="color: #007800;">$PHP_INI</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">chown -R 755 cgi-bin<br />
cd /root/web<br />
touch {adduser,awstats,vhost}.skel<br />
touch add_site.sh &amp;&amp; chmod +x add_site.sh</div></div>
<p><strong>adduser.skel</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: #007800;">DSHELL</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;">false</span><br />
<span style="color: #007800;">DHOME</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<br />
<span style="color: #007800;">GROUPHOMES</span>=no<br />
<span style="color: #007800;">LETTERHOMES</span>=no<br />
<span style="color: #007800;">SKEL</span>=<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>skel<br />
<span style="color: #007800;">FIRST_SYSTEM_UID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_SYSTEM_UID</span>=<span style="color: #000000;">2999</span><br />
<span style="color: #007800;">FIRST_SYSTEM_GID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_SYSTEM_GID</span>=<span style="color: #000000;">2999</span><br />
<span style="color: #007800;">FIRST_UID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_UID</span>=<span style="color: #000000;">29999</span><br />
<span style="color: #007800;">FIRST_GID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_GID</span>=<span style="color: #000000;">2999</span><br />
<span style="color: #007800;">USERGROUPS</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">USERS_GID</span>=<span style="color: #000000;">100</span><br />
<span style="color: #007800;">DIR_MODE</span>=0751<br />
<span style="color: #007800;">SETGID_HOME</span>=no<br />
<span style="color: #007800;">QUOTAUSER</span>=<span style="color: #ff0000;">&quot;&quot;</span><br />
<span style="color: #007800;">SKEL_IGNORE_REGEX</span>=<span style="color: #ff0000;">&quot;dpkg-(old|new|dist)&quot;</span></div></div>
<p><strong>awstats.skel</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: #007800;">LogFile</span>=<span style="color: #ff0000;">&quot;/var/www/#USER/logs/#SITE-access.log&quot;</span><br />
<span style="color: #007800;">SiteDomain</span>=<span style="color: #ff0000;">&quot;#SITE&quot;</span><br />
<span style="color: #007800;">HostAliases</span>=<span style="color: #ff0000;">&quot;localhost 127.0.0.1 REGEX[#SITE$]&quot;</span><br />
Include <span style="color: #ff0000;">&quot;/etc/awstats/awstats.conf.local&quot;</span></div></div>
<p><strong>vhost.skel</strong>:</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;">&lt;</span>virtualhost <span style="color: #000000; font-weight: bold;">*&gt;</span><br />
&nbsp; &nbsp; ServerName <span style="color: #666666; font-style: italic;">#SITE</span><br />
&nbsp; &nbsp; ServerAlias www.<span style="color: #666666; font-style: italic;">#SITE</span><br />
&nbsp; &nbsp; DocumentRoot <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: #666666; font-style: italic;">#USER/www/#SITE/public_html</span><br />
<br />
&nbsp; &nbsp; SuexecUserGroup <span style="color: #666666; font-style: italic;">#USER #USER</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; ScriptAlias <span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</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: #666666; font-style: italic;">#USER/cgi-bin/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;</span>directory <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: #666666; font-style: italic;">#USER/www/#SITE/public_html&gt;</span><br />
&nbsp; &nbsp; Options <span style="color: #660033;">-Indexes</span> +ExecCGI<br />
&nbsp; &nbsp; AllowOverride All<br />
&nbsp; &nbsp; AddHandler fcgid-script .php<br />
&nbsp; &nbsp; FCGIWrapper <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: #666666; font-style: italic;">#USER/cgi-bin/php-cgi .php</span><br />
&nbsp; &nbsp; Order allow,deny<br />
&nbsp; &nbsp; Allow from all<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;/</span>directory<span style="color: #000000; font-weight: bold;">&gt;</span><br />
<br />
&nbsp; &nbsp; ErrorLog <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: #666666; font-style: italic;">#USER/logs/#SITE-error.log</span><br />
&nbsp; &nbsp; CustomLog <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: #666666; font-style: italic;">#USER/logs/#SITE-access.log combined</span><br />
<br />
&nbsp; &nbsp; SetEnv AWSTATS_FORCE_CONFIG <span style="color: #666666; font-style: italic;">#SITE</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;</span>location <span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span>awstats.pl <span style="color: #000000; font-weight: bold;">&gt;</span><br />
&nbsp; &nbsp; AuthUserFile <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: #666666; font-style: italic;">#USER/etc/awstats.passwd</span><br />
&nbsp; &nbsp; AuthName <span style="color: #ff0000;">&quot;Website stats for #SITE&quot;</span><br />
&nbsp; &nbsp; AuthType Basic<br />
&nbsp; &nbsp; require valid-user<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;/</span>location<span style="color: #000000; font-weight: bold;">&gt;</span><br />
<span style="color: #000000; font-weight: bold;">&lt;/</span>virtualhost<span style="color: #000000; font-weight: bold;">&gt;</span></div></div>
<p><strong>add_site.sh</strong>:</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: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #007800;">$1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #007800;">$2</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;Oops. Some param not given.&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: #666666; font-style: italic;"># If no such user exists - add one right now</span><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;">-d</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: #007800;">$2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; adduser <span style="color: #660033;">--conf</span> .<span style="color: #000000; font-weight: bold;">/</span>adduser.skel <span style="color: #660033;">--disabled-login</span> <span style="color: #660033;">--gecos</span> <span style="color: #ff0000;">''</span> <span style="color: #007800;">$2</span> <span style="color: #000000; font-weight: bold;">||</span> <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: #666666; font-style: italic;"># Buld generic folders</span><br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</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: #007800;">$2</span><span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">/</span>public_html<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> <span style="color: #007800;">$2</span>:<span style="color: #007800;">$2</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: #007800;">$2</span><span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$1</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Build generic vhost for apache</span><br />
<span style="color: #c20cb9; font-weight: bold;">cat</span> vhost.skel <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/#USER/<span style="color: #007800;">${2}</span>/g;s/#SITE/<span style="color: #007800;">${1}</span>/g&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #800000;">${2}</span>_<span style="color: #800000;">${1}</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Activate vhost</span><br />
a2ensite <span style="color: #800000;">${2}</span>_<span style="color: #800000;">${1}</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Build generic awstats config</span><br />
<span style="color: #c20cb9; font-weight: bold;">cat</span> awstats.skel <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/#USER/<span style="color: #007800;">${2}</span>/g;s/#SITE/<span style="color: #007800;">${1}</span>/g&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>awstats<span style="color: #000000; font-weight: bold;">/</span>awstats.<span style="color: #800000;">${1}</span>.conf<br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Restart apache...&quot;</span><br />
apache2ctl configtest <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> apache2ctl restart</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">cd /root/web<br />
./add_site example.org web_example</div></div>
<p>В результате будет создан пользователь web_example и у него сайт &#8211; example.org.</p>
<h3>Tip</h3>
<p>Иногда надо позволить скрипту выполяться боее 30 секунд. Думаете для этого достаточно подправить php.ini? Нет, в таком случае fcgid отстрелит скрипт по достижении 40 секунд. Для этих случаев в конфиге vhost&#8217;а требуется задать значение <strong>IPCCommTimeout</strong> в секундах (например, 300). Есть баг &#8211; глобальное значение отчего-то не хочет применяться к vhost&#8217;у, потому надо указать его непосредственно в vhost&#8217;е.</p>
<p>В общем и целом &#8211; конфиги показал, идею донес (надеюсь). Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/08/11/lamp-through-fcgid-with-suexec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exim mail forwarding</title>
		<link>http://dmitry.shaposhnik.name/2009/08/11/exim-mail-forwarding/</link>
		<comments>http://dmitry.shaposhnik.name/2009/08/11/exim-mail-forwarding/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 07:19:18 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Exim]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=292</guid>
		<description><![CDATA[Стоял у меня MTA Exim4 для отправки почты. И вдруг на этот сервер перенесли MX-запись одного домена (например, example.org), и он вынужден был что-то делать с почтой. Решено было перенаправить всю почту для этого домена на другой ящик на время разбирательств кто прав, а кто виноват.
Для этого в Ubuntu пришлось сделать следующие правки.
В /etc/exim4/update-exim4.conf.conf в [...]]]></description>
			<content:encoded><![CDATA[<p>Стоял у меня MTA Exim4 для отправки почты. И вдруг на этот сервер перенесли MX-запись одного домена (например, example.org), и он вынужден был что-то делать с почтой. Решено было перенаправить всю почту для этого домена на другой ящик на время разбирательств кто прав, а кто виноват.</p>
<p>Для этого в Ubuntu пришлось сделать следующие правки.</p>
<p>В <strong>/etc/exim4/update-exim4.conf.conf</strong> в <strong>dc_other_hostnames</strong> и dc_relay_domains был добавлен example.org.</p>
<p>А сам форвард выглядел так (<strong>/etc/exim4/conf.d/router/099_exim4-config_redirects</strong>):</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">forward:<br />
&nbsp; &nbsp; driver = redirect<br />
&nbsp; &nbsp; domains = example.org<br />
&nbsp; &nbsp; data = tmp_example.org@somemail.com</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">sender_redirect:<br />
&nbsp; driver = redirect<br />
&nbsp; data = ${lookup{$sender_address}lsearch{/etc/exim4/sender_redirects}}<br />
&nbsp; domains = example.org</div></div>
<p>И в файле <strong>/etc/exim4/sender_redirects</strong> были бы</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">someone@example.org: where.to@forward.com</div></div>
<p>Но почему-то этот вариант не сработал как ожидалось.</p>
<p>Возможно я допустил какие-то ошибки в конфигурировании, но задача выполнена и почта не потеряна.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/08/11/exim-mail-forwarding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerDNS &#8211; master and slave</title>
		<link>http://dmitry.shaposhnik.name/2009/06/25/powerdns-master-and-slave/</link>
		<comments>http://dmitry.shaposhnik.name/2009/06/25/powerdns-master-and-slave/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 08:49:48 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[PowerDNS]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=285</guid>
		<description><![CDATA[В связи с переездом на новый сервер пришлось переносить и кучу сервисов, которые крутились на старом. Одним из них был DNS.
Настоятельно рекомендуется делать master и slave (primary и secondary) на разных машинах, дабы в случае отказа одного из них второй мог полноценно работать. Ну это в теории, на практике все несколько упрощается до одного сервера, [...]]]></description>
			<content:encoded><![CDATA[<p>В связи с переездом на новый сервер пришлось переносить и кучу сервисов, которые крутились на старом. Одним из них был DNS.</p>
<p>Настоятельно рекомендуется делать master и slave (primary и secondary) на разных машинах, дабы в случае отказа одного из них второй мог полноценно работать. Ну это в теории, на практике все несколько упрощается до одного сервера, который если ляжет &#8211; то DNS будет уже не столь важен.</p>
<p>Начал подымать master на OpenSuSE 11.1. Конфиг простой и незамысловатый:</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;">#each slave should be put here (space separated) to allow zone details transfer</span><br />
allow-axfr-ips=1.1.1.2<br />
disable-axfr=no<br />
<span style="color: #007800;">daemon</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">guardian</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
default-ttl=<span style="color: #000000;">3600</span><br />
soa-refresh-default=<span style="color: #000000;">3600</span><br />
lazy-recursion=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
local-address=0.0.0.0<br />
<span style="color: #007800;">master</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">recursor</span>=127.0.0.1:<span style="color: #000000;">5300</span><br />
<span style="color: #007800;">launch</span>=gmysql<br />
gmysql-host=localhost<br />
gmysql-port=<span style="color: #000000;">3306</span><br />
gmysql-dbname=powerdns<br />
gmysql-user=powerdns<br />
gmysql-password=powerdns<br />
gmysql-socket=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/</span>mysql.sock</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: #007800;">chroot</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>pdns<br />
local-address=127.0.0.1<br />
local-port=<span style="color: #000000;">5300</span><br />
<span style="color: #007800;">setgid</span>=pdns<br />
<span style="color: #007800;">setuid</span>=pdns</div></div>
<p>Базу для него создавал из <a href="http://www.opensourcery.co.za/powerdns-on-rails/">PowerDNS on Rails</a>, хотя можно ограничиться и той, <a href="http://doc.powerdns.com/configuring-db-connection.html#CONFIGURING-MYSQL">что в документации</a>.</p>
<p>И напоролся на первый занятный баг &#8211; со включенным режимом master он взлетает и долбит базу одинаковыми запросами (пытается получить все записи). На стоящей рядом ubuntu с той же версией такого не наблюдается. Долго пытался отловить что, где и почему &#8211; и решил пересобрать из сорсов. Когда обнаружилась нехватка boost я решил проверить, а нет ли готового свеженького пакета с собраным powerdns? Таки есть &#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">http://download.opensuse.org/repositories/server:/dns/openSUSE_11.1/</div></div>
<p>и была установлена версия pdns-2.9.22-1.1. Проблема с нагрузкой на БД полечилась, но появилась новая &#8211; с репликацией на slave.</p>
<p>В PowerDNS есть такое понятие как supermaster. В общем случае нужно прописывать зону на мастере и слейве. Когда слейв получит от мастера notify, он запросит у мастера записи из этой зоны. Но если сервер, от которого пришел notify, будет обнаружен в списке supermasters, и такой зоны на слейве не будет описано, она создастся автоматически. И потом в нее будут добавлены записи с мастера. Это приятно упрощает жизнь <img src='http://dmitry.shaposhnik.name/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  В табличке запись довольно простая &#8211; ip мастера, имя слейва (ns2.example.org), имя аккаунта (на работу никак не влияет &#8211; просто будет фигурировать в описании зоны; удобно для указания клиента, например).</p>
<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">pdns_control notify example.org</div></div>
<p>С первого раза не заработало потому, что в PowerDNS on Rails в имя поддомена по привычке вписал &#8220;@&#8221;, и потом получил записи вида &#8220;@.example.org&#8221; вместо &#8220;example.org&#8221; либо &#8220;@&#8221;. Прошелся простым апдейтом по базе и убрал этот баг.</p>
<p>PS: Хочу выразить благодарность Патрику Фею (<a href="http://blog.nachtarbeiter.net/about/">Patrick Fey</a>) за его <a href="http://blog.nachtarbeiter.net/2009/04/23/powerdns-on-debian-lenny-sarge-or-woody-2/">недавний пост</a>, который помог постичь смысл supermaster&#8217;ов.</p>
<p>PPS: конфиг pdns для слейва мало чем отличается от мастера:</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">config-dir=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>powerdns<br />
<span style="color: #007800;">daemon</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
disable-axfr=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">guardian</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">launch</span>=gmysql<br />
lazy-recursion=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
local-address=0.0.0.0<br />
local-port=<span style="color: #000000;">53</span><br />
module-dir=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>powerdns<br />
<span style="color: #007800;">setgid</span>=pdns<br />
<span style="color: #007800;">setuid</span>=pdns<br />
<span style="color: #007800;">slave</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
socket-dir=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<br />
version-string=powerdns<br />
gmysql-host=localhost<br />
gmysql-port=<span style="color: #000000;">3306</span><br />
gmysql-dbname=powerdns<br />
gmysql-user=powerdns<br />
gmysql-password=powerdns</div></div>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/06/25/powerdns-master-and-slave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Having fun with RRD and architecture</title>
		<link>http://dmitry.shaposhnik.name/2009/06/19/having-fun-with-rrd-and-architecture/</link>
		<comments>http://dmitry.shaposhnik.name/2009/06/19/having-fun-with-rrd-and-architecture/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 02:16:12 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[RRD]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=282</guid>
		<description><![CDATA[Переезжал на новый сервер, и наигрался вволю со всеми мониторингами и прочим. Была обнаружена неприятная особенность RRD: бд платформозависима. Пришлось на старом сервере делать дамп
for i in *.rrd; do rrdtool dump $i &#62; $i.xml; done
тащить на новый (tar, scp либо nc) и там разворачивать:
for i in *.xml; do A=`echo $i&#124;sed 's/\.xml//'`; rrdtool restore -f $i [...]]]></description>
			<content:encoded><![CDATA[<p>Переезжал на новый сервер, и наигрался вволю со всеми мониторингами и прочим. Была обнаружена неприятная особенность RRD: бд платформозависима. Пришлось на старом сервере делать дамп</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;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.rrd; <span style="color: #000000; font-weight: bold;">do</span> rrdtool dump <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$i</span>.xml; <span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>тащить на новый (tar, scp либо nc) и там разворачивать:</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;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.xml; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #007800;">A</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\.xml//'</span><span style="color: #000000; font-weight: bold;">`</span>; rrdtool restore <span style="color: #660033;">-f</span> <span style="color: #007800;">$i</span> <span style="color: #007800;">$A</span>; <span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>По поводу того как тащить данные между серверами &#8211; ninja way:<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">netcat <span style="color: #660033;">-l</span> <span style="color: #660033;">-p</span> <span style="color: #000000;">7000</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> x</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: #c20cb9; font-weight: bold;">tar</span> cf - <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">|</span> netcat otherhost <span style="color: #000000;">7000</span></div></div>
<p>Ссылки по теме:<br />
<a href="http://compsoc.dur.ac.uk/~djw/tarpipe.html">tarpipe</a><br />
<a href="http://forums.cacti.net/about19026.html">RRD convert</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/06/19/having-fun-with-rrd-and-architecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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>
	</channel>
</rss>
