<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-134797464443689624</id><updated>2011-11-13T06:40:46.399-08:00</updated><category term='flash'/><category term='mail'/><category term='JAVA_HOME'/><category term='cli'/><category term='inetd'/><category term='codepage'/><category term='мастер-мастер'/><category term='phpunit'/><category term='fetchmail'/><category term='github'/><category term='api'/><category term='curl'/><category term='pipe'/><category term='w3m'/><category term='pop3'/><category term='флэшка'/><category term='mutt'/><category term='ppp'/><category term='автоматическое монтирование'/><category term='maildir'/><category term='автомонтирование'/><category term='phpmd'/><category term='gmail.com'/><category term='shell'/><category term='debian'/><category term='masqmail'/><category term='pull request'/><category term='укрнет'/><category term='phpcs'/><category term='sh'/><category term='masqmail.conf'/><category term='config.xml'/><category term='репликация'/><category term='Continuous Integration'/><category term='ukr.net'/><category term='mysql'/><category term='phpdoc'/><category term='usb'/><category term='phpUnderControl'/><category term='automount'/><category term='masqmail.route'/><category term='bash'/><category term='CruiseСontrol'/><category term='build.xml'/><category term='imap'/><category term='phpcpd'/><category term='phpcb'/><category term='master-master replication'/><category term='флешка'/><category term='command line'/><category term='procmail'/><category term='msmtp'/><category term='укр.нет'/><category term='mta'/><category term='phpuc'/><category term='gmail'/><category term='charset'/><category term='kmail'/><title type='text'>Mosquito</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-8126604005066170049</id><published>2011-10-18T03:52:00.000-07:00</published><updated>2011-10-18T04:10:18.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><category scheme='http://www.blogger.com/atom/ns#' term='sh'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='cli'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='command line'/><category scheme='http://www.blogger.com/atom/ns#' term='pull request'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Создание pull request-а для GitHub из командной стркоки</title><content type='html'>Для создания pull request-а на GitHub следует выполнить следующую команду:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;curl -i -u "your-name:your-passwd" https://api.github.com/repos/his-name/his-repo/pulls -d '{"title": "Title of pull request", "body": "Body of pull request", "head":"your-repo:your-branch", "base":"his-branch"}'&lt;/kbd&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-8126604005066170049?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/8126604005066170049/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=8126604005066170049' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/8126604005066170049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/8126604005066170049'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/10/github-pull-request-curl-cli-shell.html' title='Создание pull request-а для GitHub из командной стркоки'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-8908986201378529009</id><published>2011-09-30T05:05:00.000-07:00</published><updated>2011-10-15T07:57:45.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phpdoc'/><category scheme='http://www.blogger.com/atom/ns#' term='CruiseСontrol'/><category scheme='http://www.blogger.com/atom/ns#' term='phpUnderControl'/><category scheme='http://www.blogger.com/atom/ns#' term='phpmd'/><category scheme='http://www.blogger.com/atom/ns#' term='config.xml'/><category scheme='http://www.blogger.com/atom/ns#' term='phpcpd'/><category scheme='http://www.blogger.com/atom/ns#' term='build.xml'/><category scheme='http://www.blogger.com/atom/ns#' term='phpuc'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA_HOME'/><category scheme='http://www.blogger.com/atom/ns#' term='phpcb'/><category scheme='http://www.blogger.com/atom/ns#' term='phpcs'/><category scheme='http://www.blogger.com/atom/ns#' term='phpunit'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Integration'/><title type='text'>Установка и настройка сервера непрерывной интеграции phpUnderControl</title><content type='html'>&lt;h2 id="description"&gt;Описание&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Сервер непрерывной интеграции (CI - Continuous Integration) предназначен для автоматической периодической сборки проектов, запуска модульных тестов, проверки кода на наличие распространенных ошибок и формирования ряда других отчетов. В качестве CI-сервера будет использоваться &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseСontrol&lt;/a&gt; (CC) с дополнением &lt;a href="http://phpundercontrol.org/"&gt;phpUnderControl&lt;/a&gt;. CС запускается в качестве демона, периодически опрашивает SVN-репозиторий и, в случае наличия изменений, создает локальную копию, над которой в дальнейшем производится ряд определенных действий. Для выполнения этих действий в нужной последовательности используется утилита Ant (также поддерживается работа с его php-клоном phing), которая поставляется в комплекте с CC.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Дополнение phpUnderControl предоставляет консольную утилиту phpuc которая дополняет CC рядом шаблонов, а также позволяет быстро добавлять/удалять проекты в CC. В phpUnderControl встроена поддержка проверки синтаксиса php-кода, а также следующих утилит:&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;phpunit&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;автоматизированное тестирование приложения&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;phpdoc&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;PhpDocumentor - автоматическая генерация документации&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;phpcb&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;PHP_CodeBrowser - просмотр кода онлайн (включая подсветку и описание проблемных мест, таких как: нарушение стандартов кодирования, дублирование кода, высокая сложность кода)&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;phpcs&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;PHP_CodeSniffer - обнаружение нарушений стандартов кодирования&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;ezcGraph&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;простроение графиков изменения контролируемых параметров с течением времени&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;br /&gt;Кроме того есть возможность добавить поддержку других утилит, таких как:&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;phpmd&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;анализ сложности исходного кода&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;phpcpd&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;поиск дублирующегося кода&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;br /&gt;&lt;h3&gt;Скриншоты&lt;/h3&gt;&lt;br /&gt;Главная страница: список проектов, ручной запуск сборок:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-6SDiQK11DIQ/ToWsgkw1ARI/AAAAAAAABOc/aYe2SJaj4io/s1600/img-001.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 122px;" src="http://3.bp.blogspot.com/-6SDiQK11DIQ/ToWsgkw1ARI/AAAAAAAABOc/aYe2SJaj4io/s320/img-001.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658118182485164306" /&gt;&lt;/a&gt;&lt;br /&gt;Страница с результатами выполнения тестов phpunit:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-HrTYof7YrTU/ToWtR8FfAiI/AAAAAAAABOk/rvrh7xUriGY/s1600/img-002.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://2.bp.blogspot.com/-HrTYof7YrTU/ToWtR8FfAiI/AAAAAAAABOk/rvrh7xUriGY/s320/img-002.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119030559408674" /&gt;&lt;/a&gt;&lt;br /&gt;Страница метрик, изменение контролируемых параметров от сборки к сборке:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-BIf6CZmiESc/ToWtcbktd0I/AAAAAAAABOs/AvF0X39UG5Q/s1600/img-003.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 312px;" src="http://2.bp.blogspot.com/-BIf6CZmiESc/ToWtcbktd0I/AAAAAAAABOs/AvF0X39UG5Q/s320/img-003.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119210810570562" /&gt;&lt;/a&gt;&lt;br /&gt;Страница, отображающая покрытие кода тестами:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-3Hm3CJzDRFw/ToWtmwgNUuI/AAAAAAAABO0/mt2eMH5PwLI/s1600/img-004.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 128px;" src="http://4.bp.blogspot.com/-3Hm3CJzDRFw/ToWtmwgNUuI/AAAAAAAABO0/mt2eMH5PwLI/s320/img-004.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119388227523298" /&gt;&lt;/a&gt;&lt;br /&gt;Онлайн-просмотр кода с подсветкой и описанием проблемных участков (оформление, сложность, дублирование и пр.):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-OoDQWnGyqHk/ToWtwXiH5MI/AAAAAAAABO8/zLMYqpA4Dn8/s1600/img-005.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;" src="http://4.bp.blogspot.com/-OoDQWnGyqHk/ToWtwXiH5MI/AAAAAAAABO8/zLMYqpA4Dn8/s320/img-005.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119553323361474" /&gt;&lt;/a&gt;&lt;br /&gt;Онлайн документация:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-qbv11BD9iN8/ToWt6KjjooI/AAAAAAAABPE/duc_a1EQeTM/s1600/img-006.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://3.bp.blogspot.com/-qbv11BD9iN8/ToWt6KjjooI/AAAAAAAABPE/duc_a1EQeTM/s320/img-006.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119721638404738" /&gt;&lt;/a&gt;&lt;br /&gt;Страница отчета о нарушениях стандартов кодирования:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-uYn_80flVfU/ToWuBEejxXI/AAAAAAAABPM/ddVYr2r--Ms/s1600/img-007.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 236px;" src="http://3.bp.blogspot.com/-uYn_80flVfU/ToWuBEejxXI/AAAAAAAABPM/ddVYr2r--Ms/s320/img-007.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119840265913714" /&gt;&lt;/a&gt;&lt;br /&gt;Страница отчета сложности кода, дублирования кода и других проблем:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-SIctiSlTGMQ/ToWuIuHyyWI/AAAAAAAABPU/xTjkn_zy7Ek/s1600/img-008.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-SIctiSlTGMQ/ToWuIuHyyWI/AAAAAAAABPU/xTjkn_zy7Ek/s320/img-008.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658119971703802210" /&gt;&lt;/a&gt;&lt;br /&gt;Просмотр продублированного кода:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-6Oi4VIoZodA/ToWuQNZRnfI/AAAAAAAABPc/Pu5IphspAA0/s1600/img-009.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://1.bp.blogspot.com/-6Oi4VIoZodA/ToWuQNZRnfI/AAAAAAAABPc/Pu5IphspAA0/s320/img-009.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5658120100357709298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="install-cc"&gt;Установка CruiseСontrol&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Для работы сервера CC нужна java-машина, устанавливаем, если еще не установлена:&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo apt-get install sun-java6-bin&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Затем следует скачать архив с последней версией CC с сайта &lt;a href="http://cruisecontrol.sourceforge.net/download.html"&gt;http://cruisecontrol.sourceforge.net/download.html&lt;/a&gt; (на момент написания последней была версия 2.8.4) и распаковать в локальный каталог (в данном примере /opt):&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo unzip cruisecontrol-bin-2.8.4.zip -d /opt&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Для удобства обновлений программы можно создать символическую ссылку cruisecontrol, которая будет указывать на используемую версию данного ПО:&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;cd /opt&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo ln -s cruisecontrol-bin-2.8.4 cruisecontrol&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Теперь, когда CC-сервер установлен, можно настроить его автоматический запуск при старте системы. Для этого следует добавить нового пользователя, от имени которого будет запускаться процесс CC, разместить стартовый скрипт cruisecontrol (&lt;a href="#appendix-a"&gt;приложение А&lt;/a&gt;) в каталоге /etc/init.d/ (для debian-подобных систем), установить необходимые для его запуска права и, собственно, настроить автозапуск:&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo adduser --system --group --home /opt/cruisecontrol cruisecontrol&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo chown -R cruisecontrol:cruisecontrol /opt/cruisecontrol-bin-2.8.4 /opt/cruisecontrol&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo cp cruisecontrol /etc/init.d/cruisecontrol&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo chmod 755 /etc/init.d/cruisecontrol&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo update-rc.d cruisecontrol defaults&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Теперь вручную сервер CC можно запустить командой&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo /etc/init.d/cruisecontrol start&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Остановить:&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo /etc/init.d/cruisecontrol stop&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Для отладочных целей запуск сервера CC можно выполнить командой (из каталога /opt/cruisecontrol/):&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo ./cruisecontrol.sh -configfile /opt/cruisecontrol/config.xml -webport 8080 -jmxport 8082 -rmiport&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;После успешного запуска CC-сервера должен быть доступен адрес http://localhost:8080.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Возможна проблема при запуске CC сервера, когда в файл /opt/cruisecontrol/cruisecontrol.sh из стартового скрипта не передается переменная окружения JAVA_HOME. Одним из вариантов решения данной проблемы может быть запись строки &lt;kbd&gt;JAVA_HOME=/usr/lib/jvm/java-6-sun&lt;/kbd&gt; в общесистемный файл /etc/environment. Также, в качестве временного решения, можно указать значение этой переменной непосредственно в файле /opt/cruisecontrol/cruisecontrol.sh. Однако при использовании в стартовом скрипте команды su cruisecontrol &lt;b&gt;-p&lt;/b&gt; -c ... этой проблемы возникать не должно.&lt;/p&gt;&lt;br /&gt;&lt;h2 id="install-phpuc"&gt;Установка phpUnderControl и необходимых модулей&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Прежде чем переходить к установке phpuc следует проверить наличие требуемых модулей, и установить/обновить недостающие (может потребоваться обновление xdebug и pear installer):&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo apt-get install php5-&lt;b&gt;xdebug&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install &lt;b&gt;PhpDocumentor&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install &lt;b&gt;PHP_CodeSniffer&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pecl install pecl/&lt;b&gt;xdebug&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;pear channel-discover pear.phpunit.de&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;pear install phpunit/&lt;b&gt;PHPUnit&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install phpunit/&lt;b&gt;phpcpd&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear &lt;b&gt;upgrade pear&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install phpunit/&lt;b&gt;PHP_CodeBrowser&lt;/b&gt;&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Далее можно перейти к установке phpuc (на момент написания использовалась версия 0.6.1beta1):&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear channel-discover components.ez.no&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear channel-discover pear.phpundercontrol.org&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install --alldeps phpuc/phpUnderControl-beta&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;А также установить дополнительные модули, поддержка которых в phpUnderControl на данный момент реализована лишь частично (требуется ручная правка конфигов):&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear channel-discover pear.phpmd.org&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear channel-discover pear.pdepend.org&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install --alldeps phpmd/PHP_PMD&lt;/kbd&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo pear install --alldeps phpunit/PHPCPD&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;phpuc представляет собой консольную утилиту для взаимодействия с установленной версией CC. Следующая команда скопирует набор дополнительных файлов и шаблонов для веб-интерфейса в каталоги с установленной копией CC:&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo phpuc install /opt/cruisecontrol&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="projects"&gt;Добавление проектов&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Утилита phpuc также предоставляет команды для быстрого добавления проектов под управление ci-сервера (следующая команда - это одна строка, отформатированная для удобства чтения):&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;&lt;br /&gt;    sudo phpuc project&lt;br /&gt;        --ant-script /opt/cruisecontrol/apache-ant-1.7.0/bin/ant&lt;br /&gt;        --version-control svn&lt;br /&gt;        --version-control-url file://localhost/home/user/svn/myProjectName/trunk&lt;br /&gt;        --coding-guideline Zend&lt;br /&gt;        --source-dir application&lt;br /&gt;        --test-dir tests&lt;br /&gt;        --project-name myProjectName&lt;br /&gt;        /opt/cruisecontrol&lt;br /&gt;    &lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;В результате работы данной команды&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;в каталоге projects CC-сервера будут созданы подкаталоги для указанного проекта&lt;/li&gt;&lt;br /&gt;&lt;li&gt;в конфигурационный файл СС будет добавлена новая секция &amp;lt;project/&amp;gt; (см. &lt;a href="#appendix-b"&gt;приложение Б&lt;/a&gt;). Стоит отметить что нода &amp;lt;shedule/&amp;gt; отвечает за выполнение запланированных для проекта действий (в данном примере каждые 300 сек. будет запускаться указанный ant-скрипт)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;в каталоге проекта будет создан файл build.xml (см. &lt;a href="#appendix-c"&gt;приложение В&lt;/a&gt;), содержащий ряд заданий для последующих регулярных сборок проекта&lt;/li&gt;&lt;br /&gt;&lt;li&gt;выполнена команда svn checkout&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Для удаления проекта следует использовать команду&lt;br /&gt;&lt;br /&gt;    &lt;kbd class="cli"&gt;sudo phpuc delete myProjectName&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="project-setup"&gt;Настройка проектов&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;На данном этапе мы должны получить готовую автоматическую систему сборки и тестирования проектов, однако она может нуждаться в дополнительных доработках. В частности для цели lint (файл build.xml проекта) можно исключить из списка проверяемых путей некоторые каталоги (например каталог с дистрибутивом Zend) - это уменьшит время сборки:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;target name="lint"&amp;gt;&lt;br /&gt;    &amp;lt;apply executable="php" dir="${basedir}/source" failonerror="on" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="-l"/&amp;gt;&lt;br /&gt;      &amp;lt;fileset dir="${basedir}/source"&amp;gt;&lt;br /&gt;        &amp;lt;include name="**/*.php"/&amp;gt;&lt;br /&gt;        &amp;lt;exclude name="library/Zend/**/*.php"/&amp;gt;&lt;br /&gt;      &amp;lt;/fileset&amp;gt;&lt;br /&gt;    &amp;lt;/apply&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Для публикации отчетов о проблемах кода (phpmd) следует добавить новую цель:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;  &amp;lt;target name="phpmd"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpmd" dir="${basedir}/source"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="application&lt;br /&gt;                 xml&lt;br /&gt;                 codesize,unusedcode,naming&lt;br /&gt;                 --reportfile ${basedir}/build/logs/phpmd.xml"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;А также не забыть указать её в зависимостях цели сборки по умолчанию:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;target name="build" depends="checkout,lint,php-documentor,php-codesniffer,phpunit,phpcpd,&lt;b&gt;phpmd&lt;/b&gt;,pdepend"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Для публикации отчетов о дублировании кода (phpcpd) нужно также добавить вручную новую цель в файл build.xml:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;  &amp;lt;target name="phpcpd" &amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpcpd" failonerror="false"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--log-pmd ${basedir}/build/logs/pmd-cpd.xml&lt;br /&gt;                 ${basedir}/source/application" /&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;А также не забыть указать её в зависимостях цели сборки по умолчанию:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;target name="build" depends="checkout,lint,php-documentor,php-codesniffer,phpunit,&lt;b&gt;phpcpd&lt;/b&gt;,phpmd,pdepend"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Для построении графиков внутренних зависимостей кода (pdepend) нужно добавить следующую цель в build.xml:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;  &amp;lt;target name="pdepend" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="pdepend" dir="${basedir}/source" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--summary-xml=${basedir}/build/logs/pdepend.xml&lt;br /&gt;                 --jdepend-chart=${basedir}/build/graph/jdepend.svg&lt;br /&gt;                 --overview-pyramid=${basedir}/build/graph/overview-pyramid.svg&lt;br /&gt;                 --coderank-mode=inheritance,property,method&lt;br /&gt;                 application" /&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;А также не забыть указать её в зависимостях цели сборки по умолчанию:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;target name="build" depends="checkout,lint,php-documentor,php-codesniffer,phpunit,phpcpd,phpmd,&lt;b&gt;pdepend&lt;/b&gt;"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Кроме того, для публикации этих графиков на странице метрик, следует добавить в ноду &amp;lt;publishers/&amp;gt; соответствующего проекта в файле config.xml следующую строку:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;publishers&amp;gt;&lt;br /&gt;      ...&lt;br /&gt;      &amp;lt;artifactspublisher subdirectory="graph" dest="artifacts/${project.name}" dir="projects/${project.name}/build/graph"/&amp;gt;&lt;br /&gt;      ...&lt;br /&gt;    &amp;lt;/publishers&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Можно добавить и другие цели, которые могут потребоваться для сборки проекта, например создание необходимых каталогов, установка прав на файлы и каталоги, подготовка БД, выполнение других скриптов, минимизация css, js и др.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Наконец, есть возможность рассылать уведомления об удачных и неудачных сборках на email, jabber и др. Ниже пример для рассылки e-mail уведомлений:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;publishers&amp;gt;  &lt;br /&gt;    ...&lt;br /&gt;      &amp;lt;email mailhost="localhost"&lt;br /&gt;            returnaddress="cruisecontrol@my.marketgid.net"&lt;br /&gt;            buildresultsurl="http://localhost:8080/cruisecontrol/buildresults/mgtest"&lt;br /&gt;            skipusers="true" spamwhilebroken="true"&amp;gt;&lt;br /&gt;         &amp;lt;map alias="management" address="root@localhost" /&amp;gt;&lt;br /&gt;         &amp;lt;map alias="qa" address="user@localhost" /&amp;gt;&lt;br /&gt;         &amp;lt;map alias="developer" address="user@my.marketgid.net" /&amp;gt;&lt;br /&gt;         &amp;lt;always address="management" /&amp;gt;&lt;br /&gt;         &amp;lt;success address="qa" /&amp;gt;&lt;br /&gt;         &amp;lt;failure address="developer" reportWhenFixed="true" /&amp;gt;&lt;br /&gt;       &amp;lt;/email&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;    &amp;lt;/publishers&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;В данном случае определены 3 группы получателей; первая группа management получает уведомления о всех сборках, вторая группа qa только об удачных сборках, и третья группа developer о неудачных.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Примеры окончательного варианта файлов настроек config.xml и build.xml в &lt;a href="#appendix-d"&gt;приложении Г&lt;/a&gt; и &lt;a href="#appendix-e"&gt;приложении Д&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="links"&gt;Ссылки&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;dl&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://habrahabr.ru/blogs/php/68571/"&gt;http://habrahabr.ru/blogs/php/68571/&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;на русском, есть неточности&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://nohn.net/blog/view/id/cruisecontrol_ant_and_phpunit"&gt;http://nohn.net/blog/view/id/cruisecontrol_ant_and_phpunit&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;настройка phpunit+ant, рассылка email-ов&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://www.phpunit.de/manual/3.2/en/continuous-integration.html"&gt;http://www.phpunit.de/manual/3.2/en/continuous-integration.html&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;пример cli для phpuc (создание проекта в сс)&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://recursive-design.com/blog/2011/05/13/continuous-integration-for-php-with-php-under-control/"&gt;http://recursive-design.com/blog/2011/05/13/continuous-integration-for-php-with-php-under-control/&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;подробное руководство&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://techportal.ibuildings.com/2009/03/03/getting-started-with-phpundercontrol/"&gt;http://techportal.ibuildings.com/2009/03/03/getting-started-with-phpundercontrol/&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;неполный мануал и пример выполнения sql-кода в ant&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://topecoders.blogspot.com/2010/05/how-to-configure-phpundercontrol.html"&gt;http://topecoders.blogspot.com/2010/05/how-to-configure-phpundercontrol.html&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;пример cli phpuc для zend, добавление нового таба&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://criticallog.thornet.net/2010/03/02/integrate-php_depend-with-phpundercontrol/"&gt;http://criticallog.thornet.net/2010/03/02/integrate-php_depend-with-phpundercontrol/&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;настройка pdepend (+см. комментарии)&lt;/dd&gt;&lt;br /&gt;    &lt;dt&gt;&lt;a href="http://zendframework.ru/articles/continuous-integration-and-cruisecontrol"&gt;http://zendframework.ru/articles/continuous-integration-and-cruisecontrol&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;    &lt;dd&gt;CC с учетом специфики zf&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="appendix-a"&gt;Приложение А - скрипт для автоматического запуска CC при загрузке ОС&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Скрипт отличается от &lt;a href="http://confluence.public.thoughtworks.org/display/CC/RunningCruiseControlFromUnixInit"&gt;источника&lt;/a&gt; установленными значениями переменных, а также опцией команды su -p, что решает проблему передачи переменной окружения JAVA_HOME серверу CC. Стоить отметить что инициализацию переменных можно вынести в отдельный файл /etc/default/cruisecontrol. Значения, указанные в этом файле, будут иметь приоритет (имеет смысл воспользоваться этой возможностью, если принято решение собрать deb-пакет для установки сервера CC).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;#content of /opt/cruisecontrol/init script&lt;br /&gt;# chkconfig: 345 99 05&lt;br /&gt;# description: CruiseControl build loop (see /home/tools)&lt;br /&gt;&lt;br /&gt;# CruiseControl Unix Startup Script Version 2.1&lt;br /&gt;#&lt;br /&gt;# based on http://confluence.public.thoughtworks.org/display/CC/UnixStartupScriptVersion1.x&lt;br /&gt;# adapted for multiple projects&lt;br /&gt;# also based on the file attached to the above page created by Jerome Lacoste&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# CruiseControl startup: Startup and kill script for Cruise Control&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;###################################################################################################&lt;br /&gt;# USER CONFIGURATION&lt;br /&gt;#&lt;br /&gt;# Fill in these values for your Cruise Control setup&lt;br /&gt;&lt;br /&gt;# What user will Cruise Control run as?  The user will need permission to write and modify files&lt;br /&gt;# in the next entries.&lt;br /&gt;CC_USER=cruisecontrol&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Where is the CC startup script located?&lt;br /&gt;CC_INSTALL_DIR=/opt/cruisecontrol&lt;br /&gt;&lt;br /&gt;# In what directory is the config.xml file located for CC?&lt;br /&gt;# default: CC_WORK_DIR=$CC_INSTALL_DIR&lt;br /&gt;CC_WORK_DIR=$CC_INSTALL_DIR&lt;br /&gt;&lt;br /&gt;# Where will the cruisecontrol.log file be located?&lt;br /&gt;# default: CC_LOGFILE_DIR=$CC_INSTALL_DIR&lt;br /&gt;CC_LOGFILE_DIR=$CC_INSTALL_DIR&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#######################&lt;br /&gt;# ENVIRONMENT ADDITIONS&lt;br /&gt;&lt;br /&gt;# Add environement variables here that are needed by your build.&lt;br /&gt;# example:&lt;br /&gt;#  export JAVA_HOME=/usr/local/java&lt;br /&gt;#&lt;br /&gt;# or like this for local variables ONLY used in this file:&lt;br /&gt;#  JAVA_HOME=/usr/local/java&lt;br /&gt;JAVA_HOME=/usr/lib/jvm/java-6-sun&lt;br /&gt;export JAVA_HOME&lt;br /&gt;&lt;br /&gt;# Add path to additional executables needed for project build.  See PATH entry below for base config.&lt;br /&gt;# No additional action taken when blank.&lt;br /&gt;PATH_ADDITIONS=&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;##############################&lt;br /&gt;# CRUISE CONTROL PORT SETTINGS&lt;br /&gt;&lt;br /&gt;# Port for Jetty reporting application.  You can access it by going to http://localhost:8080&lt;br /&gt;# default CC_WEBPORT=8080&lt;br /&gt;CC_WEBPORT=8080&lt;br /&gt;&lt;br /&gt;# JMX port for webapp and Java Management eXtensions (JMX).  You can access it by going to http://localhost:8080&lt;br /&gt;# Change only if this port is in use as the webapp will also need modification.&lt;br /&gt;# default CC_JMXPORT=8082&lt;br /&gt;CC_JMXPORT=8082&lt;br /&gt;&lt;br /&gt;# RMI port for control via Java's Remote Management Interface (RMI)&lt;br /&gt;# Leave blank to disable.&lt;br /&gt;CC_RMIPORT=&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;###################################################################################################&lt;br /&gt;# DO NOT MODIFY ENTRIES BELOW THIS LINE&lt;br /&gt;&lt;br /&gt;NAME=cruisecontrol&lt;br /&gt;DESC="CruiseControl - continuous integration build loop"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PATH=/sbin:/usr/sbin:/usr/bin:/bin&lt;br /&gt;# add additions if variable has text defined&lt;br /&gt;if [ -n "$PATH_ADDITIONS" ]; then&lt;br /&gt;    PATH=$PATH_ADDITIONS:$PATH&lt;br /&gt;fi&lt;br /&gt;export PATH&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CC_DAEMON=$CC_INSTALL_DIR/cruisecontrol.sh&lt;br /&gt;&lt;br /&gt;CC_CONFIG_FILE=$CC_WORK_DIR/config.xml&lt;br /&gt;&lt;br /&gt;CC_LOG_FILE=$CC_LOGFILE_DIR/cruisecontrol.log&lt;br /&gt;&lt;br /&gt;CC_COMMAND="$CC_DAEMON -configfile $CC_CONFIG_FILE -webport $CC_WEBPORT -jmxport $CC_JMXPORT -rmiport $CC_RMIPORT"&lt;br /&gt;&lt;br /&gt;# overwrite settings from default file&lt;br /&gt;if [ -f /etc/default/cruisecontrol ]; then&lt;br /&gt;  . /etc/default/cruisecontrol&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# does the executable exist?&lt;br /&gt;test -f $CC_DAEMON || (echo "The executable $CC_DAEMON does not exist!" &amp;amp;&amp;amp; exit 0)&lt;br /&gt;&lt;br /&gt;if [ `id -u` -ne 0 ]; then&lt;br /&gt;        echo "Not starting/stopping $DESC, you are not root."&lt;br /&gt;        exit 4&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# Get the PID output from the startup script&lt;br /&gt;if [ -f $CC_INSTALL_DIR/cc.pid ]; then&lt;br /&gt; CC_PID=`cat $CC_INSTALL_DIR/cc.pid`&lt;br /&gt;else&lt;br /&gt; echo "No cc.pid file found.  CC process may not be controllable from this script!"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt;&lt;br /&gt;  'start')&lt;br /&gt;    cd $CC_INSTALL_DIR&lt;br /&gt;    # echo "CC environtment at startup" &amp;amp;gt; cc.startup.env&lt;br /&gt;    # env &amp;amp;gt;&amp;amp;gt; cc.startup.env&lt;br /&gt;    su $CC_USER -p -c "/bin/sh -c \"$CC_COMMAND &amp;amp;gt;&amp;amp;gt; $CC_LOG_FILE 2&amp;amp;gt;&amp;amp;1\"" &amp;amp; RETVAL=$?&lt;br /&gt;    echo "$NAME started with jmx on port ${CC_JMXPORT}"&lt;br /&gt;    ;;&lt;br /&gt;&lt;br /&gt;  'stop')&lt;br /&gt;    if [ -n "$CC_PID" ] &amp;amp;&amp;amp; ps -p ${CC_PID} &amp;amp;gt; /dev/null ; then&lt;br /&gt;     kill -9 ${CC_PID}&lt;br /&gt;      $0 status&lt;br /&gt;      RETVAL=$?&lt;br /&gt;    else&lt;br /&gt;      echo "$NAME is not running"&lt;br /&gt;      RETVAL=1&lt;br /&gt;    fi&lt;br /&gt;    ;;&lt;br /&gt;&lt;br /&gt;  'status')&lt;br /&gt;    if [ -n "$CC_PID" ] &amp;amp;&amp;amp; ps -p ${CC_PID} &amp;amp;gt; /dev/null ; then&lt;br /&gt;      echo $NAME \(pids $CC_PID\) is running&lt;br /&gt;      RETVAL=0&lt;br /&gt;    else&lt;br /&gt;      echo "$NAME is stopped"&lt;br /&gt;      RETVAL=1&lt;br /&gt;    fi&lt;br /&gt;    ;;&lt;br /&gt;&lt;br /&gt;  'restart')&lt;br /&gt;    $0 stop &amp;amp;&amp;amp; $0 start&lt;br /&gt;    RETVAL=$?&lt;br /&gt;    ;;&lt;br /&gt;&lt;br /&gt;  *)&lt;br /&gt;    echo "Usage: $0 { start | stop | status | restart }"&lt;br /&gt;    exit 1&lt;br /&gt;    ;;&lt;br /&gt;esac&lt;br /&gt;#echo ending $0 $$....&lt;br /&gt;exit 0;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="appendix-b"&gt;Приложение Б - project-секция config.xml для проекта myProjectName&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;cruisecontrol&amp;gt;&lt;br /&gt;...&lt;br /&gt;  &amp;lt;project name="myProjectName" buildafterfailed="false"&amp;gt;&lt;br /&gt;    &amp;lt;listeners&amp;gt;&lt;br /&gt;      &amp;lt;currentbuildstatuslistener file="logs/${project.name}/status.txt"/&amp;gt;&lt;br /&gt;    &amp;lt;/listeners&amp;gt;&lt;br /&gt;    &amp;lt;modificationset&amp;gt;&lt;br /&gt;      &amp;lt;svn localWorkingCopy="/opt/cruisecontrol/projects/myProjectName/source"/&amp;gt;&lt;br /&gt;    &amp;lt;/modificationset&amp;gt;&lt;br /&gt;    &amp;lt;bootstrappers&amp;gt;&lt;br /&gt;      &amp;lt;svnbootstrapper localWorkingCopy="/opt/cruisecontrol/projects/myProjectName/source"/&amp;gt;&lt;br /&gt;    &amp;lt;/bootstrappers&amp;gt;&lt;br /&gt;    &amp;lt;schedule interval="300"&amp;gt;&lt;br /&gt;      &amp;lt;ant buildfile="projects/${project.name}/build.xml" antscript="/opt/cruisecontrol/apache-ant-1.7.0/bin/ant"/&amp;gt;&lt;br /&gt;    &amp;lt;/schedule&amp;gt;&lt;br /&gt;    &amp;lt;log dir="logs/${project.name}"&amp;gt;&lt;br /&gt;      &amp;lt;merge dir="projects/${project.name}/build/logs/"/&amp;gt;&lt;br /&gt;    &amp;lt;/log&amp;gt;&lt;br /&gt;    &amp;lt;publishers&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher dir="projects/${project.name}/build/api" dest="artifacts/${project.name}" subdirectory="api"/&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher dir="projects/${project.name}/build/coverage" dest="artifacts/${project.name}" subdirectory="coverage"/&amp;gt;&lt;br /&gt;      &amp;lt;execute command="phpcb --log projects/${project.name}/build/logs --source projects/${project.name}/source/application --output projects/${project.name}/build/php-code-browser"/&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher dir="projects/${project.name}/build/php-code-browser" dest="artifacts/${project.name}" subdirectory="php-code-browser"/&amp;gt;&lt;br /&gt;      &amp;lt;execute command="/usr/bin/phpuc graph logs/${project.name} artifacts/${project.name}"/&amp;gt;&lt;br /&gt;    &amp;lt;/publishers&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&amp;lt;/cruisecontrol&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="appendix-c"&gt;Приложение В - сгенерированный конфигурационный файл build.xml для проекта myProjectName&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project name="myProjectName" default="build" basedir="."&amp;gt;&lt;br /&gt;  &amp;lt;target name="build" depends="checkout,lint,php-documentor,php-codesniffer,phpunit"/&amp;gt;&lt;br /&gt;  &amp;lt;target name="checkout"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="svn" dir="${basedir}/source" failonerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="up"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="lint"&amp;gt;&lt;br /&gt;    &amp;lt;apply executable="php" dir="${basedir}/source" failonerror="on" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="-l"/&amp;gt;&lt;br /&gt;      &amp;lt;fileset dir="${basedir}/source"&amp;gt;&lt;br /&gt;        &amp;lt;include name="**/*.php"/&amp;gt;&lt;br /&gt;      &amp;lt;/fileset&amp;gt;&lt;br /&gt;    &amp;lt;/apply&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="php-documentor" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpdoc" dir="${basedir}/source" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--title '${ant.project.name}' -ue on -t ${basedir}/build/api -d application -tb '/usr/share/php/data/phpUnderControl/data/phpdoc' -o HTML:Phpuc:phpuc"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="php-codesniffer" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpcs" dir="${basedir}/source" output="${basedir}/build/logs/checkstyle.xml" error="/tmp/checkstyle.error.log"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--report=checkstyle --standard=Zend application"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="phpunit" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpunit" dir="${basedir}/source" failonerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line=" --log-junit ${basedir}/build/logs/phpunit.xml --coverage-clover ${basedir}/build/logs/phpunit.coverage.xml --coverage-html ${basedir}/build/coverage tests"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="appendix-d"&gt;Приложение Г - пример окончательного варианта файла настройки проекта в config.xml&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;cruisecontrol&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;  &amp;lt;project name="myProjectName" buildafterfailed="false"&amp;gt;&lt;br /&gt;    &amp;lt;listeners&amp;gt;&lt;br /&gt;      &amp;lt;currentbuildstatuslistener file="logs/${project.name}/status.txt"/&amp;gt;&lt;br /&gt;    &amp;lt;/listeners&amp;gt;&lt;br /&gt;    &amp;lt;modificationset&amp;gt;&lt;br /&gt;      &amp;lt;svn localWorkingCopy="/opt/cruisecontrol/projects/myProjectName/source"/&amp;gt;&lt;br /&gt;    &amp;lt;/modificationset&amp;gt;&lt;br /&gt;    &amp;lt;bootstrappers&amp;gt;&lt;br /&gt;      &amp;lt;svnbootstrapper localWorkingCopy="/opt/cruisecontrol/projects/myProjectName/source"/&amp;gt;&lt;br /&gt;    &amp;lt;/bootstrappers&amp;gt;&lt;br /&gt;    &amp;lt;schedule interval="300"&amp;gt;&lt;br /&gt;      &amp;lt;ant buildfile="projects/${project.name}/build.xml" antscript="/opt/cruisecontrol/apache-ant-1.7.0/bin/ant"/&amp;gt;&lt;br /&gt;    &amp;lt;/schedule&amp;gt;&lt;br /&gt;    &amp;lt;log dir="logs/${project.name}"&amp;gt;&lt;br /&gt;      &amp;lt;merge dir="projects/${project.name}/build/logs/"/&amp;gt;&lt;br /&gt;    &amp;lt;/log&amp;gt;&lt;br /&gt;    &amp;lt;publishers&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher dir="projects/${project.name}/build/api" dest="artifacts/${project.name}" subdirectory="api"/&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher dir="projects/${project.name}/build/coverage" dest="artifacts/${project.name}" subdirectory="coverage"/&amp;gt;&lt;br /&gt;      &amp;lt;execute command="phpcb --log projects/${project.name}/build/logs --source projects/${project.name}/source --output projects/${project.name}/build/php-code-browser"/&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher dir="projects/${project.name}/build/php-code-browser" dest="artifacts/${project.name}" subdirectory="php-code-browser"/&amp;gt;&lt;br /&gt;      &amp;lt;execute command="/usr/bin/phpuc graph logs/${project.name} artifacts/${project.name}"/&amp;gt;&lt;br /&gt;      &amp;lt;artifactspublisher subdirectory="graph" dest="artifacts/${project.name}" dir="projects/${project.name}/build/graph"/&amp;gt;&lt;br /&gt;      &amp;lt;email mailhost="localhost"&lt;br /&gt;           returnaddress="cruisecontrol@my.marketgid.net"&lt;br /&gt;           buildresultsurl="http://localhost:8080/cruisecontrol/buildresults/myProjectName"&lt;br /&gt;           skipusers="true" spamwhilebroken="true"&amp;gt;&lt;br /&gt;        &amp;lt;map alias="management" address="root@localhost" /&amp;gt;&lt;br /&gt;        &amp;lt;map alias="qa" address="user@localhost" /&amp;gt;&lt;br /&gt;        &amp;lt;map alias="developer" address="user@my.marketgid.net" /&amp;gt;&lt;br /&gt;        &amp;lt;always address="management" /&amp;gt;&lt;br /&gt;        &amp;lt;success address="qa" /&amp;gt;&lt;br /&gt;        &amp;lt;failure address="developer" reportWhenFixed="true" /&amp;gt;&lt;br /&gt;      &amp;lt;/email&amp;gt;&lt;br /&gt;    &amp;lt;/publishers&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&amp;lt;/cruisecontrol&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id="appendix-e"&gt;Приложение Д - пример окончательного варианта файла build.xml&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project name="mgtest" default="build" basedir="."&amp;gt;&lt;br /&gt;  &amp;lt;target name="build" depends="checkout,mkdirs,lint,php-documentor,php-codesniffer,phpunit,phpcpd,phpmd,pdepend"/&amp;gt;&lt;br /&gt;  &amp;lt;target name="checkout"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="svn" dir="${basedir}/source" failonerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="up"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="lint"&amp;gt;&lt;br /&gt;    &amp;lt;apply executable="php" dir="${basedir}/source" failonerror="on" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="-l"/&amp;gt;&lt;br /&gt;      &amp;lt;fileset dir="${basedir}/source"&amp;gt;&lt;br /&gt;        &amp;lt;include name="**/*.php"/&amp;gt;&lt;br /&gt;        &amp;lt;exclude name="library/Zend/**/*.php"/&amp;gt;&lt;br /&gt;      &amp;lt;/fileset&amp;gt;&lt;br /&gt;    &amp;lt;/apply&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="mkdirs"&amp;gt;&lt;br /&gt;    &amp;lt;mkdir dir="${basedir}/source/cache/models"/&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="php-documentor" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpdoc" dir="${basedir}/source" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--title '${ant.project.name}' &lt;br /&gt;                 -ue on&lt;br /&gt;                 -t ${basedir}/build/api&lt;br /&gt;                 -d application&lt;br /&gt;                 -tb '/usr/share/php/data/phpUnderControl/data/phpdoc'&lt;br /&gt;                 -o HTML:Phpuc:phpuc"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="php-codesniffer" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpcs" dir="${basedir}/source" output="${basedir}/build/logs/checkstyle.xml" error="/tmp/checkstyle.error.log"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--report=checkstyle&lt;br /&gt;                 --standard=Zend&lt;br /&gt;                 application"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="phpmd"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpmd" dir="${basedir}/source"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="application&lt;br /&gt;                 xml&lt;br /&gt;                 codesize,unusedcode,naming&lt;br /&gt;                 --reportfile ${basedir}/build/logs/phpmd.xml"/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="phpunit" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpunit" dir="${basedir}/source/tests" failonerror="false"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--bootstrap ${basedir}/source/tests/bootstrap.php&lt;br /&gt;                 --log-junit ${basedir}/build/logs/phpunit.xml&lt;br /&gt;                 --coverage-clover ${basedir}/build/logs/phpunit.coverage.xml&lt;br /&gt;                 --coverage-html ${basedir}/build/coverage&lt;br /&gt;                 ."/&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="phpcpd" &amp;gt;&lt;br /&gt;    &amp;lt;exec executable="phpcpd" failonerror="false"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--log-pmd ${basedir}/build/logs/pmd-cpd.xml&lt;br /&gt;                 ${basedir}/source/application" /&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;target name="pdepend" depends="lint"&amp;gt;&lt;br /&gt;    &amp;lt;exec executable="pdepend" dir="${basedir}/source" logerror="on"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="--summary-xml=${basedir}/build/logs/pdepend.xml&lt;br /&gt;                 --jdepend-chart=${basedir}/build/graph/jdepend.svg&lt;br /&gt;                 --overview-pyramid=${basedir}/build/graph/overview-pyramid.svg&lt;br /&gt;                 --coderank-mode=inheritance,property,method&lt;br /&gt;                 application" /&amp;gt;&lt;br /&gt;    &amp;lt;/exec&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-8908986201378529009?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/8908986201378529009/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=8908986201378529009' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/8908986201378529009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/8908986201378529009'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/09/configure-phpundercontrol-install-and.html' title='Установка и настройка сервера непрерывной интеграции phpUnderControl'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-6SDiQK11DIQ/ToWsgkw1ARI/AAAAAAAABOc/aYe2SJaj4io/s72-c/img-001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-3426702254174110609</id><published>2011-01-18T00:01:00.000-08:00</published><updated>2011-01-18T00:22:56.156-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='masqmail.route'/><category scheme='http://www.blogger.com/atom/ns#' term='pipe'/><category scheme='http://www.blogger.com/atom/ns#' term='msmtp'/><category scheme='http://www.blogger.com/atom/ns#' term='masqmail'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Отправка e-mail сообщений на несколько smtp-серверов с помощью masqmail и msmtp</title><content type='html'>Я придерживаюсь мнения, что провайдер должен предоставлять почтовый relay-сервер для корреспонденции своих клиентов. Однако встречаются провайдеры, у которых на этот счет другое мнение (один из таких - Укртелеком). С другой стороны, большинство бесплатных почтовых серверов принимают почту по smtp (с указанием имени и пароля пользователя). Но так как к моменту подключения ноутбука к сети интернет, в очереди будут сообщения написанные с нескольких почтовых аккаунтов, то, соответственно, потребуется отправка через несколько smtp-серверов. С этой задачей хорошо справляется msmtp. Чтобы добавить такую возможность к masqmail, следует написать route-файл следующего вида:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;sudo cat &gt; /etc/masqmail/route.utel-unlim&lt;br /&gt;# mail_host="relay.ukrpost.ua"&lt;br /&gt;protocol="pipe"&lt;br /&gt;pipe="/usr/bin/msmtp -f ${return_path} -- ${rcpt}"&lt;br /&gt;&lt;span style="color:#BBB"&gt;^C&lt;/span&gt;&lt;br /&gt;&lt;/kbd&gt;&lt;br /&gt;Так как будет использоваться общесистемный конфиг msmtp, то потребуется создать (или скопировать из домашнего каталога) файл /etc/msmtprc с нужными настройками.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;см. также&lt;/i&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/mta-for-home-network-servers-or.html"&gt;Автоматическая отправка почты на комьютере без постоянного подключения к интернет (masqmail, procmail)&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/msmtp-config-for-ukrnet-and-gmailcom.html"&gt;Настройка msmtp для отправки сообщений через несколько серверов&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-3426702254174110609?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/3426702254174110609/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=3426702254174110609' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/3426702254174110609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/3426702254174110609'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/01/sending-e-mail-through-multiple-servers.html' title='Отправка e-mail сообщений на несколько smtp-серверов с помощью masqmail и msmtp'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-2277192304648440047</id><published>2011-01-17T06:46:00.000-08:00</published><updated>2011-01-18T00:27:17.548-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mta'/><category scheme='http://www.blogger.com/atom/ns#' term='procmail'/><category scheme='http://www.blogger.com/atom/ns#' term='masqmail.route'/><category scheme='http://www.blogger.com/atom/ns#' term='ppp'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='masqmail'/><category scheme='http://www.blogger.com/atom/ns#' term='masqmail.conf'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='inetd'/><title type='text'>Автоматическая отправка почты на комьютере без постоянного подключения к интернет (masqmail, procmail)</title><content type='html'>Данный метод отправки почты лучше всего подойдет для компьютеров, работа за которыми производится под несколькими учетными записями, и которые не имеют постоянного подключения к сети интернет, а подключаются к различным провайдерам лишь периодически (например через ppp). В таком случае, после отправки сообщения пользователем, если подключение к интернет активно, оно будет отправлено незамедлительно, в противном случае оно попадет в очередь сообщений, а затем, при активации подключения, будет передано почтовому серверу провайдера (настройки подключения к серверу указываются отдельно для каждого провайдера).&lt;br /&gt;За прием и обработку очереди сообщений отвечает почтовый сервер masqmail, который был создан именно для таких случаев. В debian начальная настройка производится при установке этого пакета (в дальнейшем его можно повторно перенастроить выполнив команду &lt;kbd&gt;dpkg-reconfigure masqmail&lt;/kbd&gt;). Часть опций, отвечающих за интеграцию в систему debian записывается в файл /etc/default/masqmail:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ cat /etc/default/masqmail&lt;/kbd&gt;&lt;samp&gt;&lt;br /&gt;#&lt;br /&gt;# better use 'dpkg-reconfigure masqmail'&lt;br /&gt;# instead of editing by hand&lt;br /&gt;#&lt;br /&gt;INIT_SMTP_DAEMON="false"&lt;br /&gt;INIT_QUEUE_DAEMON="false"&lt;br /&gt;INIT_FETCH_DAEMON="false"&lt;br /&gt;#&lt;br /&gt;QUEUE_DAEMON_IVAL="-q10m"&lt;br /&gt;FETCH_DAEMON_IVAL="-go5m"&lt;br /&gt;#&lt;br /&gt;IPUP_RUNQUEUE="true"&lt;br /&gt;IPUP_FETCH="false"&lt;br /&gt;IFUP_IFACES="all"&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;&lt;br /&gt;В моем случае при старте системы smtp-демон не запускается (стартует из inetd при запросе), получение почты с других серверов также отключено (для этих целей используется fetchmail). Обработка очереди производится при поднятии любого интерфейса (отрабатывают скрипты, установленные в /etc/network/if-up.d/ и /etc/ppp/ip-up.d/).&lt;br /&gt;Главный конфиг masqmail выглядит так:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ cat /etc/masqmail/masqmail.conf&lt;/kbd&gt;&lt;samp&gt;&lt;br /&gt;### BEGIN DEBCONF SECTION&lt;br /&gt;# Do not edit within this region if you want your changes to be preserved by&lt;br /&gt;# debconf.  Instead, make changes after the "### END DEBCONF SECTION" line.&lt;br /&gt;host_name="kirill-u100"&lt;br /&gt;local_hosts="localhost;kirill-u100;localhost.localdomain"&lt;br /&gt;local_nets=""&lt;br /&gt;listen_addresses="localhost:25"&lt;br /&gt;spool_dir="/var/spool/masqmail"&lt;br /&gt;mail_dir="/var/mail"&lt;br /&gt;log_dir="/var/log/masqmail"&lt;br /&gt;do_queue=false&lt;br /&gt;use_syslog=false&lt;br /&gt;online_detect=file&lt;br /&gt;online_file="/var/run/masqmail-route"&lt;br /&gt;mbox_default=mda&lt;br /&gt;mda="/usr/bin/procmail -Y -d ${rcpt_local}"&lt;br /&gt;alias_file=/etc/aliases&lt;br /&gt;alias_local_caseless="false"&lt;br /&gt;### END DEBCONF SECTION&lt;br /&gt;#&lt;br /&gt;# include the locations of your route and get configurations here.&lt;br /&gt;# Examples:&lt;br /&gt;# online_routes.default = "/etc/masqmail/default.route"&lt;br /&gt;# online_gets.default = "/etc/masqmail/default.get"&lt;br /&gt;# You can have more of those, with '.default' replaced with other&lt;br /&gt;# names. See man 8 masqmail.conf.&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;online_routes.kyivstar-xl = "/etc/masqmail/route.kyivstar-xl"&lt;br /&gt;online_routes.utel-unlim = "/etc/masqmail/route.utel-unlim"&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;&lt;br /&gt;Файлы настроек для передачи почты разным провайдерам перечислены в конце файла (строки вида online_routes.&amp;lt;provider_name&amp;gt; = &amp;lt;config_file&amp;gt;). Где &amp;lt;provider_name&amp;gt; устанавливается опцией ipparam при запуске ppp (в соответствующем файле из /etc/ppp/peers/).&lt;br /&gt;&lt;br /&gt;Простейший пример одного из таких файлов:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ sudo cat /etc/masqmail/route.kyivstar-xl&lt;/kbd&gt;&lt;samp&gt;&lt;br /&gt;mail_host="relay.kyivstar.net"&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;&lt;br /&gt;Запуск masqmail из inetd производится следующим образом:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ cat /etc/inetd.conf | grep masqmail&lt;/kbd&gt;&lt;samp&gt;&lt;br /&gt;127.0.0.1:25 stream tcp nowait mail /usr/sbin/masqmail masqmail -bd -q -bs&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;&lt;i&gt;см. также:&lt;/i&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/system-wide-fetchmail-and-procmail.html"&gt;Автоматическое получение почты на компьютере без постоянного подключения к интернет (debian, fetchmail, procmail)&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/simple-mail-delivery-and-reading.html"&gt;Доставка и чтение почты: fetchmail, procmail, kmail&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/sending-e-mail-through-multiple-servers.html"&gt;Отправка e-mail сообщений на несколько smtp-серверов с помощью masqmail и msmtp&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-2277192304648440047?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/2277192304648440047/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=2277192304648440047' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/2277192304648440047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/2277192304648440047'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/01/mta-for-home-network-servers-or.html' title='Автоматическая отправка почты на комьютере без постоянного подключения к интернет (masqmail, procmail)'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-7027645592059111863</id><published>2011-01-13T03:23:00.000-08:00</published><updated>2011-01-17T07:09:23.523-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='procmail'/><category scheme='http://www.blogger.com/atom/ns#' term='pop3'/><category scheme='http://www.blogger.com/atom/ns#' term='maildir'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='ukr.net'/><category scheme='http://www.blogger.com/atom/ns#' term='fetchmail'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='imap'/><title type='text'>Автоматическое получение почты на компьютере без постоянного подключения к интернет (debian, fetchmail, procmail)</title><content type='html'>&lt;i&gt;см также: &lt;/i&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/simple-mail-delivery-and-reading.html"&gt;Доставка и чтение почты: fetchmail, procmail, kmail&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://m0squito.blogspot.com/2011/01/mta-for-home-network-servers-or.html"&gt;Автоматическая отправка почты на комьютере без постоянного подключения к интернет (masqmail)&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h4&gt;Часть 2 - общесистемное получение почты&lt;/h4&gt;&lt;br /&gt;Для автоматического получения почты с помощью fetchmail необходимо изменить несколько конфигурационных файлов.&lt;br /&gt;&lt;kbd&gt;$ vi /etc/default/fetchmail&lt;/kbd&gt;&lt;br /&gt;указать &lt;kbd&gt;START_DAEMON=yes&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Создать общесистемный конфигурационный файл для fetchmail (его можно скопировать из каталога с примерами):&lt;br /&gt;&lt;kbd&gt;$ sudo cp /usr/share/doc/fetchmail/examples/fetchmailrc.example /etc/fetchmailrc&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Установить владельца и разумные права доступа к конфигурационному файлу с паролями:&lt;br /&gt;&lt;kbd&gt;$ sudo chown fetchmail:root /etc/fetchmailrc&lt;/kbd&gt;&lt;br /&gt;&lt;kbd&gt;$ sudo chmod 0600 /etc/fetchmailrc&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Добавить в этот конфиг правила приема почты из всех почтовых ящиков для всех пользователей (пример полного конфига выглядит так):&lt;br /&gt;&lt;kbd&gt;$ sudo cat /etc/fetchmailrc&lt;/kbd&gt;&lt;br /&gt;&lt;samp&gt;&lt;br /&gt;# /etc/fetchmailrc for system-wide daemon mode&lt;br /&gt;# This file must be chmod 0600, owner fetchmail&lt;br /&gt;&lt;br /&gt;set daemon 600&lt;br /&gt;set no bouncemail&lt;br /&gt;defaults:&lt;br /&gt;  antispam -1 &lt;br /&gt;  batchlimit 100&lt;br /&gt;&lt;br /&gt;poll freemail.ukr.net with proto POP3&lt;br /&gt; user 'r*******@ukr.net' there with password '********' is 'reel' here options keep&lt;br /&gt; mda 'procmail -d %T'&lt;br /&gt; user 'm*********@ukr.net' there with password '********' is 'reel' here options keep&lt;br /&gt; mda 'procmail -d %T'&lt;br /&gt;&lt;br /&gt;poll imap.gmail.com with proto IMAP&lt;br /&gt; user 'kirill.zabarniuk@gmail.com' there with password '********' is 'reel' here options keep ssl&lt;br /&gt; mda 'procmail -d %T'&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;Основное отличие от правил, находящихся в ~/.fetchmailrc - это команда запуска &lt;kbd&gt;mda 'procmail -d %T'&lt;/kbd&gt;. Ключ -d переключает procmail в режим доставки с правами получателя и с использьзованием конфига из его домашнего каталога (имя получателя будет подставлено вместо переменной %T). &lt;br /&gt;&lt;br /&gt;На данный момент fetchmail будет запускаться при старте системы в режиме демона и периодически проверять доступность почтовых серверов. Можно перенастроить его так, чтобы демон запускался при поднятии сетевого интерфейса и завершал свою работу при пропадании сети. Инструкции можно найти в /usr/share/doc/fetchmail/README.Debian.gz (описаны шаги только для отслеживания состояния интерфейсов ppp, без учета возможности подключения через eth; возможно поэтому там же говорится что такой режим работы fetchmail особых преимуществ не имеет :)).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-7027645592059111863?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/7027645592059111863/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=7027645592059111863' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/7027645592059111863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/7027645592059111863'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/01/system-wide-fetchmail-and-procmail.html' title='Автоматическое получение почты на компьютере без постоянного подключения к интернет (debian, fetchmail, procmail)'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-4778784024683241084</id><published>2011-01-12T01:40:00.000-08:00</published><updated>2011-01-12T23:48:05.723-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='procmail'/><category scheme='http://www.blogger.com/atom/ns#' term='mutt'/><category scheme='http://www.blogger.com/atom/ns#' term='maildir'/><category scheme='http://www.blogger.com/atom/ns#' term='ukr.net'/><category scheme='http://www.blogger.com/atom/ns#' term='kmail'/><category scheme='http://www.blogger.com/atom/ns#' term='fetchmail'/><category scheme='http://www.blogger.com/atom/ns#' term='masqmail'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='imap'/><title type='text'>Доставка и чтение почты: fetchmail, procmail, kmail</title><content type='html'>До недавнего момента за доставку (и отправку) почты, при подключении ноутбука к интернет, у меня отвечал masqmail. И, если я правильно ошибаюсь, в новых версиях этой программы возможность доставки решили выпилить, и порекомендовали для этих целей воспользоваться специализированными утилитами. Я решил не дожидаться момента, когда в репозиториях debian-а появится новый masqmail, и сразу перейти на рекомендуемый способ получения почты.&lt;br /&gt;Среди найденного списка программ (&lt;samp&gt;$ apt-cache search fetch mail&lt;/samp&gt;) наиболее подходящими оказались getmail4 и fetchmail. В итоге установил старый добрый fetchmail, несмотря на то что питоновский getmail4 позиционируется как более простой, и даже поддерживает Maildir из коробки.&lt;br /&gt;Итак почту я храню в ящике формата maildir:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;~/Mail/&lt;br /&gt;&amp;nbsp;drafts/&lt;br /&gt;&amp;nbsp;inbox/&lt;br /&gt;&amp;nbsp;&amp;nbsp;cur/&lt;br /&gt;&amp;nbsp;&amp;nbsp;new/&lt;br /&gt;&amp;nbsp;&amp;nbsp;tmp/&lt;br /&gt;&amp;nbsp;outbox/&lt;br /&gt;&amp;nbsp;sent-mail/&lt;br /&gt;&amp;nbsp;templates/&lt;br /&gt;&amp;nbsp;trash/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;За обработку полученной корреспонденции (распихивание её по ящикам) будет отвечать procmail (в качестве альтернативы можно выбрать maildrop, как рекомендуется в man fetchmail или другой mda).&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Часть 1 - получение почты вручную от имени пользователя&lt;/h4&gt;&lt;br /&gt;Создаем простейший конфигурационный файл для procmail (слэш в конце имени ящика указывает на то, что это ящик maildir):&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ cat &gt; ~/.procmailrc&lt;br /&gt;MAILDIR=$HOME/Mail/&lt;br /&gt;&lt;br /&gt;:0&lt;br /&gt;inbox/&lt;br /&gt;&lt;span style="color:#BBB"&gt;^C&lt;/span&gt;&lt;br /&gt;&lt;/kbd&gt;&lt;br /&gt;В результате вся обрабатываемая почта будет складываться в каталог inbox/.&lt;br /&gt;Конфиг для fetchmail можно создать при помощи утилиты fetchmailconf; вот итог её работы, подходящий под мои требования:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ cat &gt; ~/.fetchmailrc&lt;br /&gt;# Configuration created Wed Jan 12 11:10:56 2011 by fetchmailconf 1.57&lt;br /&gt;set postmaster "reel"&lt;br /&gt;set bouncemail&lt;br /&gt;set no spambounce&lt;br /&gt;set softbounce&lt;br /&gt;set properties ""&lt;br /&gt;set invisible&lt;br /&gt;&lt;br /&gt;poll freemail.ukr.net with proto POP3&lt;br /&gt;&amp;nbsp;user 'r*******@ukr.net' there with password '**********' is 'reel' here options keep stripcr&lt;br /&gt;&amp;nbsp;mda 'procmail'&lt;br /&gt;&amp;nbsp;user 'm*******@ukr.net' there with password '**********' is 'reel' here options keep&lt;br /&gt;&amp;nbsp;mda 'procmail'&lt;br /&gt;&lt;br /&gt;poll imap.gmail.com with proto IMAP&lt;br /&gt;&amp;nbsp;user 'kirill.zabarniuk@gmail.com' there with password '**********' is 'reel' here options keep ssl&lt;br /&gt;&amp;nbsp;mda 'procmail'&lt;br /&gt;&lt;span style="color:#BBB"&gt;^C&lt;/span&gt;&lt;br /&gt;&lt;/kbd&gt;&lt;br /&gt;При запуске, fetchmail будет получать почту из двух почтовых ящиков на сервере ukr.net (по протоколу pop3), и из одного ящика на gmail (по протоколу imap). Копии всех сообщений будут оставаться на сервере, а сами сообщения будут передаваться для дальнейшей обработки procmail-у.&lt;br /&gt;Имеет смысл написать пару сообщений самому себе и проверить как это работает:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ fetchmail&lt;/kbd&gt;&lt;samp&gt;&lt;br /&gt;1 сообщение (1 просмотрено) для r*******@ukr.net на freemail.ukr.net (1974 октетов).&lt;br /&gt;пропускается сообщение r*******@ukr.net@new.ukr.net:1 не очищено&lt;br /&gt;1 сообщение (1 просмотрено) для m*********@ukr.net на freemail.ukr.net (1144 октетов).&lt;br /&gt;пропускается сообщение m*********@ukr.net@new.ukr.net:1 не очищено&lt;br /&gt;1 сообщение для kirill.zabarniuk@gmail.com на imap.gmail.com.&lt;br /&gt;считывается сообщение kirill.zabarniuk@gmail.com@wy-in-f109.1e100.net:1 из 1 (1443 октетов в заголовке) (513 октетов в теле) не очищено&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;Почту я читаю с матом (mutt), но иногда пользуюсь kmail. Обычно kmail сам находит каталоги с почтой пользователя при первом запуске. Но если этого не произошло, и он решил заныкать сообщения у себя (в каталоге по умолчанию ~/.kde/share/apps/kmail/Mail/), то можно попросить его изменить путь к этому каталогу (http://kmail.kde.org/manual/faq.html#id2792815, http://forum.kde.org/viewtopic.php?f=20&amp;amp;t=84335#p140087):&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ kwriteconfig --file kmailrc --group General --key folders $HOME/Mail&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;см также &lt;a href="http://m0squito.blogspot.com/2011/01/system-wide-fetchmail-and-procmail.html"&gt;Автоматическое получение почты на компьютере без постоянного подключения к интернет&lt;/a&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-4778784024683241084?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/4778784024683241084/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=4778784024683241084' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/4778784024683241084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/4778784024683241084'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/01/simple-mail-delivery-and-reading.html' title='Доставка и чтение почты: fetchmail, procmail, kmail'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-8284053873116100547</id><published>2011-01-11T05:29:00.000-08:00</published><updated>2011-01-17T06:44:15.708-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='укрнет'/><category scheme='http://www.blogger.com/atom/ns#' term='mutt'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail.com'/><category scheme='http://www.blogger.com/atom/ns#' term='ukr.net'/><category scheme='http://www.blogger.com/atom/ns#' term='msmtp'/><category scheme='http://www.blogger.com/atom/ns#' term='укр.нет'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Настройка msmtp для отправки сообщений через несколько серверов (ukr.net, gmail.com)</title><content type='html'>Выкладываю рабочий конфиг с настройками msmtp (он не захотел с пол-пинка отправлять почту через ukr.net, а в инете готовых решений не обнаружилось):&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;$ cat ~/.msmtprc&lt;/kbd&gt;&lt;samp&gt;&lt;br /&gt;defaults&lt;br /&gt;syslog on&lt;br /&gt;&lt;br /&gt;account r*******_at_ukr.net&lt;br /&gt;from r*******@ukr.net&lt;br /&gt;host smtp.ukr.net&lt;br /&gt;protocol smtp&lt;br /&gt;auth on&lt;br /&gt;tls on&lt;br /&gt;tls_starttls off&lt;br /&gt;tls_certcheck off&lt;br /&gt;port 465&lt;br /&gt;user r*******@ukr.net&lt;br /&gt;password **********&lt;br /&gt;&lt;br /&gt;account m*********_at_ukr.net&lt;br /&gt;from m*********@ukr.net&lt;br /&gt;host smtp.ukr.net&lt;br /&gt;protocol smtp&lt;br /&gt;auth on&lt;br /&gt;tls on&lt;br /&gt;tls_starttls off&lt;br /&gt;tls_certcheck off&lt;br /&gt;port 465&lt;br /&gt;user m*********@ukr.net&lt;br /&gt;password **********&lt;br /&gt;&lt;br /&gt;account kirill.zabarniuk_at_gmail.com&lt;br /&gt;from kirill.zabarniuk@gmail.com&lt;br /&gt;host smtp.gmail.com&lt;br /&gt;protocol smtp&lt;br /&gt;auth on&lt;br /&gt;tls on&lt;br /&gt;tls_starttls on&lt;br /&gt;tls_certcheck off&lt;br /&gt;port 587&lt;br /&gt;user kirill.zabarniuk@gmail.com&lt;br /&gt;password ***********&lt;br /&gt;&lt;br /&gt;account default&lt;br /&gt;host localhost&lt;br /&gt;port 25&lt;br /&gt;auto_from on&lt;br /&gt;maildomain localhost&lt;br /&gt;&lt;/samp&gt;&lt;br /&gt;&lt;br /&gt;Подружить msmtp с ukr.net оказалось просто, ключевое слово: &lt;kbd&gt;tls_starttls off&lt;/kbd&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-8284053873116100547?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/8284053873116100547/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=8284053873116100547' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/8284053873116100547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/8284053873116100547'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/01/msmtp-config-for-ukrnet-and-gmailcom.html' title='Настройка msmtp для отправки сообщений через несколько серверов (ukr.net, gmail.com)'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-697866673658560850</id><published>2011-01-10T23:45:00.000-08:00</published><updated>2011-01-18T00:53:45.566-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mutt'/><category scheme='http://www.blogger.com/atom/ns#' term='charset'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='w3m'/><category scheme='http://www.blogger.com/atom/ns#' term='codepage'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Просмотр html-содержимого в mutt и правильная кодировка</title><content type='html'>Есть такой, очень функциональный текстовый браузер, как w3m, который, кроме всего прочего, умеет отображать картинки. Причем не только во фрэймбуффере, но и в окне терминала (в debian нужно установить пакет w3m-img):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-4PqH4Zqr4Y/TTVG7sP0_SI/AAAAAAAABLI/dyJKiaN3vcA/s1600/w3m-fb.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="http://2.bp.blogspot.com/_-4PqH4Zqr4Y/TTVG7sP0_SI/AAAAAAAABLI/dyJKiaN3vcA/s320/w3m-fb.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563430905989889314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-4PqH4Zqr4Y/TTVG73l6-XI/AAAAAAAABLQ/YKPO839BUGE/s1600/w3m-x11.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="http://1.bp.blogspot.com/_-4PqH4Zqr4Y/TTVG73l6-XI/AAAAAAAABLQ/YKPO839BUGE/s320/w3m-x11.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563430909035346290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Так вот, в debian-е, если этот пакет установлен, mutt будет использовать его при отображении html-содержимого в e-mail сообщениях. Однако, сообщения приходят в различных кодировках, а в mutt все отображается лишь в одной (utf8 по умолчанию), в результате часть сообщений оказываются нечитаемыми. Чтобы это исправить, надо добавить следующую строку в свой .mailcap:&lt;br /&gt;&lt;br /&gt;&lt;kbd&gt;cat &amp;gt;&amp;gt; ~/.mailcap&lt;br /&gt;text/html; /usr/bin/w3m -dump -I %{charset} -T text/html '%s'; copiousoutput; description=HTML Text; nametemplate=%s.html&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;"Магической" является опция &lt;kbd&gt;-I %{charset}&lt;/kbd&gt;. Результат - на картинках:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-4PqH4Zqr4Y/TTVKzcwVb2I/AAAAAAAABLY/CzWpNp2y2jE/s1600/w3m-mutt-utf8.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://2.bp.blogspot.com/_-4PqH4Zqr4Y/TTVKzcwVb2I/AAAAAAAABLY/CzWpNp2y2jE/s320/w3m-mutt-utf8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563435162438823778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-4PqH4Zqr4Y/TTVKzjs5L7I/AAAAAAAABLg/OBOnIPunJRE/s1600/w3m-mutt-koi8.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://3.bp.blogspot.com/_-4PqH4Zqr4Y/TTVKzjs5L7I/AAAAAAAABLg/OBOnIPunJRE/s320/w3m-mutt-koi8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563435164303437746" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-697866673658560850?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/697866673658560850/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=697866673658560850' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/697866673658560850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/697866673658560850'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2011/01/view-html-content-in-mutt-with-correct.html' title='Просмотр html-содержимого в mutt и правильная кодировка'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-4PqH4Zqr4Y/TTVG7sP0_SI/AAAAAAAABLI/dyJKiaN3vcA/s72-c/w3m-fb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-2663460966017396370</id><published>2010-08-19T08:15:00.000-07:00</published><updated>2010-08-19T11:19:48.122-07:00</updated><title type='text'>Установка разрешения экрана в grub2 при помощи 915resolution</title><content type='html'>Когда я был молод и глуп, я извращался с grub-ом, пытаясь получить родное разрешение в консоли linux на своем недобуке. Сейчас, благодаря поддержке KMS в ядре, это нафиг никому не нужно. Но &lt;s&gt;ебанут&lt;/s&gt; красноглазым нет покоя! Итак устанавливаем родное разрешение непосредственно для grub-а, чтобы не оскорблять свой ясный взор "замыленными" шрифтами, при выборе вариантов загрузки.&lt;br /&gt;На моем MSI Wind u100 конфиг загрузчика изменился так:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ diff -urU 4 grub.cfg-old grub.cfg&lt;br /&gt;--- grub.cfg-old        2010-08-19 18:35:57.000000000 +0300&lt;br /&gt;+++ grub.cfg    2010-08-19 18:08:23.000000000 +0300&lt;br /&gt;@@ -36,8 +36,10 @@&lt;br /&gt; insmod ext2&lt;br /&gt; set root='(hd0,msdos1)'&lt;br /&gt; search --no-floppy --fs-uuid --set d38f73d1-1c4b-4854-b640-4d80bd808903&lt;br /&gt; if loadfont /usr/share/grub/unicode.pf2 ; then&lt;br /&gt;+  insmod 915resolution&lt;br /&gt;+  915resolution 41 1024 600&lt;br /&gt;   set gfxmode=1024x600&lt;br /&gt;   load_video&lt;br /&gt;   insmod gfxterm&lt;br /&gt; fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;В debian-е для этого мне понадобилось изменить 2 файла: &lt;code&gt;/etc/default/grub&lt;/code&gt; и &lt;code&gt;/etc/grub.d/00_header&lt;/code&gt; (я слышал за это могут и руки оторвать).&lt;br /&gt;И да, перед экспериментами лучше запастись чем-нибудь вроде загрузочной флэшки, так как есть вероятность получить незагружаемую систему.&lt;br /&gt;&lt;br /&gt;В итоге:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-4PqH4Zqr4Y/TG1flnTfxfI/AAAAAAAAA_A/mVA73NImhfA/s1600/grub-1024x600.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://1.bp.blogspot.com/_-4PqH4Zqr4Y/TG1flnTfxfI/AAAAAAAAA_A/mVA73NImhfA/s320/grub-1024x600.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5507163019154540018" /&gt;&lt;/a&gt;&lt;br /&gt;(как обычно, фотографировал на калькулятор)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-2663460966017396370?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/2663460966017396370/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=2663460966017396370' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/2663460966017396370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/2663460966017396370'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2010/08/set-grub-resolution-with-915resolution.html' title='Установка разрешения экрана в grub2 при помощи 915resolution'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-4PqH4Zqr4Y/TG1flnTfxfI/AAAAAAAAA_A/mVA73NImhfA/s72-c/grub-1024x600.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-5483190758434891624</id><published>2010-07-17T06:16:00.000-07:00</published><updated>2010-07-17T07:37:48.556-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='флешка'/><category scheme='http://www.blogger.com/atom/ns#' term='автомонтирование'/><category scheme='http://www.blogger.com/atom/ns#' term='automount'/><category scheme='http://www.blogger.com/atom/ns#' term='флэшка'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматическое монтирование'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Usbmount - автоматическое монтирование флешки</title><content type='html'>В современных linux-дистрибутивах автоматическое монтирование флешек успешно реализуется с помощью HAL (или что-там-теперь-будет-вместо-него) и DE. Те бедолаги, которые не пользуются KDE/GNOME, в качестве альтернативы, могут выбрать &lt;b&gt;halevt&lt;/b&gt; (HAL-озависимый) или &lt;b&gt;autofs&lt;/b&gt; (его конфиги явно не самые дружелюбные).&lt;br /&gt;Отдельные умники пишут свои, порой довольно изощренные, наборы правил для udev (правда сами разработчики udev предостерегают от такого подхода). А наиболее ортодоксальные линуксоиды, возможно, все еще используют записи в fstab, наизусть помнят все опции mount, при этом брезгливо косятся в сторону HAL …и выгребают ряд проблем при одновременном подключении нескольких флешек, или при подключении незнакомых флешек с причудливыми таблицами разделов; и вообще ни про какое автоматическое монтирование здесь речь уже не идет.&lt;br /&gt;Оказывается, в сторонке, довольно давно, стоит готовый велосипед под названием &lt;b&gt;usbmount&lt;/b&gt; (http://usbmount.alioth.debian.org/). По сути это все те же скрипты, запускаемые через udev. Одновременное подключение флешки и телефона с 2-мя разделами прошло гладко. В общем, закомментировал пережитки прошлого в fstab (хотя usbmount его вполне уважает), и, надеюсь, забыл про монтирование флэшек на ближайшие несколько лет (хотя стоп! тут же exFAT наступает).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-5483190758434891624?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/5483190758434891624/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=5483190758434891624' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/5483190758434891624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/5483190758434891624'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2010/07/usb-flash-automount.html' title='Usbmount - автоматическое монтирование флешки'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-7901061515230702399</id><published>2010-06-30T01:04:00.000-07:00</published><updated>2010-07-02T04:44:46.596-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='master-master replication'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='мастер-мастер'/><category scheme='http://www.blogger.com/atom/ns#' term='репликация'/><title type='text'>(Не)надежность master-master репликации в mysql</title><content type='html'>Перед нами встала задача обеспечить быструю и надежную работу клиентов с одной базой данных на 2-х географически удаленных объектах. В качестве одного из вариантов рассматривалась работа с 2-мя mysql серверами, которые бы реплицировались по принципу master-master. Далее рассматривается (не)надежность такой системы при одновременном изменении одних и тех же данных.&lt;br /&gt;&lt;br /&gt;Настроим master-master репликацию (о том как это делается можно узнать из статей об &lt;a href="http://habrahabr.ru/blogs/mysql/56702/"&gt;основах репликации&lt;/a&gt; и &lt;a href="http://zizop.habrahabr.ru/blog/87394/"&gt;мульти-мастер репликации&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Проведем небольшой эксперимент. Создадим таблицу&lt;br /&gt;сервер1:&lt;code&gt;&lt;br /&gt;mysql&gt; CREATE TABLE `new_table` (&lt;br /&gt;  `field1` varchar(32),&lt;br /&gt;  `field2` varchar(32),&lt;br /&gt;  `field3` varchar(32)&lt;br /&gt;);&lt;/code&gt;&lt;br /&gt;и внесем в нее начальные данные&lt;br /&gt;сервер1:&lt;code&gt;&lt;br /&gt;mysql&gt; SELECT * FROM new_table;&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| field1 | field2 | field3 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| value0 | value0 | value0 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;После того как мы убедимся что БД реплицируется в обе стороны, разорвем соединение между серверами и изменим одну и ту же запись таблицы одновременно на обоих серверах.&lt;br /&gt;сервер1:&lt;code&gt;&lt;br /&gt;mysql&gt; UPDATE new_table SET field1='value1', field2='value1';&lt;br /&gt;mysql&gt; SELECT * FROM new_table;&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| field1 | field2 | field3 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| value1 | value1 | value0 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;&lt;/code&gt;сервер2:&lt;code&gt;&lt;br /&gt;mysql&gt; UPDATE new_table SET field2='value2', field3='value2';&lt;br /&gt;mysql&gt; SELECT * FROM new_table;&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| field1 | field2 | field3 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| value0 | value2 | value2 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;После возобновления соединения и синхронизации серверов вырисовывается следующая картина:&lt;br /&gt;сервер1:&lt;code&gt;&lt;br /&gt;mysql&gt; SELECT * FROM new_table;&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| field1 | field2 | field3 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| value1 | value2 | value2 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;&lt;/code&gt;сервер2:&lt;code&gt;&lt;br /&gt;mysql&gt; SELECT * FROM new_table;&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| field1 | field2 | field3 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;| value1 | value1 | value2 |&lt;br /&gt;+--------+--------+--------+&lt;br /&gt;&lt;/code&gt;Наблюдаем нарушение целостности данных и различия в репликах.&lt;br /&gt;&lt;br /&gt;Альтернативные методы решения поставленной задачи можно найти в комментариях к вышеуказанным статьям (например, настройка master-slave репликации с использованием mysql-proxy или использование &lt;a href="http://mysql-mmm.org/"&gt;Multi-Master Replication Manager&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-7901061515230702399?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/7901061515230702399/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=7901061515230702399' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/7901061515230702399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/7901061515230702399'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2010/06/2.html' title='(Не)надежность master-master репликации в mysql'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-4680396664428790305</id><published>2010-05-20T08:27:00.003-07:00</published><updated>2010-05-20T09:25:34.890-07:00</updated><title type='text'>Проверка UMTS-оператора в chatscript-е</title><content type='html'>&lt;p&gt;Подключаюсь к ОГО безлимит-мобильный, в котором безлимит - при регистрации в сети Utel, и помегабайтная оплата в роуминге Киевстар после превышения 40Мб лимита. Естественно есть желание проверять, в сети какого оператора зарегистрировался модем. Виндовая версия Utel-овской приблуды отображает оператора в статус-баре, линуксовую версию (найденный на просторах сети Mobile Partner) устанавливать не стал.&lt;/p&gt;&lt;p&gt;Подключаюсь при помощи pppd и chat. На одном буржуйском &lt;a href="http://www.shapeshifter.se/2008/04/30/list-of-at-commands/"&gt;сайте&lt;/a&gt;, был найден список AT-команд, где есть такое:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;&lt;strong&gt;Command&lt;/strong&gt;: AT+COPS?,&lt;br /&gt;&lt;strong&gt;Response&lt;/strong&gt;: +COPS: (&amp;lt;mode&amp;gt;,[&amp;lt;format&amp;gt;,&amp;lt;oper&amp;gt;[,&amp;lt;act&amp;gt;]]),…, (&amp;lt;moden&amp;gt;,[&amp;lt;formatn&amp;gt;,&amp;lt;opern&amp;gt;[,&amp;lt;actn&amp;gt;]])&lt;br /&gt;&lt;strong&gt;Description&lt;/strong&gt;: Get/set current GSM/UMTS network operator, list available operators. This can be used to change for example access type and switch network.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;AT+COPS=?&lt;br /&gt;+COPS: (2,”3″,”3″,”24004″,2),(1,”3″,”3″,”24008″,0),(3,”Sweden 3G”,”Sweden3G”,”2)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p&gt;Воспользовавшись этой информацией можно написать свой chatscript:&lt;/p&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;'' ATZ&lt;br /&gt;OK-AT-OK "AT+COPS=?" UTEL3G ''&lt;br /&gt;OK-AT-OK AT+CGDCONT=1,"IP","unlim.utel.ua"&lt;br /&gt;OK-AT-OK "ATDT*99***1#"&lt;br /&gt;CONNECT ''&lt;br /&gt;'' \d\c&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-4680396664428790305?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/4680396664428790305/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=4680396664428790305' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/4680396664428790305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/4680396664428790305'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2010/05/umts-chatscript.html' title='Проверка UMTS-оператора в chatscript-е'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-5074456702571289129</id><published>2009-12-02T00:09:00.000-08:00</published><updated>2010-07-17T07:29:13.914-07:00</updated><title type='text'>Terminus в ядре</title><content type='html'>Давно уже было желание вкомпилировать terminus прямо в ядро, чтобы не смотреть долгие 10 секунд на стандартный шрифт (пока не запустится один из console-* сервисов). Совсем недавно наткнулся на следующую статью, далекого 2006-го года: &lt;a href="http://kaktyc.wordpress.com/2006/10/23/terminis-in-kernel/"&gt;http://kaktyc.wordpress.com/2006/10/23/terminis-in-kernel/&lt;/a&gt;. Свое описание для terminus14 постараюсь выложить немного позже. Результат: &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-4PqH4Zqr4Y/SxX-s-W-NxI/AAAAAAAAAdg/3Ue48yxsJ6o/s1600-h/cons.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="http://1.bp.blogspot.com/_-4PqH4Zqr4Y/SxX-s-W-NxI/AAAAAAAAAdg/3Ue48yxsJ6o/s320/cons.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5410510575962568466" /&gt;&lt;/a&gt;&lt;br /&gt;(background на tty устанавливается с помощью fbcondecor).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-5074456702571289129?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/5074456702571289129/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=5074456702571289129' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/5074456702571289129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/5074456702571289129'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2009/12/terminus.html' title='Terminus в ядре'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-4PqH4Zqr4Y/SxX-s-W-NxI/AAAAAAAAAdg/3Ue48yxsJ6o/s72-c/cons.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-1131765033185835497</id><published>2008-11-02T21:32:00.000-08:00</published><updated>2010-12-23T06:32:07.072-08:00</updated><title type='text'>Устанавливаем разрешение 1024x600 во framebuffer-е linux для нетбука MSI Wind (или Asus eeePC)</title><content type='html'>&lt;p style="border: 1px solid gold; background: #ffe387"&gt;&lt;strong&gt;Внимание, заметка устарела!&lt;/strong&gt; Вам не нужно выполнять эти заумные штуки, описанные в заметке. В современных дистрибутивах все работает "из коробки". Можно разве что показывать внукам со словами: "Вот как оно было в 2008-м".&lt;/p&gt;&lt;p&gt;Стандартными методами, для фреймбуффера консоли linux, можно установить разрешение &lt;code&gt;800x600&lt;/code&gt; (указать параметр ядра &lt;code&gt;vga=788&lt;/code&gt;), но при этом на данном нетбуке консольные шрифты будут растянуты. Параметра &lt;code&gt;vga=XXX&lt;/code&gt; для &lt;code&gt;1024x600&lt;/code&gt; не существует.&lt;br /&gt;&lt;/p&gt;Но существует хак, описанный в &lt;a href="http://www.nathancoulson.com/proj_eee.shtml"&gt;http://www.nathancoulson.com/proj_eee.shtml&lt;/a&gt;, который позволяет добиться нужного результата. По ссылке рассмотрен пример установки &lt;code&gt;800x480&lt;/code&gt; для eeePC, но инструкция годится и для Wind-a (т.к. используется одинаковый чипсет 945GME). У меня это работает так (фото см. ниже).&lt;br /&gt;Пара слов для вступления. Не стоит выполнять указанные тут команды без четкого представления что они делают. Приведенные команды не являются копипастом, в большинстве своем написаны по памяти и могут содержать ошибки. Все это приводится лишь для обще&lt;br /&gt;75;о представления о необходимых шагах. Я не несу ответственности за негативные последствия Ваших действий.&lt;br /&gt;Итак, сначала нужно применить патч &lt;code&gt;grub-1.96-915resolution-0.5.2-3.patch&lt;/code&gt; к grub2. После этого в grub2 появится поддержка модуля 915resolution.&lt;br /&gt;Я пользуюсь Debian, и оформлял для себя патченый grub в виде deb-пакета (люблю порядок), поэтому проделал ряд дополнительных необязательных действий, которые для упрощения здесь не привожу. В общем случае - качаем и распаковываем исходники grub2, переходим в полученный каталог и применяем патч&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# patch -Np1 -i /path/to/grub-1.96-915resolution.patch&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Если нет ошибок, собираем пропатченый grub2, удаляем старую версию загрузчика (при помощи Вашего менеджера пакетов) и устанавливаем новую (желательно также при помощи Вашего менеджера пакетов))).&lt;br /&gt;Устанавливаем grub2 в загрузочную область:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# grub-install /dev/sda&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Далее, насколько я понял, нужно подменить один из vga-режимов. Создаем файл 01_915resolution следующего содержания (в конечном результате в &lt;code&gt;/etc/grub/grub.cfg&lt;/code&gt; будут автоматически добавляться 2 строки):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# cat /etc/grub.d/01_915resolution&lt;br /&gt;cat &amp;lt;&amp;lt; EOF&lt;br /&gt;insmod 915resolution&lt;br /&gt;915resolution 5c 1024 600&lt;br /&gt;EOF&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Значение 5c взято из выхлопа команды &lt;code&gt;915resolution -l&lt;/code&gt; (о ней ниже). Это может быть любое неиспользуемое значение режима с нужной глубиной цвета.&lt;br /&gt;Перегенерируем /boot/grub/grub.cfg&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# update-grub2&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В общем на этом этапе все готово. Пробуем перегрузиться, к параметрам ядра добавляем &lt;code&gt;video=intelfb vga=604&lt;/code&gt;&lt;br /&gt;Откуда взять &lt;code&gt;vga=604&lt;/code&gt; написано здесь &lt;a href="http://wiki.debian.org/DebianEeePC/TipsAndTricks"&gt;http://wiki.debian.org/DebianEeePC/TipsAndTricks&lt;/a&gt;, раздел "Text Mode". В общем, данное значение зависит от того что мы написали в &lt;code&gt;/etc/grub.d/01_915resolution&lt;/code&gt; (вычисляется как 0x200+0x05c=0x25с в десятичном представлении), это тот режим, который мы подменили.&lt;br /&gt;Для того чтобы не писать каждый раз параметры загрузки ядра вручную, в файле &lt;code&gt;/etc/default/grub&lt;/code&gt; можно указать следующую опцию:&lt;br /&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=" video=intelfb vga=604 "&lt;/code&gt;&lt;br /&gt;после чего не забываем &lt;code&gt;update-grub2&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Об утилите 915resolution. Взять её можно здесь &lt;a href="http://www.geocities.com/stomljen/"&gt;http://www.geocities.com/stomljen/&lt;/a&gt;. Но на текущий момент версия 0.5.3 не знает о чипсете 945GME (который установлен в eeePC и Wind-е). Опять же, существует патч, который может её этому научить. Все описано здесь: &lt;a href="http://wiki.debian.org/DebianEeePC/HowTo/GetNativeConsoleResolution"&gt;http://wiki.debian.org/DebianEeePC/HowTo/GetNativeConsoleResolution&lt;/a&gt;. В принципе эта утилита нужна только один раз, чтобы выбрать неиспользуемый режим.&lt;br /&gt;&lt;br /&gt;Прежде чем выполнять все это самостоятельно, рекомендую еще раз ознакомиться с документами по следующим ссылкам:&lt;br /&gt;&lt;a href="http://www.nathancoulson.com/proj_eee.shtml"&gt;http://www.nathancoulson.com/proj_eee.shtml&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.debian.org/DebianEeePC/HowTo/GetNativeConsoleResolution"&gt;http://wiki.debian.org/DebianEeePC/HowTo/GetNativeConsoleResolution&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.debian.org/DebianEeePC/TipsAndTricks"&gt;http://wiki.debian.org/DebianEeePC/TipsAndTricks&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/stomljen/"&gt;http://www.geocities.com/stomljen/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Что получаем в итоге:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-4PqH4Zqr4Y/SQ6QGmArQUI/AAAAAAAAAAM/fMr1x3Y3haY/s1600-h/u100fb.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_-4PqH4Zqr4Y/SQ6QGmArQUI/AAAAAAAAAAM/fMr1x3Y3haY/s320/u100fb.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5264303457399685442" /&gt;&lt;/a&gt;&lt;a href="http://goo.gl/photos/s9ph" imageanchor="1" style="clear:right;margin-bottom:1em;margin-left:1em"&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 187px;" border="0" src="http://lh5.ggpht.com/_-4PqH4Zqr4Y/SQ6QoK1iXGI/AAAAAAAAAAc/YyXeQfzpGyg/s512/shot.png"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-1131765033185835497?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/1131765033185835497/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=1131765033185835497' title='Комментарии: 11'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/1131765033185835497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/1131765033185835497'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2008/11/1024x600-msi-wind-asus-eeepc.html' title='Устанавливаем разрешение 1024x600 во framebuffer-е linux для нетбука MSI Wind (или Asus eeePC)'/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-4PqH4Zqr4Y/SQ6QGmArQUI/AAAAAAAAAAM/fMr1x3Y3haY/s72-c/u100fb.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-134797464443689624.post-3883553918144443740</id><published>2008-02-27T03:02:00.001-08:00</published><updated>2008-11-11T04:38:17.083-08:00</updated><title type='text'></title><content type='html'>Ниже описывается настройка samba модуля full_audit, который позволяет увидеть кто и к какому файлу обращался, кто создал, удалил или переименовал конкретный файл или каталог.&lt;br /&gt;В результате настройки необходимые данные будут записываться в лог-файл /var/log/samba/log.audit.&lt;br /&gt;(Настройка производилась в дистрибутиве Debian Etch, версия Samba 3.0.24).&lt;br /&gt;&lt;br /&gt;1. В секцию [global] добавляется строка&lt;br /&gt;&lt;br /&gt; syslog = 0&lt;br /&gt;&lt;br /&gt;Данный параметр устанавливает приоритет сообщений, которые будут направлены в syslog. Чем выше значение, тем большее количество сообщений будет выводиться. Указав значение 0 можно отключить запись сообщений в syslog.&lt;br /&gt;&lt;br /&gt;2. Количество сообщений, записываемых в лог-файлы, для всех VFS модулей может быть задано следующим параметром в секции [global]&lt;br /&gt;&lt;br /&gt; log level = 0 vfs:2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Если планируется сохранять лог-файлы длительное время, может быть полезным указание параметра&lt;br /&gt;&lt;br /&gt;  max log size = 0&lt;br /&gt;&lt;br /&gt;Размер лог-файла задается в килобайтах. При достижении указанного значения файл будет переименован, путем добавления к имени файла расширения .old. Значение 0 отключает проверку размера (в данном случае необходимо самостоятельно позаботиться о размере лог-файла, к примеру, настроив соответсвующим образом logrotate).&lt;br /&gt;&lt;br /&gt;4. Для активации модуля аудита, в секции, которая описывает расшаренный ресурс, добавляется строка&lt;br /&gt;&lt;br /&gt; vfs objects = full_audit&lt;br /&gt;&lt;br /&gt;В результате данные о доступе к файлам будут записываться в syslog, либо в лог-файл по умолчанию (log.smbd). Здесь же, через пробел, могут быть заданы другие VFS модули.&lt;br /&gt;&lt;br /&gt;5. Можно указать дополнительные параметры модулю full_audit.&lt;br /&gt;Префикс, сообщений в лог-файле:&lt;br /&gt;&lt;br /&gt; full_audit:prefix = %u|%I&lt;br /&gt;&lt;br /&gt;(каждая строка будет начинаться с user|ip_adress)&lt;br /&gt;Какие ошибки должны отображаться в лог-файле:&lt;br /&gt;&lt;br /&gt; full_audit:failure = none&lt;br /&gt;&lt;br /&gt;(не протоколируем ошибки)&lt;br /&gt;Действия пользователей, которые записываются в лог-файл:&lt;br /&gt;&lt;br /&gt; full_audit:success = connect disconnect opendir mkdir rmdir closedir open close read pread write pwrite sendfile rename unlink chmod fchmod chown fchown chdir ftruncate lock symlink readlink link mknod realpath&lt;br /&gt;&lt;br /&gt;Параметры, позволяющие управлять записью в журналы демоном syslogd:&lt;br /&gt;&lt;br /&gt; full_audit:facility = local5&lt;br /&gt; full_audit:priority = notice&lt;br /&gt;&lt;br /&gt;Данные два параметра описывают селектор, он обозначает программу ("средство" в терминологии системы syslog), которая посылает регистрационное сообщения и уровень серьезности этого сообщения.&lt;br /&gt;Прим. Несмотря на опцию syslog = 0, samba направляет сообщения в syslog. Возможно в других версиях samba такое поведение будет изменено. Последние два параметра модуля full_audit позволят в дальнейшем исключить попадание нежелательных сообщений в журанал syslog.&lt;br /&gt;&lt;br /&gt;Собрав все вместе получим примерно следующее:&lt;br /&gt;&lt;br /&gt;[global]&lt;br /&gt;...&lt;br /&gt; log level = 0 vfs:2&lt;br /&gt; max log size = 0&lt;br /&gt; syslog = 0&lt;br /&gt;...&lt;br /&gt;[incomig]&lt;br /&gt; comment = Samba server's incoming directory&lt;br /&gt; writable = yes&lt;br /&gt; locking = no&lt;br /&gt; path = /home/samba/incoming&lt;br /&gt; public = yes&lt;br /&gt; browseable = yes&lt;br /&gt; only guest = yes&lt;br /&gt; vfs objects = full_audit&lt;br /&gt; full_audit:prefix = %u|%I&lt;br /&gt; full_audit:failure = none&lt;br /&gt; full_audit:success = connect disconnect opendir mkdir rmdir closedir open close read pread write pwrite sendfile rename unlink chmod fchmod chown fchown chdir ftruncate lock symlink readlink link mknod realpath&lt;br /&gt; full_audit:facility = local5&lt;br /&gt; full_audit:priority = notice&lt;br /&gt;&lt;br /&gt;После перечитывания конфигурации сервисами, строки лог-файла будут выглядеть примерно следующим образом:&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;Feb 23 18:13:31 kirill smbd_audit: nobody|192.168.4.2|connect|ok|incoming&lt;br /&gt;Feb 23 18:13:32 kirill smbd_audit: nobody|192.168.4.2|chdir|ok|chdir|/home/samba/incoming&lt;br /&gt;Feb 23 18:13:35 kirill smbd_audit: nobody|192.168.4.2|opendir|ok|.&lt;br /&gt;Feb 23 18:13:35 kirill smbd_audit: nobody|192.168.4.2|closedir|ok|&lt;br /&gt;Feb 23 18:13:35 kirill smbd_audit: nobody|192.168.4.2|opendir|ok|./&lt;br /&gt;Feb 23 18:13:48 kirill smbd_audit: nobody|192.168.4.2|opendir|ok|New Folder&lt;br /&gt;Feb 23 18:13:48 kirill smbd_audit: nobody|192.168.4.2|closedir|ok|&lt;br /&gt;Feb 23 18:13:48 kirill smbd_audit: nobody|192.168.4.2|rmdir|ok|New Folder&lt;br /&gt;Feb 24 11:45:10 kirill smbd_audit: root|192.168.4.2|disconnect|ok|incoming&lt;br /&gt;Feb 24 11:45:10 kirill smbd_audit: root|192.168.4.2|chdir|ok|chdir|/&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. Дополнительные настройки&lt;br /&gt;Далее может понадобиться дополнительная настройка демонов syslogd и logrotate.&lt;br /&gt;(Прим. В данном примере используются sysklogd 1.4.1 и logrotate 3.7.1)&lt;br /&gt;7.1 В стандартном файле конфигурации syslog.conf демона syslogd имеется строка&lt;br /&gt;&lt;br /&gt; *.*;auth,authpriv.none           -/var/log/syslog&lt;br /&gt;&lt;br /&gt;для того чтобы сообщения модуля full_audit не попадали в syslog, нужно изменить эту строку следующим образом:&lt;br /&gt;&lt;br /&gt; *.*;local5,auth,authpriv.none           -/var/log/syslog&lt;br /&gt;&lt;br /&gt;Чтобы сообщения записывались в заданный файл, нужно добавить в syslog.conf такую строку:&lt;br /&gt;&lt;br /&gt; local5.notice                   -/var/log/samba/log.audit&lt;br /&gt;&lt;br /&gt;7.2 Для того чтобы лог-файл не разрастался, в каталоге /etc/logrotate.d можно изменить соответсвующую секцию конфигурационного файла samba, чтобы она выглядела примерно так:&lt;br /&gt;&lt;br /&gt; /var/log/samba/log.smbd /var/log/samba/log.audit {&lt;br /&gt;  weekly&lt;br /&gt;  missingok&lt;br /&gt;  rotate 7&lt;br /&gt;  postrotate&lt;br /&gt;   invoke-rc.d --quiet samba reload &gt; /dev/null&lt;br /&gt;  endscript&lt;br /&gt;  compress&lt;br /&gt;  notifempty&lt;br /&gt; }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/134797464443689624-3883553918144443740?l=m0squito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://m0squito.blogspot.com/feeds/3883553918144443740/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=134797464443689624&amp;postID=3883553918144443740' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/3883553918144443740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/134797464443689624/posts/default/3883553918144443740'/><link rel='alternate' type='text/html' href='http://m0squito.blogspot.com/2008/02/samba-fullaudit_27.html' title=''/><author><name>Kirill Zabarniuk</name><uri>http://www.blogger.com/profile/00015266910908838627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
