tag:blogger.com,1999:blog-79679391366390175932024-02-21T06:02:59.714+02:00АдминодевелопментАдминистрирование и разработка : проблемы и решенияEugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.comBlogger34125tag:blogger.com,1999:blog-7967939136639017593.post-13968102603804142972016-05-04T11:03:00.000+02:002016-05-04T11:03:00.815+02:00Новый ALT Linux LiveОбновил ALT Linux Live до почти уже вышедшего <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/p8/branch">branch/p8</a>, комплектация немного изменилась:
<ul>
<li><a href="http://enp.itx.ru/linux/alt/p8/images/altlive-i586.iso">altlive-i586.iso</a></li>
<li><a href="http://enp.itx.ru/linux/alt/p8/images/altlive-i586.tar">altlive-i586.tar</a></li>
<li><a href="http://enp.itx.ru/linux/alt/p8/images/altlive-x86_64.iso">altlive-x86_64.iso</a></li>
<li><a href="http://enp.itx.ru/linux/alt/p8/images/altlive-x86_64.tar">altlive-x86_64.tar</a></li>
</ul>
CD/DVD-носители уже не слишком актуальны, поэтому iso выкладываются главным образом для запуска в виртуальных средах. Архивы tar предназначены для записи образов на USB flash. В каждом образе по прежнему есть 3 варианта загрузки: console, openbox, xfce. Все варианты (включая консольный) теперь используют <a href="https://www.freedesktop.org/wiki/Software/systemd/">systemd</a>. После знакомства с <a href="https://www.freedesktop.org/software/systemd/man/systemd.service.html">аналогами инит-скриптов</a>, появления <a href="https://www.freedesktop.org/software/systemd/man/systemd-networkd.html">systemd-networkd</a> и <a href="https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html">systemd-nspawn</a> / <a href="https://www.freedesktop.org/software/systemd/man/machinectl.html">machinectl</a>, а также после выхода <a href="https://access.redhat.com/articles/754933">RHEL7</a> и <a href="https://wiki.ubuntu.com/SystemdForUpstartUsers">Ubuntu LTS</a> с systemd я наконец проникся.
<br><br>
Образы собираются из <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-altlive.git">нового профиля</a>, т.к. старый оброс различными артефактами и стал слишком сложным. Кроме того, завел наконец <a href="https://www.altlinux.org/Altlive">вики-страничку</a> с чуть более пространным описанием.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-42878060545019841712014-09-29T10:39:00.000+03:002014-09-29T10:39:14.517+03:00Автозапуск в ALT Linux LiveСнова обновил ALT Linux Live до актуального <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/t7/branch">branch/t7</a>, образов стало чуть больше:
<ul>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-console-t7-i586.iso">altlive-console-t7-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-openbox-t7-i586.iso">altlive-openbox-t7-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-xfce-t7-i586.iso">altlive-xfce-t7-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-console-t7-x86_64.iso">altlive-console-t7-x86_64</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-openbox-t7-x86_64.iso">altlive-openbox-t7-x86_64</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-xfce-t7-x86_64.iso">altlive-xfce-t7-x86_64</a></li>
</ul>
В образ с <a href="http://openbox.org/">openbox</a> добавлен автозапуск панели <a href="https://code.google.com/p/tint2/">tint2</a> с минимальной конфигурацией (пиктограмма для запуска терминала, список задач, отображение текущей даты/времени) и скриптов из /image/hooks.openbox непосредственно после запуска панели. Аналогичным образом все образы умеют запускать скрипты из /image/hooks.system - но уже с полномочиями суперпользователя (спасибо <a href="http://git.altlinux.org/people/gns/packages/livecd-run-hooks.git">gns@</a>).
<p>
Все это полезно при загрузке корня средствами <a href="http://www.altlinux.org/Propagator">propagator</a> по NFS или с локального USB-диска - тогда рядом со сжатым корнем можно положить скрипты для дополнительной индивидуальной настройки загружаемой системы. Краткая инструкция по загрузке с NFS и USB внутри образов, код по прежнему в репозитарии <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">m-p-l</a> в бранче autoconf.
Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-49643638195228753812013-10-18T12:37:00.000+03:002013-10-18T12:38:37.120+03:00Новая сборка ALT Linux LiveЕще раз обновил ALT Linux Live до только что вышедшего <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/t7/branch">branch/t7</a>, снова доступны образы:
<ul>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-console-t7-i586.iso">altlive-console-t7-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-xfce-t7-i586.iso">altlive-xfce-t7-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-console-t7-x86_64.iso">altlive-console-t7-x86_64</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t7/iso/altlive-xfce-t7-x86_64.iso">altlive-xfce-t7-x86_64</a></li>
</ul>
Хоть я и обещал, что предыдущая сборка будет последней, перебраться с <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">m-p-l</a> на <a href="http://git.altlinux.org/people/mike/packages/mkimage-profiles.git">m-p</a> пока не вышло.
<br>
<br>
В процессе пришлось определяться с отношением к <a href="http://www.freedesktop.org/wiki/Software/systemd">systemd</a>. Я не готов бежать впереди <s>паровоза</s> RHEL7 и даже на новых серверах пока не планирую его использовать, поэтому на собственном десктопе - тоже. Соответственно, в этих образах по-прежнему используется sysvinit, сменные носители монтируются в /media, ipv6 выключен, сетевые интерфейсы именуются как eth* - что еще нужно ретрограду? :)Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-90795763906197610452013-08-19T09:49:00.000+03:002013-10-18T12:39:55.349+03:00Записи в DNS из NetXMS<div dir="ltr" style="text-align: left;" trbidi="on">
Отказался от <a href="http://www.thekelleys.org.uk/dnsmasq/doc.html">dnsmasq</a> в пользу <a href="https://www.powerdns.com/">PowerDNS</a> в качестве внутреннего DNS-сервера. Причина - <a href="http://doc.powerdns.com/html/backends-detail.html">разнообразие бакендов</a> в PowerDNS, из которых самым полезным для меня оказался <a href="http://doc.powerdns.com/html/generic-mypgsql-backends.html">Generic PgSQL backend</a>. Теперь внутренние адреса хостов разрешаются в имена и наоборот не из файла /etc/hosts, а из БД внутренней <a href="http://admdev.blogspot.ru/2012/05/netxms-network-monitoring-system.html">системы мониторинга NetXMS</a>, в которой все важные хосты гарантированно присутствуют.
<br>
<br>
Подробности в <a href="http://habrahabr.ru/post/190360/">статье на Хабре</a> - нужно же мне было каким-то образом добыть возможность комментировать разные интересные вещи, которые там, бывает, появляются :)
</div>
Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-4458383739099020862012-12-01T12:29:00.000+03:002012-12-01T12:30:17.255+03:00FreeSWITCH users via LDAP<div dir="ltr" style="text-align: left;" trbidi="on">
Потребовалось авторизовать пользователей FreeSWITCH через LDAP вместо XML Directory. Оба имевшихся в комплекте модуля оказались со странностями:<br />
<ul style="text-align: left;">
<li><a href="http://git.freeswitch.org/git/freeswitch/tree/src/mod/directories/mod_ldap">mod_ldap </a>вообще не похож на рабочий, код просто недописан</li>
<li><a href="http://git.freeswitch.org/git/freeswitch/tree/src/mod/xml_int/mod_xml_ldap">mod_xml_ldap</a> пытается быть слишком универсальным и предполагает использование собственной схемы, в которой для одного пользователя предполагается иметь по записи для каждого параметра вместо очевидного, казалось бы, решения - добывать необходимую для авторизации информацию прямо из имеющихся атрибутов записей с objectClass=person </li>
</ul>
Впрочем, у FreeSWITCH есть универсальное решение для 99% интеграционных задач - <a href="http://wiki.freeswitch.org/wiki/Mod_xml_curl">mod_xml_curl</a> + внешний HTTP-сервер (или <a href="http://wiki.freeswitch.org/wiki/Which_scripting_language_should_I_use%3F">один из поддерживаемых встраиваемых скриптовых языков</a>). Беда в том, что это решение затягивает. Меня затянуло до <a href="https://github.com/enp/phonebook-example">встраивания LDAP-сервера</a> :). <br />
<br />
Затем я пришел в себя и решил все же еще раз вчитаться в код нативных модулей и исправить/переписать тот, который окажется более вменяемым. Все оказалось проще - второй модуль уже <a href="http://article.gmane.org/gmane.comp.telephony.freeswitch.user/6974">почти переписали</a> и, видимо следуя общей традиции поддержки LDAP, таки <a href="http://git.freeswitch.org/git/freeswitch/tree/src/mod/xml_int/mod_xml_ldap/mod_xml_ldapv2.c">бросили уже почти на финише</a>.<br />
<br />
Сделать последний шаг <a href="http://jira.freeswitch.org/browse/FS-4870">оказалось несложно</a>. Оно работает, хотя и нуждается в более тщательном тестировании.<br />
<ul style="text-align: left;">
</ul>
</div>
Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-37278776469763610552012-06-22T12:32:00.000+03:002012-06-22T15:29:30.678+03:00Рок-н-ролл мертв, а Perl еще нетНикогда не предполагал, что окажусь в шкуре Perl-программиста - но это случилось. На новом месте (региональная сеть <a href="http://ru.wikipedia.org/wiki/NGN">NGN</a>/<a href="http://ru.wikipedia.org/wiki/IMS_%28%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%29">IMS</a>) мне досталась в наследство куча перлового кода (предбиллинг, управление подключениями, устройствами, услугами) и полтора программиста, способные значительным усилием воли его читать, а в крайнем случае даже править. Автора <strike>этого безобразия</strike> большей части кода я уже не застал, хотя до того успел пообщаться с ним, находять по другую сторону баррикад и подключая <a href="http://admdev.blogspot.com/2008/08/callweaver.html">Asterisk/CallWeaver</a> и <a href="http://admdev.blogspot.com/2010/08/blog-post.html">FreeSWITCH</a> к операторскому оборудованию.
<br><br>
Конечно, я надеялся все переписать все на <a href="http://admdev.blogspot.com/2008/08/lightweight-jee.html">Java</a>/<a href="http://admdev.blogspot.com/2009/12/groovy-first-steps.html">Groovy</a>, однако вовремя остановился - это оказалось слишком дорого и больно. В итоге мы остановились на Perl и это позволило:
<ul style="text-align: left;">
<li>Постепенно переписывать работающий код по частям и повторно использовать некоторый унаследованный код после минимального рефакторинга</li>
<li>Не переучивать коллег - разве что более осознанно подойти к coding conventions</li>
</ul>
Пришлось, правда, переучиваться самому - плевался поначалу, но втянулся.
<br><br>
Значительная часть как старого, так и нового кода в итоге оказалась внутри модулей, написанных в процедурном стиле и пригодных к использованию в качестве автономных утилит:
<table><pre>
#!/usr/bin/perl
package MyModule;
sub calculate {
...
}
calculate(@ARGV) unless caller();
</pre></table>
Эти же утилиты являются по сути функциональными тестами. От юнит-тестов мы отказались, т.к. их честная реализация во многих случах свелась бы к написанию эмуляторов внешних систем и оборудования, с которым приходится работать.
<br><br>
Но чаще модули не запускаются вручную сменным инженером или кроном, а собираются в более крупные единицы:
<ul style="text-align: left;">
<li>Юниксовые демоны, написанные с использованием <a href="http://metacpan.org/module/Proc::Daemon">Proc::Daemon</a> (<a href="https://metacpan.org/module/Net::Daemon">Net::Daemon</a> оказался слишком умным) и запускаемые инит-скриптом в стиле SysV (никаких новомодных systemd)</li>
<li>Web-приложения, <a href="http://advent.plackperl.org/">использующие PSGI согласно последней моде</a></li>
</ul>
Последние можно разрабатывать разными способами:
<ul style="text-align: left;">
<li>Опираясь исключительно на <a href="http://metacpan.org/module/PSGI">спецификацию</a> - в этом случае разбор URL, параметров и заголовков, возвращение требуемого Content-Type, шаблонизация и многое другое становятся проблемами самого разработчика</li>
<li>Используя <a href="http://metacpan.org/module/Plack">Plack</a> - эталонную реализацию спецификации, которая предлагает стандартизованный способ декомпозиции приложений (в т.ч. выделения <a href="http://metacpan.org/module/Plack#Plack::Middleware">Middleware</a> и <a href="http://metacpan.org/module/Plack::Builder">специального DSL для настройки и склеивания разных приложений в одно</a>), также обросла <a href="http://metacpan.org/search?q=plack">кучей разных полезных плагинов</a></li>
<li>Используя один из полноценных <a href="https://www.socialtext.net/perl5/web_frameworks">web-фреймворков</a>, хотя на самом деле их, похоже, всего лишь 2 - <a href="http://perldancer.org/">Dancer</a> и <a href="http://mojolicio.us/">Mojolicious</a></li>
</ul>
Я бы рассмотрел всерьез первый или второй вариант, а также запуск приложения под управлением какой-нибудь минимальной реализации на С вроде <a href="http://projects.unbit.it/uwsgi/wiki/QuickstartPSGI">uwsgi</a> (она приглянулась мне больше <a href="http://github.com/sekimura/evpsgi">evpsgi</a>, <a href="http://github.com/yappo/nginx-psgi-patchs">патча для nginx</a> и <a href="http://github.com/spiritloose/mod_psgi/">модуля для Apache</a>), если бы у нас были серьезные требования к производительности. Однако к web-интерфейсу не предполагалось публичного доступа, зато требования к простоте разработки очень даже предъявлялись. В итоге был выбран Mojolicious и скорее по иррациональным соображениям - <a href="http://sharifulin.posterous.com/mojolicious-dancer">в нашей местности обитают люди, которые очень его любят</a>.
<br><br>
Сейчас весь старый код работает на последнем оставшемся сервере с <a href="http://lurkmore.to/Slackware">Slakware 12.2.0</a> (который поначалу было едва справлялся с нагрузкой а сейчас почти отдыхает) и потихоньку переползает на новые сервера с <a href="http://altlinux.org">ALT Linux</a>. В последнем пришлось обновить <a href="http://packages.altlinux.org/ru/Sisyphus/srpms/perl-Mojolicious">Mojolicious</a>, <a href="http://packages.altlinux.org/ru/Sisyphus/srpms/perl-Plack">Plack</a> и <a href="http://packages.altlinux.org/ru/Sisyphus/srpms/starman">Starman</a>, который используется в качестве самостоятельного web-сервера без всяких фронтендов типа nginx и тем более apache. Я также опакетил <a href="http://git.altlinux.org/people/enp/packages/evpsgi.git">evpsgi</a> и начал было перепиливать сборку <a href="http://git.altlinux.org/people/enp/packages/uwsgi.git">uwsgi</a>, однако быстро потерял к ним интерес - поэтому до репозитария они не добрались.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com2tag:blogger.com,1999:blog-7967939136639017593.post-38573069264266115282012-05-10T14:38:00.000+03:002012-05-10T14:53:34.367+03:00NetXMS network monitoring systemСобрал в <a href="http://packages.altlinux.org/ru/Sisyphus/srpms/netxms">Сизиф</a> и <a href="http://packages.altlinux.org/ru/t6/srpms/netxms">t6/branch</a> систему мониторинга <a href="http://www.netxms.org/">NetXMS</a>, привлекшую к себе внимание даже не столько <a href="http://www.opennet.ru/openforum/vsluhforumID3/37659.html#11">эффективной архитектурой</a>, сколько в первую очередь своей консолью:
<br />
<table style="width: auto;"><tbody>
<tr><td><br />
<a href="http://www.netxms.org/screenshots/"><img src="http://www.netxms.org/screenshots/nxmc_03.png" width="640" /></a></td></tr>
</tbody></table>
Она кажется более наглядной и при этом достаточно простой для сменных инженеров по сравнению с любым веб-интерфейсом (ну или как минимум по сравнению со знакомыми мне <a href="http://www.opennms.org/">OpenNMS</a> и <a href="http://zabbix.com/">Zabbix</a>). Благодаря <a href="http://www.eclipse.org/rap">Eclipse/RAP</a> ее можно запустить не только в качестве <a href="http://www.netxms.org/download">кроссплатформенного десктопного приложения</a>, но и <a href="http://wiki.netxms.org/wiki/Web_Interface_Installation_Guide">через веб</a> тоже - хотя работать с ней таким образом все же менее комфортно.
<br />
<br />
Да, апстрим добрый и отзывчивый: <a href="http://www.netxms.org/bugtrack">баги исправляют</a>, <a href="http://www.netxms.org/forum/e-eoe-o-koaot-netxms/">фичреквесты реализуют</a> (или, по крайней мере, задумываются), <a href="http://www.netxms.org/forum/oe-oo/">по-русски говорят</a>.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-88210357911452951772012-01-20T10:52:00.000+03:002012-01-20T11:04:27.256+03:00ALT Linux на OMAP3 BlueSharkПопала в руки плата <a href="http://www.mentorel.ru/index.php/products/som/blueshark-omap3/10">Atoll-Deluxe v4 с процессорным модулем OMAP3 BlueShark</a> и LCD-панелью NEC E170632:
<br />
<table style="width: auto;"><tbody>
<tr><td><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiwtUjkacJgUDnyqmPz1wKKWJsveQ-XKDgOQWQ8HwCZjkdwdW5-z1EnAw82r31-gaSa7Bzp60NRje2CbWiW6uaiAPo_dqXwyf4Ini7JiYF5rGcUjmAUtNTYVWseZ9BTYRr42FmjhiV3oE6/s912/1.png"><img height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiwtUjkacJgUDnyqmPz1wKKWJsveQ-XKDgOQWQ8HwCZjkdwdW5-z1EnAw82r31-gaSa7Bzp60NRje2CbWiW6uaiAPo_dqXwyf4Ini7JiYF5rGcUjmAUtNTYVWseZ9BTYRr42FmjhiV3oE6/s640/1.png" width="640" /></a></td></tr>
</tbody></table>
На борту уже имелся <a href="http://www.angstrom-distribution.org/">Ångström Linux</a>, однако захотелось получить более привычное окружение. Имевшаяся в комплекте загрузочная SD-карта была разбита на два раздела:
<br />
<ul>
</ul>
<ul style="text-align: left;">
<li>с <a href="http://www.denx.de/wiki/U-Boot/">U-Boot</a> и ядром</li>
<li>с корневой файловой системой</li>
</ul>
Поэтому я решил просто отложить родной корень в сторонку и сгенерировать новый <a href="http://www.altlinux.org/Mkimage">традиционным для ALT Linux способом</a>, загрузившись для начала со штатным ядром. Получилось не сразу, но <a href="http://packages.altlinux.org/en/Sisyphus/maintainers/manowar">Paul Wolneykien</a> помог решить <a href="http://article.gmane.org/gmane.linux.altlinux.sisyphus/93263">основную проблему с логином через mini-USB</a> - а дальше дело оказалось в шляпе. Профиль доступен <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-armrootfs.git">здесь</a>, выложены:
<ul>
<li><a href="http://enp.itx.ru/linux/alt/arm/arm-root-minimal.tar.bz2">минимальный консольный образ</a></li>
<li><a href="http://enp.itx.ru/linux/alt/arm/arm-root-x11-glxgears.tar.bz2">игрушечный киоск с glxgears в качестве единственного приложения</a></li>
</ul>
В планах сборка правильного ядра.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-54012390962510458372011-11-25T14:32:00.001+03:002011-11-25T14:44:52.321+03:00Последняя версия ALT Linux Live<div dir="ltr" style="text-align: left;" trbidi="on">
Обновил ALT Linux Live до текущего <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/t6/branch">branch/t6</a>, доступны образы:
<ul>
<li><a href="http://enp.itx.ru/linux/alt/t6/iso/altlive-console-t6-i586.iso">altlive-console-t6-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t6/iso/altlive-xfce-t6-i586.iso">altlive-xfce-t6-i586</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t6/iso/altlive-console-t6-x86_64.iso">altlive-console-t6-x86_64</a></li>
<li><a href="http://enp.itx.ru/linux/alt/t6/iso/altlive-xfce-t6-x86_64.iso">altlive-xfce-t6-x86_64</a></li>
</ul>
И, скорее всего, эта сборка будет последней. У меня не хватает сил самостоятельно поддерживать профиль <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">m-p-l</a> в актуальном состоянии, а тем временем наследник тонущего от переизбытка возможностей и их бессистемного добавления основного профиля <a href="http://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop.git">m-p-d</a> в лице <a href="http://git.altlinux.org/people/mike/packages/mkimage-profiles.git">m-p</a> довольно активно <a href="http://www.altlinux.org/Mkimage/Profiles/m-p">развивается</a>. Поэтому со временем я планирую перебираться на него, чего всем выпиливателям кастомных образов и советую.</div>Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-8181446386652200962011-08-01T13:28:00.000+03:002011-08-01T13:28:53.559+03:00Колоночная СУБД MonetDBВнезапно дошли руки пощупать настоящую <a href="http://en.wikipedia.org/wiki/Column-oriented_DBMS">колоночную СУБД</a> в реализации <a href="http://www.monetdb.org">MonetDB</a>, свежая версия которой в честь этого доступна в <a href="http://packages.altlinux.org/ru/Sisyphus/srpms/monetdb">Сизифе</a> и <a href="http://packages.altlinux.org/ru/t6/srpms/monetdb">t6/branch</a>. Тестировал на старой задаче, которая замечательно укладывается в область применения колоночных СУБД - учет объема ip-трафика по различным критериям (периоды, сети, хосты, пропущено/зарезано). Впечатления смешанные. Оно действительно уделывает <a href="http://pgfoundry.org/projects/pgtune">тщательно тюненный PostgreSQL</a>:<br />
<ul><li>Загрузка данных из текстового файла происходит в 3 раза быстрее</li>
<li>Выборка с GROUP BY и полным сканированием большой таблицы - в 7 раз быстрее</li>
<li>Выборка небольшого набора строк с кучей WHERE - на удивление даже это чуть вышло быстрее, однако в пределах погрешности измерений</li>
<li>Размер БД в 1,5 раза меньше исходного текстового файла</li>
</ul>Однако ничего не бывает просто так. Помимо ожидаемых проблем колоночных СУБД с одновременным доступом на запись, которые в данном случае совершенно не актуальны, обнаружились и пара более неприятных вещей, являющихся уже особенностью реализации MonetDB:<br />
<ul><li><a href="http://permalink.gmane.org/gmane.comp.db.monetdb.user/4139">Нельзя отменить запрос</a></li>
<li><a href="http://permalink.gmane.org/gmane.comp.db.monetdb.user/4461">Нет эффективной реализации VACUUM</a></li>
</ul>Это уже не говоря о <a href="http://www.monetdb.org/Documentation">значительно более лаконичной по сравнению с PostgreSQL документацией</a> и <a href="http://www.monetdb.org/Developers/Mailinglists">несравнимо меньшим комьюнити</a>. Поэтому рекомендовать это кому-либо в production я не решаюсь, хотя сам, пожалуй, попробую ;)Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com2tag:blogger.com,1999:blog-7967939136639017593.post-50193299175715911642011-04-07T15:18:00.000+03:002011-04-07T15:18:50.274+03:00Автоинсталляция ALT Linux LiveНекоторое время назад у меня возникла необходимость установить и предварительно настроить около 30 идентичных серверов. Дело слегка осложнялось тем, что расстояние от них до меня измеряется десятками и сотнями километров, а потому без помощи местных специалистов не обойтись было никак, но и обучать их чему-то более сложному, чем вставить диск или настроить сетевую загрузку, было крайне нежелательно.<br />
<br />
Для решения задачи на базе фичи fakeinstall была <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git?p=mkimage-profile-live.git;a=commit;h=1c8dd94378ea79e75ceb2c61c451082d8cb098cf">изготовлена фича autoinstall</a> и с ее помощью задача была быстро решена, однако чувства удовлетворенности не появилось. Во-первых, код в фичах дублировался, а во-вторых, практически всю процедуру настройки пришлось оформить отдельным коммитом во внутреннем бранче - там гвозди совсем большие и толстые.<br />
<br />
Положение исправил неожиданно проснувшийся интерес других участников <a href="http://www.altlinux.org/ALT_Linux_Team">ALT Linux Team</a> к моей процедуре [авто]инсталляции. Например, Михаил Пожидаев выпилил пересекающуюся часть упомянутых выше фич в <a href="http://sisyphus.ru/ru/srpm/Sisyphus/live-install">пакет live-install</a> и использовал его в своем проекте <a href="http://homeros.altlinux.org/">специализированного дистрибутива для людей с ограничениями по зрению</a>. Теперь уже мне ничего не оставалось, кроме как <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git?p=mkimage-profile-live.git;a=commit;h=bc6ea5c2ed7158d868ff0ac33b313081157224a5">задействовать этот пакет и выкинуть из фич ненужный код</a>, а заодно <a href="http://www.altlinux.org/Lxde/eeelive/livehooks">по аналогии с eeelive</a> - сделать <a href="http://git.altlinux.org/people/enp/packages/live-hooks-tftp.git">пакет</a> и <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git?p=mkimage-profile-live.git;a=commit;h=0417a13534fefded6dd89320717a4d0b78aa5f38">фичу</a> для тонкого подпиливания уже загруженного (в моем случае как правило по сети) образа - и тем самым утащить самые страшные гвозди из профиля в настраиваемые внешние скрипты.<br />
<br />
Обновленные образы, собранные на текущем <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/5.1/branch">branch/5.1</a>, по традиции можно взять <a href="http://enp.itx.ru/linux/alt/5.1/iso/">здесь</a>.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-8023910953719749622010-08-12T16:43:00.000+03:002012-07-27T14:06:48.601+03:00Король умер, да здравствует король ...<a href="http://ru.wikipedia.org/wiki/CallWeaver">CallWeaver</a> медленно, но верно впадает в анабиоз (критерий - <a href="http://www.callweaver.org/changesets">количество новых коммитов в SVN</a>), и потому я давно стал <a href="http://www.itx.ru/presentations/voip.pdf">приискивать</a> ему такую замену, которая не называется <a href="http://ru.wikipedia.org/wiki/Asterisk">Asterisk</a>. <br />
<br />
Остановился в итоге на <a href="http://ru.wikipedia.org/wiki/FreeSWITCH">FreeSWITCH</a>, который соблазнил меня:<br />
<ul><li>Красивой архитектурой с честной модульностью и возможностью масштабироваться от <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%84%D1%82%D1%84%D0%BE%D0%BD">софтфона</a> до <a href="http://ru.wikipedia.org/wiki/Softswitch">софтсвитча</a></li>
<li>Использованием уже зарекомендовавших себя свободных фреймворков (<a href="http://apr.apache.org/">Apache Portable Runtime</a> для обеспечения переностимости между различными платформами, <a href="http://sofia-sip.sourceforge.net/">SofiaSIP</a> в качестве <a href="http://ru.wikipedia.org/wiki/SIP">SIP</a>-стека и т.д.)</li>
<li>Конфигурацией в XML (по мне это значительно удобнее ini-файлов) с возможностью перечитывать фрагменты конфигурации с HTTP-сервера в процессе работы</li>
</ul>Правда размер дефолтной конфигурации <a href="http://wiki.freeswitch.org/wiki/Default_config">совершенно безумен</a>, да сама она скорее сборник примеров, чем то, от чего можно отталкиваться в процессе настройки системы для промышленной эксплуатации. Поэтому <a href="http://admdev.blogspot.com/2008/08/callweaver.html">по аналогии с CallWeaver</a> я выпилил для себя <a href="http://wiki.freeswitch.ru/pages/viewpage.action?pageId=426027">минимально работоспособный вариант</a>, который дальше по мере необходимости уже можно наращивать дополнительными возможностями. Хотел было даже подбить текущего майнтейнера <a href="http://sisyphus.ru/ru/srpm/Sisyphus/freeswitch">FreeSWITCH в ALT Linux</a> сделать этот вариант конфигурации одним из коробочных - да тот оказался <a href="https://bugzilla.altlinux.org/show_bug.cgi?id=23868">слишком несговорчивым</a> :(Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com9tag:blogger.com,1999:blog-7967939136639017593.post-39999464461978541592010-05-04T09:47:00.005+03:002010-12-29T15:25:43.742+02:00Java services with MavenНаконец-то я научился использовать <a href="http://ru.wikipedia.org/wiki/Apache_Maven">maven</a> :) Устанавливаем <a href="http://admdev.blogspot.com/2009/12/groovy-first-steps.html">аналогично Groovy</a>:<br />
<pre># cd /opt
# wget http://www.sai.msu.su/apache/maven/binaries/apache-maven-2.2.1-bin.zip
# unzip apache-maven-2.2.1-bin.zip
# ln -s apache-maven-2.2.1 maven
# cat > /etc/profile.d/m2home.sh << EOF
> M2_HOME=/opt/maven
> export M2_HOME
> export PATH=$PATH:$M2_HOME/bin
> EOF
# chmod 755 /etc/profile.d/m2home.sh
</pre>В качестве подопытного кролика используем <a href="http://admdev.blogspot.com/2008/08/lightweight-jee.html">мои старые примеры</a>, разрезанные на 2 части:<br />
<ul><li><a href="http://git.altlinux.org/people/enp/packages/java-service.git">дистрибутивозависимую</a></li>
<li><a href="http://github.com/enp/service">кросcплатформенную</a> (примеры <a href="http://enp.itx.ru/java/examples/ServiceApp.NoLib.zip">ServiceApp</a>, <a href="http://enp.itx.ru/java/examples/SpringApp.NoLib.zip">SpringApp</a>, <a href="http://enp.itx.ru/java/examples/SpringJettyWebApp.NoLib.zip">SpringJettyWebApp</a> и <a href="http://enp.itx.ru/java/examples/SpringJpaApp.NoLib.zip">SpringJpaApp</a> приблизительно соответствуют тегам <a href="http://github.com/enp/service/tree/logging">logging</a>, <a href="http://github.com/enp/service/tree/spring">spring</a>, <a href="http://github.com/enp/service/tree/web/jetty">web</a> и <a href="http://github.com/enp/service/tree/persistence/hibernate">persistence</a>)</li>
</ul>Собираем:<br />
<pre>$ git clone git://github.com/enp/service.git
$ cd service/
$ mvn package
$ du -s target/service-0.1*
2.2M target/service-0.1-dist.zip
8.0K target/service-0.1.jar
12K target/service-0.1-src.zip
</pre>Запустить можно как приложение:<br />
<pre>$ cd target/
$ unzip service-0.1-dist.zip
$ cd service-0.1
$ java -jar service-0.1.jar
</pre>И как сервис:<br />
<pre># apt-get install java-service
# java-service-create myservice
# service myservice start
# service myservice status
# service myservice stop
# java-service-destroy myservice
</pre>В пакете <a href="http://sisyphus.ru/ru/srpm/Sisyphus/java-service">java-service</a> в качестве уже скомпилированной реализации сервиса (файл /var/lib/java-service/template.zip) лежит то, что доступно по тегу <a href="http://github.com/enp/service/tree/service">service</a>. Командой java-service-create myservice архив template.zip разворачивается в /var/lib/java-service/myservice - и вот содержимое этого каталога я уже подменяю моим собственным приложением.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-55205862026182036282010-04-23T16:33:00.019+03:002011-01-28T11:32:25.483+02:00Новые сборки ALT Linux Live Lite c XFCE и KDE3Немного доработал десктопную часть <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">mkimage-profile-live</a> и попутно на свежем <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/5.1/branch">branch/5.1</a> собрал livecd с <a href="http://enp.itx.ru/linux/alt/5.1/iso/altlive-xfce-5.1-i586.iso">XFCE</a> и <a href="http://enp.itx.ru/linux/alt/5.1/iso/altlive-kde3-5.1-i586.iso">KDE3</a> (только i586) - причем последний <a href="http://www.altlinux.org/LTSP/Memory#.D0.9F.D0.BE.D1.82.D1.80.D0.B5.D0.B1.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D0.BC.D1.8F.D1.82.D0.B8_.28Mb.29">по некоторым данным</a> должен быть едва ли не легче первого. <br />
<br />
Выглядят они так:<br />
<table style="width:auto;"><tr><td><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOH__ZGjOj8SdaDdJi7Hhyphenhyphen6L63CWeSVXMBrW1n6l7n8cvRccrlzbE666AeBetXwmLKWVoSCDhkd1GR6XeX-8_XSIgvzyGs9rFlMT17SporzJWLd1qmCigZny-G8b57yvtzxDLQKL8k5Hea/"><img style="cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOH__ZGjOj8SdaDdJi7Hhyphenhyphen6L63CWeSVXMBrW1n6l7n8cvRccrlzbE666AeBetXwmLKWVoSCDhkd1GR6XeX-8_XSIgvzyGs9rFlMT17SporzJWLd1qmCigZny-G8b57yvtzxDLQKL8k5Hea/" /></a><br />
</td><td><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJ3FlOc906qBzPCwbGv0u20ApYWjRxhYnsW0Be1xhWVgV68dUjxMHv57H8fgeR-t4bHcqgvpZdX4Yf6qCVWI20_1yVoXyfyUoaLNWjwbRCMryEafG8G_fOalSsps0LEhkYsaupLPlsunU/"><img style="cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJ3FlOc906qBzPCwbGv0u20ApYWjRxhYnsW0Be1xhWVgV68dUjxMHv57H8fgeR-t4bHcqgvpZdX4Yf6qCVWI20_1yVoXyfyUoaLNWjwbRCMryEafG8G_fOalSsps0LEhkYsaupLPlsunU/" /></a><br />
</td></tr>
</table><br />
Инструкции по переносу загруженной системы на жесткий диск можно найти в файле /etc/issue и, соответственно, на всех текстовых консолях - впрочем <a href="http://admdev.blogspot.com/2009/12/alt-linux-live-lite.html">чуть раньше</a> я их уже приводил. Инструкции по изготовлению liveflash из livecd лежат в файле README прямо в корне iso-образов.<br />
<br />
Желающие могут воспроизвести результаты следующим образом:<br />
<br />
<pre>$ git clone git.alt:/people/enp/packages/mkimage-profile-live.git
$ cd mkimage-profile-live
$ git checkout autoconf
$ autoconf
$ ./configure \
--with-release=5.1 \
--with-aptconf=/home/enp/apt/apt.conf.M51.i586 \
--with-kernel=el-smp \
--with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin-gdm,de-xfce,apps-firefox,apps-office,apps-mobile,sound
--with-timezone=Europe/Moscow
--with-locale=ru_RU
--with-user=user
$ make
$ du -s .work/.out/altlinux-5.1-live.iso
516M altlinux-5.1-live.iso
</pre><br />
Это сборка образа с XFCE. Образ с KDE3 собирается аналогично, только dm-autologin-gdm,de-xfce нужно заменить на dm-autologin-kdm3,de-kde3.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com11tag:blogger.com,1999:blog-7967939136639017593.post-58045584195879606592010-01-26T13:05:00.008+02:002010-04-19T09:05:10.229+03:00ALT Linux Live Lite для толстых бездисковых клиентовИспользовать современные рабочие станции с 1Gb RAM и (зачастую двухъядерными) Atom в минимальной комплектации в качестве тонких бездисковых клиентов кажется слишком расточительным, а найти менее производительное и дорогое (но при этом не б/у) железо чем дальше, тем сложнее. Самый логичный выход из этой ситуации - запуск DE и всех необходимых приложений локально, но с удаленного носителя, как и в случае тонких клиентов. Принципиальное отличие в том, что приложениям потребуется где-то сохранять результаты своей работы - но r/w /home можно держать на NFS, а остальное и потерять не жалко.<br />
<br />
Образ для удаленной загрузки легко изготовить на основе профиля <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">mkimage-profile-live.git</a>, в который только что добавлена feature с именем nfshome - она позволяет указать адрес сервера и имя экспортируемого каталога в конфигурации syslinux примерно так:<br />
<pre>label remote
kernel altlinux-live-i586/vmlinuz
append initrd=altlinux-live-i586/initrd.img root=/dev/nfs ip=dhcp fastboot nfsroot=192.168.100.209:/export/root nfshome=192.168.100.209:/export/home
</pre>В зависимости от необходимости авторизации пользователей можно либо использовать автологин и монтировать в /home разные каталоги для разных рабочих станций (и реализовать в nfshome автоподстановку каталога на основе имени рабочей станции), либо использовать LDAP. Поскольку ни то, ни другое пока не работает из коробки, то в нарушение традиции я не буду выкладывать образы - желающие могут собрать и допилить их самостоятельно.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-48172686862340778402009-12-23T10:15:00.010+02:002010-04-19T09:07:28.872+03:00Groovy first stepsОзаботившись скриптовой обвязкой для очередной инсталляции, где выразительности unix shell явно недостаточно, подумал о том, что поздняк метаться. Perl, Python, Ruby и прочие скриптовые языки хороши каждый по-своему, но от Java мне все равно никуда не деться. В то же время с <a href="http://groovy.codehaus.org">Groovy</a> я получу примерно тот же уровень комфорта при ad-hook scripting с сохранением всего, что я уже умею и сделал. Ибо код Groovy не просто компилируется в байткод JVM (таких языков <a href="http://en.wikipedia.org/wiki/List_of_JVM_languages">много</a>), но максимально синтаксически и семантически похож на Java.<br />
<br />
Предварительные требования для Groovy: установленный JDK и прописанный JAVA_HOME (в ALT Linux для этого достаточно сказать apt-get install java-1.6.0-sun-devel tzdata-java). Процесс установки выглядит так:<br />
<pre># cd /opt
# wget http://dist.groovy.codehaus.org/distributions/groovy-binary-1.7.0.zip
# unzip groovy-binary-1.7.0.zip
# ln -s groovy-1.7.0 groovy
# cat > /etc/profile.d/groovyhome.sh << EOF
> GROOVY_HOME=/opt/groovy
> export GROOVY_HOME
> export PATH=$PATH:$GROOVY_HOME/bin
> EOF
# chmod 755 /etc/profile.d/groovyhome.sh
</pre>Причины неиспользования groovy из альтовского репозитария (или <a href="http://jpackage.org/">JPackage</a> в общем случае) просты - огромный список зависимостей, большая часть которых мне никогда не потребуется, и, как следствие, протухшие версии зависимых пакетов да и самого groovy. Проблема переносимости в случае ad-hook scripting менее актуальна, однако при увеличении размеров проекта она вполне может проявиться.<br />
<br />
Теперь перелогинимся и убедимся в том, что Groovy у нас есть:<br />
<pre>$ groovy -version
Groovy Version: 1.7.0 JVM: 1.6.0_17
</pre>а затем напишем традиционный Hello World:<br />
<pre>$ cat > hello.groovy << EOF
> #!/usr/bin/env groovy
>
> def hello(name) {
> println("Hello $name!")
> }
>
> hello("World")
> EOF
$ chmod 755 hello.groovy
$ ./hello.groovy
Hello World!
</pre>Ну и тормоз же он однако:<br />
<pre>$ time ./hello.groovy
Hello World!
3.18user 0.18system 0:02.22elapsed 151%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+25068minor)pagefaults 0swaps
</pre>И даже предварительная компиляция и запуск готового байткода помогает не сильно:<br />
<pre>$ groovyc hello.groovy
$ time java -cp .:$GROOVY_HOME/embeddable/groovy-all-1.7.0.jar hello
Hello World!
1.88user 0.10system 0:01.60elapsed 123%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+15771minor)pagefaults 0swaps
</pre>Хотя здесь как раз нет ничего удивительного - скоростью запуска JVM никогда не отличалась. Для разных мелочей эту проблему можно обойти с помощью Groovy Shell:<br />
<pre>$ groovysh
Groovy Shell (1.7.0, JVM: 1.6.0_17)
Type 'help' or '\h' for help.
------------------------------------------------------------------------------------
groovy:000> def hello(name) {
groovy:001> println("Hello $name!")
groovy:002> }
===> true
groovy:000> hello("World")
Hello World!
===> null
groovy:000> exit
</pre>Для отлаженных скриптов лишних 3 секунд на запуск уже не очень жалко, ну а запускать их (и JVM вообще) слишком часто никто в здравом уме не станет - постоянно запущенный сервис будет работать значительно эффективнее.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com1tag:blogger.com,1999:blog-7967939136639017593.post-29498927298309871802009-12-09T13:38:00.014+02:002011-01-28T11:51:08.164+02:00Развитие ALT Linux Live LiteДавно ожидаемый <a href="http://lists.altlinux.org/pipermail/sisyphus/2009-October/343127.html">комбинаторый взрыв возможных конфигураций <b>Live Lite</b></a> заставил меня задействовать autoconf в одноименном бранче <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">профиля</a>. Выглядит примерно так:<br />
<pre>$ autoconf
$ ./configure --help
...
--with-aptconf=file custom apt.conf location, e.g '--with-aptconf=/etc/apt/apt.conf'
--with-release=release install altlinux-release-* package
--with-kernel=kernel install kernel-image-* package
--with-boot=boot boot : propagator, nfs, nbd
--with-features=features features : see live/features directory ...
--with-user=user user : default user name
--with-locale=locale locale : en_US, ru_RU, ...
--with-timezone=timezone timezone : Europe/London, Europe/Moscow, ...
$ ls live/features
apps-firefox
apps-mobile
apps-office
de-xfce
dm-autologin
dm-autologin-gdm
dm-gdm
fakeinstall
sound
tools-console
tools-network
xorg
</pre>Типичная feature выглядит следующим образом:<br />
<pre>$ cat live/features/dm-autologin/packages
autologin
$ cat live/features/dm-autologin/image-scripts.d/01-autologin
#!/bin/sh -e
cat >> /etc/sysconfig/autologin << EOF
USER=altlive
EXEC=/usr/bin/xinit
EXEC_ARGS=/usr/bin/startx
EOF
</pre>
И пока для моих инсталляций такой способ формирования образов выглядит удобнее <a href="http://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop.git">m-p-d</a>.
Желающие могут загрузить образы, собранные на текущем <a href="ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/5.1/branch">branch/5.1</a> (общая часть --with-release=5.1 --with-kernel=el-smp --with-user=user --with-timezone=Europe/Moscow --with-locale=ru_RU):<ul><li><a href="http://enp.itx.ru/linux/alt/5.1/iso/altlive-console-5.1-i586.iso">i586</a> --with-features=fakeinstall,tools-console,tools-network</li>
<li><a href="http://enp.itx.ru/linux/alt/5.1/iso/altlive-xfce-5.1-i586.iso">i586</a> --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin-gdm,de-xfce,apps-firefox,apps-office,apps-mobile,sound</li>
<li><a href="http://enp.itx.ru/linux/alt/5.1/iso/altlive-console-5.1-x86_64.iso">x86_64</a> --with-features=fakeinstall,tools-console,tools-network</li>
<li><a href="http://enp.itx.ru/linux/alt/5.1/iso/altlive-xfce-5.1-x86_64.iso">x86_64</a> --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin-gdm,de-xfce,apps-firefox,apps-office,apps-mobile,sound</li>
</ul>Немного измененная процедура установки выглядит теперь так:
<ul><li>размечаем диск с помощью [c|s]fdisk/mkswap/mkfs.ext4 или parted</li>
<li>вызываем /live/install (диск) (раздел для корня) - при этом загруженная система переносится на корневой раздел, настраивается fstab (туда прописываются корень и все найденные своп-разделы) и lilo</li>
<li>перезагружаемся с жесткого диска</li>
<li>настраиваем FQDN в /etc/sysconfig/network</li>
<li>настраиваем <a href="http://www.altlinux.org/Etcnet">сеть</a></li>
<li>меняем рутовский пароль и пароль пользователя user - по дефолту они пустые</li>
</ul>Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com6tag:blogger.com,1999:blog-7967939136639017593.post-30893736299237196232009-10-05T13:07:00.007+03:002011-01-28T12:00:39.414+02:00Сетевая загрузка ALT Linux Live Lite<a href="http://sisyphus.ru/ru/srpm/Sisyphus/propagator">Пропагатор</a> позволяет загружать <a href="http://admdev.blogspot.com/2009/09/alt-linux-live-lite.html">ALT Linux Live Lite</a> не только с локальных устройств, но и <a href="http://www.altlinux.org/NetInstall">по сети</a>, однако при этом образ загружаемой системы размещается в RAM - и это не очень хорошо в тех случаях, когда памяти мало. По аналогии с <a href="http://www.altlinux.org/LTSP">ALTSP</a> можно монтировать корень загружаемой по сети системы непосредственно по NFS/NBD - профиль можно взять <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">там же</a> - но в бранче netboot.<br />
<br />
Не удержался и сделал "ALTSP на коленке" - в настройках pxelinux можно указать параметры nbdswap для сетевого свопа и xdmcp для подключения к удаленному десктопу. Результаты в бранче netboot-xdmcp.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-8957660832196401002009-09-23T15:06:00.013+03:002011-01-28T12:02:25.415+02:00ALT Linux Live Lite<a href="http://admdev.blogspot.com/2008/08/alt-linux-40-server-lite.html">ALT Linux 4.0 Server Lite</a> умер, да здравствует <b>ALT Linux Live Lite</b>! Как видно из названия, это в первую очередь live-система с <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git?p=mkimage-profile-live.git;a=blob;f=live/packages;h=112b8cf672d3c1dfb6aa157adb3f85c811217105;hb=a74c6fc8434be72695e17f3420fc5e2867c4f5d8">минимальным набором необходимых инструментов</a>, однако она также пригодна к установке самой себя на жесткий диск в ручном режиме:<ul><li>размечаем диск с помощью fdisk/sfdisk/cfdisk</li>
<li>вызываем /live/install (диск) (раздел для корня) (раздел для свопа) - при этом инициализируется своп, создается и заполняется файловая система ext3 на корневом разделе, настраивается fstab и lilo</li>
<li>перезагружаемся с жесткого диска</li>
<li>настраиваем FQDN в /etc/sysconfig/network</li>
<li>настраиваем <a href="http://www.altlinux.org/Etcnet">сеть</a></li>
<li>удаляем PermitRootLogin yes из /etc/openssh/sshd_config - это удобно для удаленной установки через выключенный по умолчанию ssh, но не очень подходит в production</li>
<li>создаем хотя бы одного пользователя и включаем его в группу wheel - по умолчанию таких пользователей еще нет</li>
</ul>Система собрана на текущем Сизифе, <s>доступны iso для архитертур <a href="http://enp.itx.ru/linux/alt/sisyphus/iso/altlinux-live-i586.iso">i586</a> и <a href="http://enp.itx.ru/linux/alt/sisyphus/iso/altlinux-live-x86_64.iso">x86_64</a></s> iso потеряны а, профиль можно взять <a href="http://git.altlinux.org/people/enp/packages/mkimage-profile-live.git">здесь</a>.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-67563751570475728972009-08-13T14:31:00.010+03:002010-05-25T15:00:55.094+03:00Telephone eXchange Management LibraryНа <a href="http://github.com">GitHub</a> отправилась <a href="http://github.com/enp/txmlib">TXMLib (Telephone eXchange Management Library)</a> - небольшая библиотека, предоставляющая унифицированный API к общим операциям различных <a href="http://en.wikipedia.org/wiki/Telephone_exchange#Digital_switches">цифровых АТС</a>. Пока поддерживается только измерение параметров абонентской линии только для АТС типа <a href="http://en.wikipedia.org/wiki/EWSD">EWSD</a>, <a href="http://mt20.ru">MT-20/25</a> и <a href="http://loniis.ru/products/DX200.pdf">DX-200</a> (а также ее потомка <a href="http://loniis.ru/products/atsc-90.pdf">АТСЦ-90</a>), однако дизайн библиотеки позволяет сравнительно легко добавлять поддержку новых типов АТС и новых типов операций.<br />
<br />
Для этого потребуется описать наследников классов:<ul><li>txm.lib.common.core.CommandManager - для выделения ответов на команды из терминала АТС - поддержка чего-то отличного от текстового терминала возможна, но пока детально не проработана</li>
<li>txm.lib.common.core.OperationManager - для перевода унифицированных операций в конкретные команды АТС</li>
</ul>Помимо хорошей экономии на общем коде и повышения его читабельности по сравнению с инструментами типа <a href="http://ru.wikipedia.org/wiki/Expect">expect</a> мы также получаем дополнительный бонус в виде сформированного графа операций, команд, их результатов и ошибок, готового к сериализации в XML (см. класс txm.lib.examples.OperationExample) или, например, в реляционную БД посредством <a href="http://ru.wikipedia.org/wiki/ORM">ORM</a>.<br />
<br />
Принципиальным ограничением TXMLib явлется отсутствие поддержки операций с состояниием, но потребность в них невелика. Скорее наоборот, есть потребность пакетном режиме: выполнение одной операции не должно приводить к отказу выполнения другой - вместо этого они должны ставиться в очередь и выполняться по мере поступления.<br />
<br />
Разумеется, диспетчеризацией операций и их передачей по сети TXMLib не занимается - это следующая задача для другого инструмента.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com0tag:blogger.com,1999:blog-7967939136639017593.post-34150956711323024512009-02-17T13:24:00.015+02:002009-03-05T09:55:18.078+02:00ALT Linux 4.1 Desktop Lite - неофициальная сборкаВремя от времени в <a href="https://lists.altlinux.org/mailman/listinfo/community">community@lists.altlinux.ru</a> спрашивают: <a href="http://lists.altlinux.org/pipermail/community/2009-February/648474.html">а где бы раздобыть ALT Linux 4.1 Desktop Lite</a>, который до релиза, как известно, не дожил :(<br /><br />Поскольку я собирал для себя нечто подобное, но с другим дизайном и с другими дефолтами, и лучше поздно, чем никогда, выкладываю пересобранные на сегодняшнем <a href="ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.1/branch/">branch/4.1</a> cd-образы:<br /><ul><li><a href="http://enp.itx.ru/linux/alt/4.1/iso/altlinux-4.1-xfce-min-i586.iso">минимальный</a> - в комплекте только <a href="http://www.xfce.org/">XFCE</a> и <a href="http://www.mozilla-europe.org/ru/firefox/">Firefox</a></li><li><a href="http://enp.itx.ru/linux/alt/4.1/iso/altlinux-4.1-xfce-max-i586.iso">полный</a> - также включены <a href="http://www.mozilla-russia.org/products/thunderbird/">Thunderbird</a>, <a href="http://">Pidgin</a>, <a href="http://ru.openoffice.org/">OpenOffice</a>, <a href="http://projects.gnome.org/evince/">Evince</a>, <a href="http://www.videolan.org/vlc/">VLC Player</a></li></ul>Инсталлятор от официального не отличается ничем, свежеустановленная система выглядит так:<table><br /><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9hf3keK56VPArUcnZzduzJUuIun_nXHldFuVFEOJYglcJZH7s6GsTf4I-cYd2HZYxcixzKm8B66KPxKwDJu6UOCCOEd32eSt_H1a7I18pKsBsXv6ekmGdF_6lyIAgOOcL4-ICCEg8jbHC/s1600-h/altlinux-4.1-xfce-login.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9hf3keK56VPArUcnZzduzJUuIun_nXHldFuVFEOJYglcJZH7s6GsTf4I-cYd2HZYxcixzKm8B66KPxKwDJu6UOCCOEd32eSt_H1a7I18pKsBsXv6ekmGdF_6lyIAgOOcL4-ICCEg8jbHC/s320/altlinux-4.1-xfce-login.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5303726964438395138" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQo4JMoCyiUHESOU6BL_cC7IMIMS14V-cNU5B4Qs0Fz-M3_JFGDJBZY8ybyJpyU-YBnIu2VhHsDYzkzF84f5MthxDAFzeNeiXEe-gH8Gc5PIcIlck5PYZnvuxrnaYMao4sOX4B7-MSt0C/s1600-h/altlinux-4.1-xfce-desktop.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQo4JMoCyiUHESOU6BL_cC7IMIMS14V-cNU5B4Qs0Fz-M3_JFGDJBZY8ybyJpyU-YBnIu2VhHsDYzkzF84f5MthxDAFzeNeiXEe-gH8Gc5PIcIlck5PYZnvuxrnaYMao4sOX4B7-MSt0C/s320/altlinux-4.1-xfce-desktop.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5303728545352598018" /></a></td></tr><br /></table><br />Если кому-то вдруг захочется это собрать, профиль можно взять <a href="http://git.altlinux.org/people/enp/packages/mkimage-profiles-desktop.git">здесь</a>. Планы по сборке аналогичного дистрибутива на <a href="ftp://ftp.altlinux.org/pub/distributions/ALTLinux/5.0/branch/">branch/5.0</a> есть, но если кто-нибудь меня опередит, я буду только рад :)Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com5tag:blogger.com,1999:blog-7967939136639017593.post-40628801616709734182009-02-15T22:30:00.010+02:002010-04-19T09:36:03.211+03:00Практическое введение в GitВозможно, я плохо искал, но простого пошагового введения в <a href="http://ru.wikipedia.org/wiki/Git">Git</a> на русском для тех разработчиков и админов, которые кое-как научились использовать <a href="http://ru.wikipedia.org/wiki/CVS">CVS</a> или <a href="http://ru.wikipedia.org/wiki/Subversion">SVN</a>, до сих пор нет. Много полезных материалов и ссылок можно найти на <a href="http://www.altlinux.org/Git">ALT Linux Wiki</a>, однако значительная их часть содержит альтовскую дистрибутивостроительную специфику или, наоборот, несколько далека от практических задач. Я попытаюсь описать один из типичных сценариев использования Git без привязки к каким-либо задачам и без излишних подробностей - за ними лучше сразу идти в <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">Git User's Manual</a>.<br />
<br />
Итак, основная идея Git, как и любой распределенной SCM, заключается в том, что мы имеем дело с локальными коммитами в индивидуальных репозитариях разработчиков и с мехнизмами обмена коммитами между репозитариями. Главное преимущество - гибкость (можно вести локальные бранчи с локальными коммитами, не забивая основной репозитарий результатами неудачных или удачных экспериментов), обратная сторона - некоторое увеличение сложности взаимодействия по сравнению с централизованными SCM.<br />
<br />
Далее предполагаем, что центральный и всегда доступный репозитарий все же имеется, и разработчики обмениваются коммитами не напрямую друг с другом, а с центральным репозитарием.<br />
<br />
Устанавливаем все необходимое и заводим на сервере центральный репозитарий:<br />
<pre># apt-get install git-core
# mkdir /home/repo/alpha.git
# cd /home/repo/alpha.git
# git init --bare --shared=true
</pre>Работать с ним будем по ssh, поэтому создаем для разработчиков учетные записи и добавляем их в группу, во владение которой передаем репозитарий:<br />
<pre># useradd -d /var/empty/ -s /usr/bin/git-shell user1
# useradd -d /var/empty/ -s /usr/bin/git-shell user2
# groupadd alpha
# usermod -G alpha user1
# usermod -G alpha user2
# chown -R root:alpha /home/repo/alpha.git
</pre>Теперь один из разработчиков может создать локальный репозитарий и сделать в нем несколько коммитов:<br />
<pre>[user1@workstation1 ~]$ mkdir alpha
[user1@workstation1 ~]$ cd alpha
[user1@workstation1 alpha]$ git init
[user1@workstation1 alpha]$ git config user.name 'User 1'
[user1@workstation1 alpha]$ git config user.email 'user1@workstation1'
[user1@workstation1 alpha]$ echo 'line 1' > file
[user1@workstation1 alpha]$ git add .
[user1@workstation1 alpha]$ git commit -a -m 'add line 1'
[user1@workstation1 alpha]$ echo 'line 2' >> file
[user1@workstation1 alpha]$ git commit -a -m 'add line 2'
</pre>Каждый коммит принадлежит одному или нескольким бранчам. Для первого коммита автоматически создается бранч с именем master, в него же по умолчанию попадают следующие коммиты.<br />
<br />
Несколько полезных команд:<br />
<ul><li>git branch - показать список бранчей, выделив текущий, создать, удалить или переименовать бранч</li>
<li>git status - показать текущее состояние рабочей копии (какие новые файлы появились, а какие были удалены, что закоммитили, а что нет, и т.д.)</li>
<li>git log - показать историю коммитов, каждый из которых идентифицируется с помощью хеша sha1</li>
<li>git show - показать подробности последнего коммита или любого коммита по его хешу</li>
<li>git diff - показать разницу между последним коммитом и рабочей копией или между коммитами</li>
</ul>Теперь подготовим наш репозитарий к отгрузке коммитов в центральный репозитарий на сервере:<br />
<pre>[user1@workstation1 alpha]$ git remote add origin user1@gitserver:/home/repo/alpha.git
</pre>И отправим туда коммиты, принадлежащие локальному бранчу master - они попадут в удаленный бранч с таким же именем:<br />
<pre>[user1@workstation1 alpha]$ git push origin master
</pre>В дальнейшем можно будет ограничиться git push, т.к. origin - дефолтное имя удаленного репозитария, а бранч master в нем уже существует. С другой стороны, ничто не мешает явно указывать URL удаленного репозитария и имена локального и удаленного бранчей:<br />
<pre>[user1@workstation1 alpha]$ git push user1@gitserver:/home/repo/alpha.git master:master
</pre>Для получения коммитов из центрального репозитария в локальный бранч master его нужно было бы создать с параметром --track, однако бранч уже существует, поэтому просто укажем соответствующий ему удаленный бранч в настройках:<br />
<pre>$ cat >> .git/config << EOF
> [branch "master"]
> remote = origin
> merge = refs/heads/master
> EOF
</pre>Получить новые коммиты из центрального репозитария можно так:<br />
<pre>[user1@workstation1 alpha]$ git fetch
[user1@workstation1 alpha]$ git merge origin/master
</pre>или просто:<br />
<pre>[user1@workstation1 alpha]$ git pull
</pre>В случае конфликтующих изменений операция merge не будет завершена коммитом - в этом случае нужно будет выполнить git commit самостоятельно после разрешения конфликта.<br />
<br />
Разумеется новые коммиты могут появиться в центральном репозитарии только после того, как другой разработчик клонирует его, внесет туда какие-либо изменения и отправит их обратно - при этом настраивать свой репозитарий для взаимодействия с удаленным ему уже не потребуется:<br />
<pre>[user2@workstation2 ~]$ git clone user2@gitserver:/home/repo/alpha.git
[user2@workstation2 ~]$ cd alpha/
[user2@workstation2 alpha]$ git config user.name 'User 1'
[user2@workstation2 alpha]$ git config user.email 'user2@workstation2'
[user2@workstation2 alpha]$ echo 'line 3' >> file
[user2@workstation2 alpha]$ git commit -a -m 'add line 3'
[user2@workstation2 alpha]$ git push
</pre>Теперь чуть подробнее о том, ради чего все эти мучения - ведь для выполнения аналогичных операций средствами CVS или SVN потребовалось бы меньше операций. Дело в том, что до тех пор, пока мы не отгрузили коммиты в удаленный репозитарий, мы вольны распоряжаться ими как нам вздумается. Например, заведем для экспериментов новый локальный бранч и сделаем в нем еще пару коммитов:<br />
<pre>[user1@workstation1 alpha]$ git-checkout -b experimental
[user1@workstation1 alpha]$ echo 'line 4' >> file
[user1@workstation1 alpha]$ git commit -a -m 'add line 4'
[user1@workstation1 alpha]$ echo 'line 5' >> file
[user1@workstation1 alpha]$ git commit -a -m 'add line 5'
</pre>Если какие-то коммиты лучше было бы не делать, можно откатиться к любому заданному коммиту, указав его:<ul><li>явно в виде sha1 id - их покажет git log</li>
<li>по имени тэга - его можно создать для коммита по его sha1 id с помощью git tag</li>
<li>относительно другого коммита - например, последнему коммиту, на который указывает HEAD, предшествует HEAD^:</li>
</ul><pre>[user1@workstation1 alpha]$ git reset --hard HEAD^
</pre>Также бывают полезны параметр --soft (откатиться, но сохранить содержимое измененных файлов для последующего редактирования) и параметр --amend команды git commit (включить содержимое старого коммита в новый).<br />
<br />
Вернемся в бранч master, сделаем в нем еще один коммит и втянем туда результаты экспериментов:<br />
<pre>[user1@workstation1 alpha]$ git checkout master
[user1@workstation1 alpha]$ subst '/line 1/iline 0' file
[user1@workstation1 alpha]$ git commit -a -m 'add line 0'
[user1@workstation1 alpha]$ git merge experimental
</pre>Вместо операции merge, которая создает общий коммит для бранчей, иногда бывает полезно использовать rebase - эта операция переупорядочивает коммиты для того, чтобы сохранить историю линейной. Очень полезно для изучения истории использовать gitk, gitg или qgit - эти инструменты помогут представить описанное более наглядно.<br />
<br />
Разумеется, после того, как мы сделали git push, с историей лучше не забавляться - этим мы сильно осложним жизнь тем, кто уже основывает свои новые коммиты на ней. А вот до git push - сколько угодно :)Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com2tag:blogger.com,1999:blog-7967939136639017593.post-87399178291700526252009-02-02T10:46:00.019+02:002010-04-19T09:43:23.978+03:00Redmine quickstartПохоже, что изначально не приглянувшийся мне <a href="http://www.redmine.org/">Redmine</a> несколько удобнее <a href="http://trac.edgewall.org/">Trac</a>:<ul><li>есть приличная русификация</li>
<li>есть поддержка подпроектов</li>
<li>есть web-интерфейс для управления проектами и правами доступа к ним - прям аж обидно, и зачем я тратил время на <a href="http://admdev.blogspot.com/2009/01/trac-appliance.html">Trac appliance</a>?</li>
<li>и самое главное - дефолтный дизайн отлично гармонирует с дизайном моего блога :)</li>
</ul>В качестве ложки дегтя пока заметил лишь то, что принимать информацию об авторизации от <a href="http://ru.wikipedia.org/wiki/Apache">Apache</a> он не умеет, правда умеет <a href="http://ru.wikipedia.org/wiki/LDAP">LDAP</a>, который уже можно прикрутить <a href="http://httpd.apache.org/docs/2.2/mod/mod_ldap.html">к Apache</a>. И опакетить его, к сожалению, <a href="http://lists.altlinux.org/pipermail/sysadmins/2009-February/029235.html">так просто не выйдет</a> (<b>updated</b>: поэтому <a href="http://lists.altlinux.org/pipermail/sisyphus/2009-November/343786.html">вышло непросто</a>).<br />
<br />
Мне пришлось поставить из тарболла:<br />
<pre># apt-get install ruby-rake ruby-stdlibs ruby-activerecord-sqlite3-adapter rubygems
# useradd -d /opt/redmine -s /dev/null redmine
# su - redmine -s /bin/bash
$ wget http://rubyforge.org/frs/download.php/49319/redmine-0.8.0.tar.gz
$ tar -zxf redmine-0.8.0.tar.gz
$ cd redmine-0.8.0
$ cat > config/database.yml << EOF
> production:
> adapter: sqlite3
> dbfile: db/production.db
> EOF
$ rake db:migrate RAILS_ENV="production"
$ rake redmine:load_default_data RAILS_ENV="production"
$ ruby script/server -e production
</pre>Теперь подключаемся к http://server:3000/ и логинимся под именем admin с таким же точно паролем. Несмотря на грозные предупреждения в <a href="http://www.redmine.org/wiki/redmine/RedmineInstall">руководстве по установке</a> с более новыми, нежели указано, версиями <a href="http://ru.wikipedia.org/wiki/Ruby">ruby</a> и <a href="http://ru.wikipedia.org/wiki/SQLite">sqlite</a> вроде бы все работает.Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com1tag:blogger.com,1999:blog-7967939136639017593.post-9976065631602190052009-01-29T13:56:00.015+02:002010-04-19T09:50:26.403+03:00Trac applianceИ все-таки <a href="http://admdev.blogspot.com/2009/01/trac-quickstart-with-alt-linux.html">быстрый запуск Trac</a> оказывается не слишком быстрым, а результат - не слишком удобным в сопровождении, особенно когда совместно с Trac предполагается использовать <a href="http://ru.wikipedia.org/wiki/Система_управления_версиями">систему управления версиями</a>. Более удобный use case представляется для меня сейчас таким:<br />
<ul><li>N проектов - каждый представляет из себя проект Trac и, возможно, настроенный для использования с ним репозитарий <a href="http://ru.wikipedia.org/wiki/Git">Git</a> или <a href="http://ru.wikipedia.org/wiki/Subversion">Subversion</a></li>
<li>M пользователей - каждый имеет полный доступ к некоторым проектам (т.е. может работать в Trac и коммитить в репозитарий), а к некоторым не имеет вовсе.</li>
</ul>Проекты/пользователи должны создаваться/удаляться одной командой, для разрешения/запрета доступа пользователя к проекту также должно быть достаточно одной команды.<br />
<br />
Проблема заключается в выборе технологии авторизации и аутентификации, которые позволили бы реализовать описанную схему. Для standalone версий Trac, Git и Subversion ведение единой базы данных пользователей и прав доступа к проектам невозможно, поэтому придется задействовать <a href="http://ru.wikipedia.org/wiki/Apache">Apache</a> и его <a href="http://httpd.apache.org/docs/2.2/howto/auth.html">средства управления доступом</a> - соответственно репозитарии Git и Subversion будут доступны по протоколу <a href="http://ru.wikipedia.org/wiki/WebDAV">WebDAV</a>. При этом никто не мешает при необходимости использовать более гибкие настройки прав доступа внутри проектов средствами самих <a href="http://trac.edgewall.org/wiki/TracFineGrainedPermissions">Trac</a> и <a href="http://svnbook.red-bean.com/nightly/ru/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authz.perdir">Subversion</a>.<br />
<br />
Готовое решение доступно в виде основного пакета appliance-trac и дополнительных appliance-trac-scm-git и appliance-trac-scm-svn, собираемых из <a href="http://git.altlinux.org/people/enp/packages/appliance-trac.git">одноименного репозитария</a>. Устанавливаем требуемое штатным для ALT Linux образом:<br />
<pre>trac-scm-git
</pre>Создаем проект (указываем имя и тип репозитария - если последним параметром будет что-то отличное от git или svn, то репозитарий просто не будет создан):<br />
<pre># appliance-trac-create alpha git
</pre>Средствами Apache создаем пользователя:<br />
<pre># htpasswd2 -b /var/www/appliance-trac/passwd user userpwd
</pre>Включаем его в соответствующую группу Apache, имя которой соответствует имени проекта:<br />
<pre># vim /var/www/appliance-trac/group
</pre>При необходимости пользователя можно сделать администратором Trac:<br />
<pre># trac-admin /var/www/appliance-trac/env/alpha permission add user TRAC_ADMIN
</pre>Теперь пользователь user может работать с проектом через web-интерфейс по ссылке http://server//appliance-trac/env/alpha и напрямую с репозитарием:<br />
<pre>$ cat > ~/.netrc << EOF
> machine server
> login user
> password userpwd
> EOF
$ git-clone http://server/appliance-trac/scm/git/alpha.git
$ cd alpha/
$ echo "new line" >> README
$ git commit -a -m 'new commit'
$ git-http-push http://server/appliance-trac/scm/git/alpha.git heads/master
</pre>После того, как проект стал ненужным, его можно удалить:<br />
<pre># appliance-trac-drop alpha git
</pre>Eugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com2tag:blogger.com,1999:blog-7967939136639017593.post-89903509211012578632009-01-10T18:28:00.017+02:002010-04-19T09:52:32.827+03:00Trac quickstartВместе с <a href="http://admdev.blogspot.com/2008/12/lightweight-wiki-engine.html">совсем уж примитивными wiki-движками</a> бывают также полезны <a href="http://en.wikipedia.org/wiki/List_of_project_management_software">интегрированные системы</a> с wiki, багтрекером, web-интерфейсом к какой-нибудь <a href="http://ru.wikipedia.org/wiki/Система_управления_версиями">системе управления версиями</a> и прочими вкусностями - и среди них, как одну из самых простых в установке и в эксплуатации, можно выделить <a href="http://trac.edgewall.org/">Trac</a>.<br />
<br />
После установки и запуска штатным для ALT Linux образом:<br />
<pre># apt-get install trac
# service trac start
</pre>Trac готов к обслуживанию проектов, размещенных в каталоге /var/lib/trac, однако хотя бы один проект еще нужно создать:<br />
<pre># su - trac -s /bin/sh
$ trac-admin alpha initenv alpha sqlite:db/trac.db "" ""
$ vim alpha/conf/trac.ini # edit [header_logo] and [project] sections
</pre>После этого проект будет доступен на чтение всем желающим по ссылке http://localhost:8000/alpha. Для создания и редактирования багов и wiki-страниц необходимо авторизоваться, а для этого сначала создать пользователей следующим образом:<br />
<pre>$ trac-passwd -u user -p usrpwd >> /etc/trac/passwd
</pre>Для полного управления проектом нужно выдать пользователю user соответствующие права:<br />
<pre>$ trac-admin alpha permission add user TRAC_ADMIN
</pre>Такая схема разграничения прав доступа удобна для свободных проектов. Для проектов, процесс работы над которыми не должен быть публично доступным, необходима другая схема: как минимум, у пользователя anonymous необходимо изъять все права и явно выдать их группе authenticated. В этом случае все авторизовавшиеся пользователи будут иметь доступ ко все проектам, а это тоже не всегда оправдано. Для того, чтобы можно было ограничить права на уровне отдельных проектов, потребуется также изъять все права у группы authenticated, и передать их отдельной группе, а затем включать требуемых пользователей в эту группу:<br />
<pre>$ trac-restrict-env alpha developers
$ trac-admin alpha permission add user developers
</pre>Конечно, возможна и более тонкая настройка прав доступа - но об этом подробно написано в документации TracEugene Prokopievhttp://www.blogger.com/profile/11498996559985677100noreply@blogger.com1