tag:blogger.com,1999:blog-16408311950496209022024-03-14T09:14:43.462+03:00Путь свободен!iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.comBlogger43125tag:blogger.com,1999:blog-1640831195049620902.post-30258841828427645512012-12-24T15:34:00.001+04:002013-01-04T02:43:43.577+04:00Метод задействования tmpfs c ZFS во FreeBSD<h5>Пару слов о tmpfs</h5>
Это файловая система в виртуальной памяти, которая, как известно, при необходимости задействует SWAP. Отличие её от RAM-диска в том, что она не резервирует пространство в оперативной памяти фиксированного размера и может использовать пространство свопинга при превышении некоего количества записанных на неё данных и/или по требованию механизма свопинга операционной системы. Это свойство часто используется для ускорения приложений, использующих временные файлы, так как доступ к оперативной памяти намного быстрее, чем к диску. Файлы, записываемые в tmpfs, после перезагрузки не сохраняются.
<h5>Метод</h5>
1. Пишем в /boot/loader.conf следующую строчку: <code><pre>tmpfs_load="YES"</pre></code>
Если опция TMPFS не включена в конфигурацию ядра, в текущем сеансе загружаем соответствующий модуль ядра: <code><pre>% kldload tmpfs</pre></code>
2. Пишем в /etc/fstab следующую строчку: <code><pre>tmpfs /tmp tmpfs rw,mode=1777 0 0</pre></code>
3. В консоли выполняем серию команд для подготовки SWAP к новому режиму использования (удаляем старую ФС, если она есть, и существующий SWAP неподходящего размера; создаём новые каталог и SWAP подходящего размера): <code><pre>
% zfs destroy -f poolname/tmp ; mkdir -p /tmp
% swapoff /dev/zvol/poolname/swap
% zfs destroy poolname/swap
% zfs create -V 1500M poolname/swap
% zfs set org.freebsd:swap=on poolname/swap
% zfs set compress=lzjb poolname/swap
% zfs set checksum=on poolname/swap
% swapon /dev/zvol/poolname/swap
% swapinfo
Device 1M-blocks Used Avail Capacity
/dev/zvol/poolname/swap 1500 0 1500 0%
% mount /tmp
% df /tmp
Filesystem Size Used Avail Capacity Mounted on
tmpfs 7.1G 10M 7.1G 0% /tmp
</pre></code>
<h5>Источники информации</h5>
<ul>
<li>man <a href=http://www.freebsd.org/cgi/man.cgi?query=tmpfs>tmpfs(5)</a>
<li><a href=http://wiki.freebsd.org/RootOnZFS#ZFS_Swap_Volume>wiki.freebsd.org/RootOnZFS</a>
<li><a href=http://wiki.freebsd.org/TMPFS>wiki.freebsd.org/TMPFS</a>
</ul>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com2tag:blogger.com,1999:blog-1640831195049620902.post-37158730331533859402012-05-01T15:00:00.000+04:002012-05-06T00:16:12.122+04:00FreeBSD: обновление системы из исходниковПересборка системы FreeBSD из исходников состоит из следующих этапов:<br />
<ul><li>загрузка файлов с исходными кодами</li>
<li>редактирование конфигурационных файлов</li>
<li>непосредственная компиляция и сборка системы из исходников</li>
<li>инсталляция собранных ядра и системного окружения</li>
<li>слияние новых настроечных файлов системы с существующими</li>
<li>перезагрузка для вступления в силу всех изменений</li>
</ul><br />
<br />
Рассмотрим эти этапы подробнее.<br />
<br />
<b>Конфигурационные файлы</b><br />
<br />
В системе должны быть три файла, влияющие на этапы загрузки (обновления), компиляции и сборки системы. Это файлы: <i>/etc/make.conf</i>, <i>/etc/src.conf</i> и <i>/etc/sys-supfile</i>. При этом файлы <i>src.conf</i> и <i>sys-supfile</i> необязательно присутствуют в системе, но их можно и нужно создать на основе примеров.<br />
<br />
Примерный файл <i>/etc/make.conf</i>:<br />
<code>#2012-04-22<br />
KERNCONF=ROXY<br />
WRKDIRPREFIX=/usr/obj<br />
# ln -s /store/distfiles /usr/ports/distfiles<br />
#-DISTDIR=/store/distfiles # zfs set mountpoint=/usr/ports/distfiles store/distfiles<br />
PACKAGES=/store/pckgs64 # ln -s /store/pckgs64 /usr/ports/packages<br />
# see /usr/share/examples/etc/make.conf<br />
MAKE_JOBS_NUMBER=5<br />
CC=clang<br />
CXX=clang++<br />
CPP=clang-cpp<br />
# Don't die on warnings<br />
NO_WERROR=<br />
WERROR=<br />
# Don't forget this when using Jails!<br />
NO_FSCHG=<br />
#-WITH_NEW_XORG=true<br />
LOADER_ZFS_SUPPORT=true<br />
LOCALIZED_LANG=ru<br />
WITH_LCD_FILTERING=true<br />
WITH_XFT=true<br />
WITHOUT_TTF_BYTECODE_ENABLED=false<br />
WITH_TTF_BYTECODE_ENABLED=true<br />
WITH_MSWINDOWS_LICENSE=true<br />
WITH_VPX=true<br />
WITH_A4SIZE=true<br />
WITHOUT_DEBUG=true<br />
WITHOUT_NOUVEAU=true<br />
WITHOUT_ALSA=true<br />
WITHOUT_MYSQL=true<br />
WITHOUT_NAUTILUS=true<br />
# Keep ruby 1.9 as default version.<br />
RUBY_DEFAULT_VER=1.9<br />
# added by use.perl 2012-02-16 21:44:23<br />
PERL_VERSION=5.12.4
</code><br />
Как не трудно заметить, опции файла <i>make.conf</i> влияют на компиляцию не только операционной системы, но и прикладного программного обеспечения, устанавливаемого из <i>коллекции портов</i>. Но вот опции компиляции ПО из коллекции портов не влияют на сборку системы.<br />
<br />
Примерный файл <i>/etc/src.conf</i> (дополнительно см. <i>man src.conf</i>):<br />
<code>
WITHOUT_AMD=true<br />
WITHOUT_ASSERT_DEBUG=true<br />
WITHOUT_ATM=true<br />
WITHOUT_BIND_DNSSEC=true<br />
WITHOUT_BIND_ETC=true<br />
WITHOUT_BIND_LIBS_LWRES=true<br />
WITHOUT_BIND_MTREE=true<br />
WITHOUT_BIND_NAMED=true<br />
WITHOUT_FLOPPY=true<br />
WITHOUT_FREEBSD_UPDATE=true<br />
WITHOUT_GAMES=true<br />
WITHOUT_GDB=true<br />
WITHOUT_HTML=true<br />
WITH_IDEA=true<br />
WITHOUT_IPFILTER=true<br />
WITHOUT_IPX=true<br />
WITHOUT_IPX_SUPPORT=true<br />
WITHOUT_LIB32=true<br />
WITHOUT_LPR=true<br />
WITHOUT_NDIS=true<br />
WITHOUT_PROFILE=true<br />
WITHOUT_RCS=true<br />
WITHOUT_SENDMAIL=true<br />
WITHOUT_SYSINSTALL=true<br />
WITHOUT_TELNET=true
</code><br />
Мне нужен не весь <i>BIND</i>, а только некоторые утилиты из него. MTA <i>Sendmail</i> и отладчик <i>GDB</i> на обычной рабочей станции не нужны. Также не нужны устаревшие сетевые протоколы <i>ATM</i> и <i>IPX</i>.<br />
<br />
Примерный файл <i>/etc/sys-supfile</i>:<br />
<code><br />
*default host=cvsup10.FreeBSD.org<br />
*default base=/var/db<br />
*default prefix=/usr<br />
*default release=cvs<br />
*default tag=RELENG_9<br />
*default delete use-rel-suffix<br />
*default compress<br />
src-all<br />
</code><br />
То есть при использовании этого файла будут загружены исходные коды FreeBSD 9-STABLE.<br />
<br />
<br />
<b>Процесс обновления</b><br />
(непосредственно процесс обновления по шагам расписан позднее, здесь даются лишь базовые понятия)<br />
<br />
Обновление исходников системы производится системной утилитой <i>csup</i> примерно так:<br />
<code><br />
% csup /etc/sys-supfile<br />
</code><br />
Необходимое и достаточное условие: активное прямое Интернет-соединение!<br />
(здесь и далее символ "%" говорит о том, что используется командная оболочка <i>/bin/tcsh</i> с правами рута; символ ">" говорит о том, что используется командная оболочка <i>/bin/tcsh</i> с правами пользователя.)<br />
<br />
Потом необходимо сделать копию файла настроек ядра <i>GENERIC</i>:<br />
<code><br />
% cd /sys/amd64/conf/ && cp GENERIC ROXY<br />
</code><br />
и отредактировать эту копию. Проследите, чтобы имя файла, в данном случае <i>/sys/amd64/conf/ROXY</i>, совпало с именем ядра переменной <i>KERNCONF</i> в файле <i>make.conf</i>.<br />
<br />
Файл <i>/sys/amd64/conf/ROXY</i> здесь не весь(!!!), а лишь несколько строчек, в которых я что-то меняю:<br />
<code># $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.568.2.11 2012/04/02 18:13:29 jkim Exp $<br />
...
<br />
cpu HAMMER<br />
ident ROXY<br />
...
<br />
#-makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols<br />
...<br /></code>
<b>Полная инструкция сборки всего системного окружения и ядра FreeBSD</b><br />
<ol><li>Удаляем бинарники от предыдущей компиляции:<br />
<code><br />
% cd /usr/obj/ && chflags -R noschg * && rm -rf *<br />
</code></li>
<li>Редактируем файл <i>/etc/sys-supfile</i> для обновления исходников до нужной версии системы:<br />
<code><br />
% ee /etc/sys-supfile<br />
</code></li>
<li>Синхронизируем дерево исходного кода с серверным:<br />
<code><br />
% cd /usr/src/ && chflags -R noschg * && csup /etc/sys-supfile<br />
</code></li>
<li>На этом шаге делаем копию конфига ядра:<br />
<code><br />
% cd /sys/amd64/conf/ && cp GENERIC ROXY<br />
</code></li>
<li>Редактируем конфиг будущего ядра:<br />
<code><br />
% ee /sys/amd64/conf/ROXY<br />
</code></li>
<li>На этом этапе редактируем <i>make.conf</i> и <i>src.conf</i>, если нужно:<br />
<code><br />
% ee /etc/make.conf<br />
</code>и<br />
<code><br />
% ee /etc/src.conf<br />
</code></li>
<li>Очищаем исходники:<br />
<code><br />
% cd /usr/src/ && chflags -R noschg * && make cleandir<br />
</code></li>
<li>Собираем Мир и Ядро:<br />
<code><br />
% cd /usr/src/ && make buildworld buildkernel<br />
</code></li>
<li>Инсталлируем Ядро и Мир в однопользовательском режиме, обновляем файлы конфигурации системы:<br />
<code><br />
% shutdown now<br />
# cd /usr/src/ && make installkernel installworld<br />
# mergemaster<br />
# shutdown -r now<br />
</code></li>
В одних случаях может быть достаточно нажимать клавишу [i] на вопросы утилиты <i>mergemaster</i> — инсталлировать новые файлы конфигурации. Но сначала нужно проверить, какой файл обрабатывается, прежде чем что-то сделать с ним: заменить старую версию файла новым [i], оставить старый [d], посмотреть изменения [v] или произвести слияние нового со старым [m], сделать ссылку [l] (бывает и такое). В завершение процесса на вопрос об удалении временного каталога можно нажать клавишу [y].</li>
<li>Перезагружаемся:<br />
<code><br />
# shutdown -r now<br />
</code></li>
<li>Загружаемся как обычно, но затем снова переходим в однопользовательском режим и удаляем мусор от предыдущей инсталляции:<br />
<code><br />
% shutdown now<br />
# cd /usr/src/ && make BATCH_DELETE_OLD_FILES=true delete-old delete-old-libs<br />
# shutdown -r now<br />
</code></li>
</ol><br />
<br />
Вот и всё.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com3tag:blogger.com,1999:blog-1640831195049620902.post-73334942345454672642011-09-11T06:15:00.003+04:002011-09-11T15:25:22.497+04:00Xfce 4.8.2: завершение работы и рестартХм, продолжаем сношаться с чёткой системой костылей и подпорок, придуманной нашими пернатыми друзьями под чутким руководстом коммерческих компаний и FSF во главе с товарищем Штольманом.<br />
<br />
Чтобы иметь возможность перезагружать компьютер или завершать работу не из командной строки, а из самой среды Xfce 4.8.2, необходимо сделать доступными кнопки диалога "Выйти" — "Перезагрузить" и "Выключить", соответственно.<br />
<br />
Решение проблемы описано здесь: <a href="http://forums.freebsd.org/showthread.php?t=21043&page=3">перейти к обсуждению проблемы</a>.<br />
<br />
<ul><li>Создаём файл:</li>
<code>% touch /usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.consolekit.pkla</code>
<li>Смотрим сообщение из файла <i>/usr/ports/x11-wm/xfce4-session/pkg-message</i> и редактируем созданный файл в соответствии пожеланиями линуксятников PUTTY-пользователям FreeBSD:</li>
<pre>[Restart]
Identity=unix-group:operator
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Shutdown]
Identity=unix-group:operator
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes
ResultInactive=yes
ResultActive=yes</pre></ul>(Пользователь, имеющий право перезагружать и выключать компьютер в Unix, как правило, входит в группу <i>operator</i>).<br />
<br />
После этого диалог выхода Xfce приобретает законченный вид:<br />
<a href="http://izen.dev.juga.ru/image/freebsd8.2-xfce4.8.2-exit.png"><img src="http://izen.dev.juga.ru/image/freebsd8.2-xfce4.8.2-exit.png" width="50%" high="50%"/></a>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-65224861914815772342011-06-07T14:02:00.004+04:002011-06-07T14:08:23.049+04:00Популярность копилефт-лицензий падаетСсылка на статью: <a href="http://www.opennet.ru/opennews/art.shtml?num=30796">Популярность копилефт-лицензий падает</a><br />
<br />
<i>Согласно <a href="http://blogs.the451group.com/opensource/2011/06/06/the-trend-towards-permissive-licensing/">сводке</a> результатов исследований, проведённых экспертами центра Open Source Resource Center компании <a href="http://www.blackducksoftware.com/">Black Duck</a> процентное количество открытых проектов, использующих лицензии семейства GPL, снизилось с 70% (июнь 2008 г.) до 61% (июнь 2011 г.), а использование конкретно лицензии GPLv2 снизилось с 58% до 45% за те же три года. При этом количество проектов, использующих GPL-лицензии, в реальном исчислении увеличилось за последние несколько лет. Например, число проектов под лицензией GPLv2 возросло на 5.5% между июнем 2009 и июнем 2011 года, в то время как общее число проектов с открытым кодом увеличилось более чем на 16%.<br />
<br />
Количество проектов, использующих лицензию Apache, выросло на 46% в течение последних двух лет, в то время как количество проектов, лицензируемых на условиях <a href="http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D0%B8_MIT">MIT-лицензий</a>, выросло на целых 152%. <a href="http://www.blackducksoftware.com/oss/licenses#top20">Графики</a> из исследования Black Duck ясно указывают на то, что лицензии MIT являются лидером в последние два года, их показатель вырос с 3.8% от всех проектов в июне 2009 года до 8.23% на сегодняшний момент времени, и обогнал по общему показателю прогресса использование лицензии Apache, BSD, GPLv3 и LGPLv2.1.<br />
<br />
Данные исследования Black Duck демонстрируют в последние годы не только снижение важности <a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BB%D0%B5%D1%84%D1%82">копилефт-лицензий</a>, требующих при создании производных работ или внесения изменений открытия кода на тех же условиях. Исследование, проведённое в рамках доклада <a href="http://blogs.the451group.com/opensource/2010/11/03/control-and-community/">Control and Community</a>, также указывает на то, что снижается количество производителей, связывающих себя с ПО, лицензируемым строго под копилефт-лицензиями. Были оценены OpenSource стратегии трёхсот компаний-вендоров и их филиалов. Рассматривались такие вопросы, как выбор лицензии, модель разработки, стратегия авторских прав и источник прибыли.</i><br />
<br />
Очень интересные графики, демонстрирующие тренды заинтересованности в той или иной политике лицензирования проектов за последние годы. Особенно мне понравился вот этот график:<br />
<br />
<img src="http://blogs.the451group.com/opensource/files/year_software_license-2.png"/><br />
— в мае-июне 2006 мне наконец-то удалось разобраться с многообразием дистрибутивов GNU/Linux, попробовать LiveCD BLiN 2.0 на основе GNOME, DVD9 ALT Linux Compact 3.0 со стабильной оболочкой KDE и ужасно глючным Xfce DE. В конце-концов, остановишись и установив в июне 2006 года Ubuntu 6.06, стал готов к окончательному переходу на BSD и проекты с исключительно открытым кодом и вскоре сделал это!<br />
<br />
Как-будто чувствовал тренды...iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-7670329863192802222011-06-06T23:23:00.001+04:002011-06-07T19:34:22.136+04:00ZFSv28 портирована в ветку FreeBSD 8-STABLE<a href="http://www.mail-archive.com/freebsd-stable@freebsd.org/msg116307.html">Файловая система ZFSv28 портирована в ветку FreeBSD 8-STABLE</a><br />
<br />
Дождались! :)<br />
<br />
Вкратце:<ul><li>добавлен уровень RAIDZ3 — RAID-5 с тройной чётностью<br />
<li>дедупликация блоков данных на уровне файловой системы (экономит место на носителях при наличии одинаковых данных в различных файлах)<br />
<li>сравнение снапшотов командой <i>zfs diff</i><br />
<li>получение независимых клонов пулов командой <i>zpool split</i> для переноса на другие машины<br />
<li>cчётчик ссылок на снапшот для защиты снапшотов от ошибочного удаления<br />
<li>восстановление FAULTED-пула путём отматывания последних транзакций записи (ранее практиковался <a href="http://www.lissyara.su/articles/freebsd/file_system/zfs_recovery/">ручной</a> метод восстановления)<br />
<li>другие улучшения<br />
</ul>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-26588333788587429112011-05-14T01:01:00.001+04:002011-07-13T19:54:34.023+04:00Автоматизация пересборки FreeBSD<h5>1. Обновление исходников</h5><br />
csup-файл:<code><br />
*default host=cvsup11.FreeBSD.org<br />
*default base=/var/db<br />
*default prefix=/usr<br />
*default release=cvs<br />
*default tag=RELENG_8<br />
*default delete use-rel-suffix<br />
*default compress<br />
src-all</code><br />
<br />
Скрипт обновления исходников:<code><br />
#!/bin/csh<br />
set SYSTEMPOOL=selena<br />
set TIMESTAMP=`date -u +%Y%m%d%H%M`<br />
#-zfs snapshot ${SYSTEMPOOL}/usr/src@${TIMESTAMP}<br />
cd /usr/src && chflags -R noschg *<br />
csup /etc/sys-supfile<br />
head -25 /usr/src/UPDATING<br />
cd /usr/src/sys/`uname -m`/conf/ && diff `uname -i` GENERIC<br />
</code><br />
<br />
<h5>2. Скрипт компиляции и сборки</h5><code><br />
#!/bin/csh<br />
set LOG=/var/log/update_system_build.log<br />
set DONE="System Build Failed."<br />
set TIMESTAMP=`date -u +%Y%m%d%H%M`<br />
cd /usr/src/ && chflags -R noschg * && make cleandir && make cleandir buildworld buildkernel && set DONE="System Build Success."<br />
echo "${TIMESTAMP}: ${DONE}" >> ${LOG}<br />
tail -n1 ${LOG}</code><br />
<br />
<h5>3. Ручная работа</h5><code><br />
shutdown now<br />
cd /usr/src/ && make installkernel installworld<br />
mergemaster<br />
shutdown -r now<br />
shutdown now<br />
cd /usr/src/ && make BATCH_DELETE_OLD_FILES=true delete-old delete-old-libs<br />
shutdown -r now<br />
</code><br />
<br />
*) mergemaster я обычно выполняю в диалоговом режиме, чтобы увидеть изменения в системных конфигурационных файлах. В повседневных пересборках, как правило, практически нет критичных изменений и можно смело нажимать [i] для принятия нового.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-26471130922438640002011-05-14T00:51:00.003+04:002011-07-13T20:03:59.625+04:00Update? Ports. Install!Идея быстрого развёртывания рабочей конфигурации FreeBSD весьма далека от пользователей. Предлагаемый сценарий «карты» ПО даёт сравнительно менее затратный способ получения мультимедийного и рабочего окружения на основе графических сред Fluxbox, Xfce4 или GNOME-lite, а также даёт возможность привести поломанное программное окружение к определённому базовому состоянию.<br />
<br />
Для управления ПО используется пакет утилит <i>portupgrade</i> (порт <a href="http://www.freshports.org/ports-mgmt/portupgrade/">ports-mgmt/portupgrade</a>), но можно использовать и <i>portmaster</i> (порт <a href="http://www.freshports.org/ports-mgmt/portmaster/">ports-mgmt/portmaster</a>).<br />
<h5>Сценарий карты ПО</h5><code><br />
#!/bin/csh<br />
alias installport 'portinstall -p'<br />
# Или из бинарных пакетов: alias installport 'env PKG_PATH=/store/pckgs64/All/ portinstall -yPP'<br />
# Или с помощью portmaster: alias installport 'portmaster -gD' # --delete-build-only'<br />
set LOG=/var/log/update_ports.log<br />
set TIMESTAMP_BEGIN=`date -u +%Y%m%d%H%M`<br />
echo "${TIMESTAMP_BEGIN}: begin installation ports" >> ${LOG}<br />
installport sysutils/ataidle<br />
installport sysutils/smartmontools<br />
installport archivers/unrar<br />
installport archivers/p7zip<br />
installport ports-mgmt/pkg_cutleaves<br />
installport ports-mgmt/pkg_tree<br />
installport audio/faad<br />
installport audio/faac<br />
installport audio/sox<br />
installport multimedia/libdvdcss<br />
installport net/liveMedia<br />
installport audio/libaacplus<br />
installport multimedia/libquicktime<br />
#-=Xorg=-<br />
installport x11-drivers/xorg-drivers<br />
installport x11-servers/xorg-server<br />
installport x11/xorg-minimal<br />
installport x11/setxkbmap<br />
installport x11/xhost<br />
installport x11/xset<br />
installport x11/xinput<br />
installport x11/xdpyinfo<br />
installport graphics/mesa-demos<br />
installport x11-fonts/dejavu<br />
installport x11-fonts/urwfonts<br />
installport x11-fonts/urwfonts-ttf<br />
installport x11-fonts/isabella<br />
installport x11-wm/fluxbox<br />
installport x11-themes/cursor-jimmac-theme<br />
installport x11-themes/gtk-murrina-fancy-clearlooks<br />
installport misc/gnome-icon-theme<br />
installport x11/xscreensaver<br />
installport audio/grip<br />
installport www/midori<br />
installport x11/slim<br />
installport math/galculator<br />
#-installport net-im/gajim<br />
installport ftp/gftp<br />
installport textproc/meld<br />
#-installport net-p2p/transmission-gtk2<br />
installport net-p2p/deluge<br />
installport audio/deadbeef<br />
#-=printing=-<br />
installport print/hplip<br />
#-=GNOME App=-<br />
installport archivers/file-roller<br />
installport editors/gedit-plugins<br />
installport graphics/eog-plugins<br />
installport graphics/evince<br />
installport multimedia/gnome-mplayer<br />
installport sysutils/gnome-system-monitor<br />
installport net/gnome-nettool<br />
#-=other=-<br />
installport mail/thunderbird<br />
installport mail/thunderbird-i18n<br />
set TIMESTAMP_END=`date -u +%Y%m%d%H%M`<br />
echo "${TIMESTAMP_END}: end installation ports" >> ${LOG}<br />
</code><br />
<br />
<h5>Инсталляция Xfce 4.6.2 (из отдельного дерева портов)</h5><code><br />
#!/bin/csh<br />
alias installport 'portinstall -p'<br />
#alias installport 'portmaster -gD' # --delete-build-only'<br />
#-=Xfce4=-<br />
#-installport deskutils/xfce4-notifyd # conflict with xfce4-notification-daemon<br />
installport deskutils/xfce4-notification-daemon # conflict with xfce4-notifyd<br />
#-installport audio/thunar-media-tags-plugin<br />
installport archivers/thunar-archive-plugin<br />
installport x11-wm/xfce4-session<br />
installport x11-wm/xfce4<br />
installport sysutils/xfce4-systemload-plugin<br />
installport x11/xfce4-screenshooter-plugin<br />
installport x11/xfce4-clipman-plugin<br />
installport sysutils/xfce4-netload-plugin<br />
installport misc/xfce4-weather-plugin<br />
installport sysutils/xfburn<br />
</code><br />
<br />
<h5>Восстановление конфигурации</h5><code>#!/bin/csh<br />
set CONFIG_DIR=/root/update/config<br />
set LOCALBASE=/usr/local<br />
set TIMESTAMP=`date -u +%Y%m%d%H%M`<br />
cd ${LOCALBASE}/etc/ && mv -v slim.conf slim.conf.${TIMESTAMP} && cp -v ${CONFIG_DIR}/slim.conf ${LOCALBASE}/etc/<br />
cd ${LOCALBASE}/etc/PolicyKit/ && mv -v PolicyKit.conf PolicyKit.conf.${TIMESTAMP} && cp -v ${CONFIG_DIR}/PolicyKit.conf ${LOCALBASE}/etc/PolicyKit/ && chmod 644 ${LOCALBASE}/etc/PolicyKit/PolicyKit.conf<br />
cd ${LOCALBASE}/etc/xdg/xfce4/ && mv -v mount.rc mount.rc.${TIMESTAMP} && cp -v ${CONFIG_DIR}/mount.rc ${LOCALBASE}/etc/xdg/xfce4/ && chmod 644 ${LOCALBASE}/etc/xdg/xfce4/mount.rc<br />
</code><br />
<br />
<h5>Важные замечания</h5><ul><li>Дерево портов должно быть своевременно обновлено.</li>
<li>Обращаю внимание на то, что по умолчанию настройки политик логина пользователей, монтирования сменных носителей от имени непривелегированных пользователей не определены. Поэтому нужно заранее подготовить файлы <i>slim.conf</i>, <i>PolicyKit.conf</i> и <i>mount.rc</i>, описанные в соответствующих <a href="http://izenfire.blogspot.com/2010/05/xfce4.html">статьях</a>, и разместить их в защищённом от записи непривелегированным пользователем каталоге, например, в <i>/root/update/config</i>.</li>
<li>Для пакетного режима работы сценария важно наличие сформированного каталога <i>/var/db/ports/</i> с заданными необходимыми опциями сборки портов. Иначе придётся настраивать установку одельных портов и их зависимостей в процессе исполнения сценария. ;)</li>
<li>Команды этого сценария подготавливают графическую среду для работы и развлечения, не уничтожая исходные файлы конфигурации.</li>
</ul><h5>Сценарий повседневного обновления ПО</h5><code><br />
#!/bin/csh<br />
#-alias upgradeports 'pkgdb -vfFu && portsdb -u && portupgrade -aF && portupgrade -ap'<br />
alias upgradeports 'portmaster -agD --delete-build-only'<br />
alias listupdates 'portmaster -L | grep "New"'<br />
set LOG=/var/log/update_ports.log<br />
set DONE="Ports Updating Failed."<br />
set SYSTEMPOOL=selena<br />
set TIMESTAMP=`date -u +%Y%m%d%H%M`<br />
zfs snapshot ${SYSTEMPOOL}/usr/local@${TIMESTAMP}<br />
zfs snapshot ${SYSTEMPOOL}/var/db/pkg@${TIMESTAMP}<br />
cd /usr/ports/ && chflags -R noschg * && portsnap fetch update<br />
listupdates<br />
head -17 /usr/ports/UPDATING<br />
upgradeports && set DONE="Ports Updating Success."<br />
echo "${TIMESTAMP}: ${DONE}" >> ${LOG}<br />
tail -n1 ${LOG}<br />
</code>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-85470950476020650702011-03-18T22:22:00.005+03:002011-03-18T22:29:25.271+03:00AMD 785G с Phenom II X4 810<h5>Было</h5><code><br />
% glxgears<br />
2014 frames in 5.0 seconds = 402.682 FPS<br />
2101 frames in 5.0 seconds = 420.139 FPS<br />
2102 frames in 5.0 seconds = 420.367 FPS<br />
2101 frames in 5.0 seconds = 420.153 FPS<br />
2107 frames in 5.0 seconds = 421.336 FPS<br />
2109 frames in 5.0 seconds = 421.762 FPS</code><br />
Процессор при этом нагружен на 35-45%, причём — все четыре ядра! Это называется софтверным ускорением. :))<br />
<br />
<h5>Включаем аппаратное 3D-ускорение на Radeon HD</h5><br />
1) Добавляем строчку игнорирования NOUVEAU, чтобы он не мешал графическому окружению:<code><br />
% echo 'WITHOUT_NOUVEAU=true' >> /etc/make.conf</code><br />
<br />
<br />
2) Пересобираем graphics/libdrm, graphics/libGL*, graphics/libglut: <code><br />
% portupgrade -fp graphics/libdrm && portupgrade -fp graphics/libGL && portupgrade -fp graphics/libGLU && portupgrade -fp graphics/libglut graphics/mesa-demos</code><br />
или, если есть время, так: <code><br />
% portupgrade -fpr graphics/libdrm</code><br />
<br />
<br />
3) Перезагружаемся и смотрим на результат:<code><br />
% glxinfo | grep render<br />
IRQ's not enabled, falling back to busy waits: 2 0<br />
direct rendering: Yes<br />
OpenGL renderer string: Mesa DRI R600 (RS880 9710) 20090101 TCL<br />
<br />
% glxinfo | grep glx<br />
IRQ's not enabled, falling back to busy waits: 2 0<br />
server glx vendor string: SGI<br />
server glx version string: 1.2<br />
server glx extensions:<br />
client glx vendor string: Mesa Project and SGI<br />
client glx version string: 1.4<br />
client glx extensions:<br />
<br />
% glxgears<br />
IRQ's not enabled, falling back to busy waits: 2 0<br />
9033 frames in 5.0 seconds = 1806.251 FPS<br />
8878 frames in 5.0 seconds = 1775.427 FPS<br />
8993 frames in 5.0 seconds = 1798.448 FPS<br />
8999 frames in 5.0 seconds = 1799.691 FPS<br />
9056 frames in 5.0 seconds = 1811.054 FPS<br />
9000 frames in 5.0 seconds = 1799.960 FPS<br />
9031 frames in 5.0 seconds = 1806.070 FPS<br />
8957 frames in 5.0 seconds = 1791.309 FPS<br />
^C<br />
<br />
% uname -rsm<br />
FreeBSD 8.2-STABLE amd64<br />
<br />
% pkg_info -Ex video-ati<br />
xf86-video-ati-6.14.0_1<br />
<br />
% pkg_info -Ex dri<br />
dri-7.6.1,2<br />
dri2proto-2.3<br />
xorg-drivers-7.5.1<br />
<br />
% pkg_info -Ex mesa<br />
mesa-demos-7.6.1<br />
<br />
% pkg_info -Ex libGL<br />
libGL-7.6.1<br />
libGLU-7.6.1<br />
</code><br />
<br />
<h5>xorg.conf</h5><code><br />
Section "ServerLayout"<br />
Identifier "X.org Configured"<br />
Screen 0 "Screen0" 0 0<br />
InputDevice "Mouse0" "CorePointer"<br />
InputDevice "Keyboard0" "CoreKeyboard"<br />
EndSection<br />
<br />
Section "Files"<br />
ModulePath "/usr/local/lib/xorg/modules"<br />
FontPath "/usr/local/lib/X11/fonts/misc/"<br />
FontPath "/usr/local/lib/X11/fonts/TTF/"<br />
FontPath "/usr/local/lib/X11/fonts/OTF"<br />
FontPath "/usr/local/lib/X11/fonts/Type1/"<br />
FontPath "/usr/local/lib/X11/fonts/100dpi/"<br />
FontPath "/usr/local/lib/X11/fonts/75dpi/"<br />
FontPath "/usr/local/lib/X11/fonts/dejavu/"<br />
EndSection<br />
<br />
Section "Module"<br />
#-Load "glx"<br />
Load "extmod"<br />
Load "record"<br />
Load "dbe"<br />
Load "dri"<br />
Load "dri2"<br />
Load "freetype"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Keyboard0"<br />
Driver "kbd"<br />
Option "XkbLayout" "us,ru"<br />
Option "XkbVariant" ",winkeys"<br />
Option "XkbOptions" "grp:caps_toggle,grp_led:caps,compose:ralt"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Mouse0"<br />
Driver "mouse"<br />
Option "Protocol" "auto"<br />
Option "Device" "/dev/sysmouse"<br />
Option "ZAxisMapping" "4 5 6 7"<br />
EndSection<br />
<br />
Section "ServerFlags"<br />
Option "AutoAddDevices" "false"<br />
Option "AllowEmptyInput" "off"<br />
Option "AllowMouseOpenFail" "true"<br />
Option "IgnoreABI" "on"<br />
Option "AIGLX" "true"<br />
EndSection<br />
<br />
Section "Monitor"<br />
#DisplaySize 540 350 # mm<br />
Identifier "Monitor0"<br />
VendorName "HWP"<br />
ModelName "HP LP2475w"<br />
HorizSync 30.0 - 94.0<br />
VertRefresh 48.0 - 85.0<br />
Option "DPMS"<br />
EndSection<br />
<br />
Section "Modes"<br />
Identifier "Mode0"<br />
EndSection <br />
<br />
Section "Device"<br />
Option "int10" "on"<br />
Option "BusType" "PCIE"<br />
Option "RenderAccel" "on"<br />
Option "AccelMethod" "exa"<br />
Option "DynamicPM" "on"<br />
Option "DRI" "on"<br />
Identifier "Card0"<br />
#Driver "vesa"<br />
Driver "ati"<br />
VendorName "ATI Technologies Inc"<br />
BoardName "RS880 [Radeon HD 4200]"<br />
#-BusID "PCI:1:5:0"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen0"<br />
Device "Card0"<br />
Monitor "Monitor0"<br />
SubSection "Display"<br />
Viewport 0 0<br />
Depth 24<br />
#Modes "1680x1050"<br />
Modes "1920x1200"<br />
EndSubSection<br />
EndSection<br />
<br />
Section "DRI"<br />
Mode 0666<br />
EndSection<br />
<br />
Section "Extensions"<br />
Option "Composite" "true"<br />
Option "DAMAGE" "true"<br />
Option "RENDER" "true"<br />
EndSection<br />
</code>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com1tag:blogger.com,1999:blog-1640831195049620902.post-44837654955599931342010-06-16T20:55:00.005+04:002010-06-16T21:14:00.365+04:00Недорогое хранилище данныхЕсть SATA-контроллёр, распаянный на материнке. В наличии имеется всего 4 доступных для винчестеров физических портов SATA.<br />
<br />
Система собирается в очень компактном корпусе для NAS/Backup. В наличии только одно место под одно 5,25"-устройство (представьте привод CD-ROM).<br />
<br />
Под это дело нужно 4 винчестера компактного (не больше 2,5") форм-фактора, несильно горячие, так как их придётся запихнуть хоть и в продуваемую корзину, но каждый в четверть от объёма под 5,25"-устройство.<br />
<br />
Итак, расклад такой (значения ёмкости округлены для прикидочных расчётов):<br />
HDD1 — 320ГБ (два логических тома: один на 20ГБ, другой на 300ГБ);<br />
HDD2 — 320ГБ (два логических тома: один на 20ГБ, другой на 300ГБ);<br />
HDD3 — 640ГБ (один логический том на 600ГБ);<br />
HDD4 — 640ГБ (один логический том на 600ГБ).<br />
<br />
Формируем из них массивы:<br />
RAID-1: HDD1.1+HDD2.1 — 20ГБ для операционной системы;<br />
RAID-0: HDD1.2+HDD2.2 — 600ГБ логический том для RAID-5;<br />
RAID-5: (HDD1.2+HDD2.2)+HDD3+HDD4 — 1200ГБ для данных.<br />
<br />
Пробуем!<br />
<br />
<h5>Цены</h5><ul><li>Western Digital Scorpio Blue WD3200BEVT 320ГБ ~ 1700 руб. (<a href="http://www.thg.ru/storage/notebook_hdd_2008_2/notebook_hdd_2008_2-02.html">обзор 1</a>, <a href="http://www.fcenter.ru/online.shtml?articles/hardware/hdd/24174">обзор 2</a>)</li>
<li>Samsung Spinpoint M7E HM641JI 640ГБ ~ 2700 руб. (<a href="http://www.thg.ru/storage/notebook_hdd_640_750_gb/notebook_hdd_640_750_gb-01.html">обзор 1</a>, <a href="http://www.fcenter.ru/online.shtml?articles/hardware/hdd/28891#04">обзор 2</a>)</li>
</ul>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-83389945877199653542010-06-02T15:56:00.003+04:002010-06-02T16:07:34.555+04:00Меню рабочего стола Xfce 4.6 как в Xfce 4.4Как получить такое меню:<br /><img src="http://izen.dev.juga.ru/image/Menu_Xfce4.6_as_4.4.png" alt="Xfce4 Menu"><br /><h5>Делаем</h5><ul><br /><li>Настройки -> Рабочий стол -> вкладка Значки -> Тип значков: Ничего.<br />Настройки -> Рабочий стол -> вкладка Меню: флажок Показать меню приложений по щелчку правой кнопкой мыши</li><br /><li>Включить, а затем отключить отображение значков на Рабочем столе</li><br /></ul><br />P.S.<br />Вот такое вот шаманство. Но всё именно так :)iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com6tag:blogger.com,1999:blog-1640831195049620902.post-88905326096846673292010-05-31T03:30:00.005+04:002010-06-14T16:05:55.698+04:00GNOME: ненужные иконки на Рабочем столеКонцепция иконок на Рабочем столе стала популярна ещё в Windows. Но если посмотреть на этот вид представления, то окажется, что иконки "работают" до первого открытия окна, а потом для запуска следующей программы или поиска какого-то документа на Рабочем столе потребуется свернуть все открытые окна. Процесс бессмысленный по своей сути.<br /><br />Способ убрать иконки следующий:<br /><br />1. Запускаем gconf-editor (Приложения->Системные->Редактор конфигурации).<br /><br />2. Снимаем галку со свойства /apps/nautilus/preferences/show_desktop<br /><br />Готово!<br /><h6>Полезные ссылки</h6><ul><li><a href="http://www.freebsd.org/gnome/docs/faq2.html">FreeBSD GNOME Project: GNOME 2.30 FAQ</a></li><br /></ul>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-49647753432365479422010-05-26T22:40:00.003+04:002010-05-27T00:38:24.934+04:00Индустрия моды как успешный образец культуры Open Source<i>Некоммерческая организация TED выложила на своём сайте <a href="http://news.slashdot.org/story/10/05/25/2222207/The-Fashion-Industry-As-a-Model-For-IP-Reformhttp://www.ted.com/talks/johanna_blakley_lessons_from_fashion_s_free_culture.html">видеозапись</a> выступления <a href="http://news.slashdot.org/story/10/05/25/2222207/The-Fashion-Industry-As-a-Model-For-IP-Reformhttp://www.ted.com/speakers/johanna_blakley.html">Джоанны Блекли</a> с недавно прошедшей конференции TEDxUSC 2010 в университете Южной Калифорнии. Это очень любопытная лекция (15 минут), основная идея которой состоит в том, что индустрия моды со своей слабым использованием копирайта может стать примером для медийной индустрии и для софтверного рынка. Она показывает, как рынок дизайна одежды и генерирует сотни миллиардов долларов практически при полном отсутствии интеллектуальной собственности (у них есть только трейдмарки, то есть можно полностью копировать чужой дизайн, но нельзя копировать логотип).</i><br />Обсуждение: http://habrahabr.ru/blogs/copyright/94630/<br /><br /><h4>Интересно, а что если…</h4><br />Например, Вячеслав Зайцев придумал модный/удобный фасон одежды. Через несколько месяцев китайцы заваливают российский рынок ширпотреба одеждой аналогичного фасона. Зайцев якобы лишается недополученной прибыли.<br /><br />Что если бы Зайцев закрыл свой интеллектальный продукт патентами и не дал китайцам выбрасывать на рынок похожий товар, то что бы изменилось для потребителей?<br /><br />Ответ: цены на такую одежду взлетели бы до небес.<br /><br />А что если бы Зайцев специально отдал свою интеллектуальную собственность в руки международного союза кутюрье и запретил бы "закрывать" свои фасоны от широкого распространения, то есть обозначил статус своего творчества как только открытого и доступного для всевозможных вариаций другими кутюрье, не брал бы за это ни копья денег (авторских отчислений). То кто бы выиграл от такого «открытия»?<br /><br />Ответ: выиграли бы Зайцев с китайцами за счёт союза кутюрье; цены были бы ниже плинтуса за счёт массовости. Творческий союз кутюрье оказался бы в проигрыше из-за демпинга, несопоставимого объёма и дикой разницы цен между «зайцевским» ширпотребом и эксклюзивного товара от других кутюрье — налицо вытеснение кутюрье из массового сегмента рынка и сильной сегментации. Расслоение общества потребления неизбежно.<br /><br />Третий вариант: Зайцев генерирует только идеи и не патентует их, строит свой бизнес на реализации их наравне с конкурирующими партнёрами в лице других профессиональных кутюрье и китайцев. Что бы было?<br /><br />Ответ: хорошо сбалансированная на основе чисто рыночных механизмов модель производство-потребления, учитывающая запросы всех без исключения производителей продукции и потребителей, которые покупают то, что им нравится и за адекватную цену.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-15662984414621564152010-05-02T11:47:00.016+04:002011-05-14T15:44:14.724+04:00Автомаунт подсоединяемых носителей в Xfce4Вопросы по автомаунту флэшек и CD/DVD с русскими именами под Xfce4/Thunar+HAL решены.<br />
<ol><li>Убираем все точки монтирования сменных носителей из <i>/etc/fstab</i>.<br />
<li>Редактируем файл <i>/usr/local/etc/xdg/xfce4/mount.rc</i>:<code><br />
[vfat]<br />
uid=<auto><br />
shortname=winnt<br />
# FreeBSD specific option<br />
longnames=true<br />
-L=ru_RU.UTF-8<br />
-D=CP866<br />
-m=0664<br />
-M=0775<br />
<br />
[iso9660]<br />
uid=<auto><br />
longnames=true<br />
-C=UTF-8<br />
-m=0664<br />
-M=0775<br />
</code><br />
<li>Пишем <i>/usr/local/etc/PolicyKit/PolicyKit.conf</i>:<style type="text/css">
<!--
body {color: #000000; background-color: #ffffff; font-family: DejaVu Sans Mono}
pre {color: #000000; background-color: #ffffff; font-family: DejaVu Sans Mono}
table {color: #000000; background-color: #e9e8e2; font-family: DejaVu Sans Mono}
.xml-comment {color: #969696}
.xml-tag {color: #0000e6}
.xml-attribute {color: #009900}
.xml-value {color: #ce7b00}
.ST0 {color: #00007c; font-family: DejaVu Sans Mono; font-weight: bold}
-->
</style><br />
<pre><span class="ST0"><?</span><span class="ST0">xml</span> version="1.0" encoding="UTF-8"?> <span class="xml-comment"><!-- -*- XML -*- --></span>
<span class="ST0"><!DOCTYPE pkconfig PUBLIC </span><span class="xml-value">"-//freedesktop//DTD PolicyKit Configuration 1.0//EN"</span>
<span class="xml-value">"http://hal.freedesktop.org/releases/PolicyKit/</span><span class="xml-value">1.0/config.dtd"</span><span class="ST0">></span>
<span class="xml-comment"><!-- See the manual page PolicyKit.conf(5) for file format --></span>
<span class="xml-tag"><config</span> <span class="xml-attribute">version</span>=<span class="xml-value">"0.1"</span><span class="xml-tag">></span>
<span class="xml-tag"><define_admin_auth</span> <span class="xml-attribute">group</span>=<span class="xml-value">"operator"</span> <span class="xml-tag">/></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.storage.mount-removable"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></match</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.storage.mount-fixed"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></match</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.storage.eject"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></match</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.stor</span><span class="xml-value">age.unmount-others"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></match</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.power-management.reboot"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></m</span><span class="xml-tag">atch</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.power-management.shutdown"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></match</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesk</span><span class="xml-value">top.hal.power-management.hibernate"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></match</span><span class="xml-tag">></span>
<span class="xml-tag"><match</span> <span class="xml-attribute">action</span>=<span class="xml-value">"org.freedesktop.hal.power-management.suspend"</span><span class="xml-tag">></span>
<span class="xml-tag"><return</span> <span class="xml-attribute">result</span>=<span class="xml-value">"yes"</span> <span class="xml-tag">/></span>
<span class="xml-tag"></</span><span class="xml-tag">match</span><span class="xml-tag">></span>
<span class="xml-tag"></config</span><span class="xml-tag">></span>
</pre></li><br />
<br />
<br />
<br />
<li>Добавляем пользователя в группу <i>operator</i> (редактируем файл <i>/etc/group</i>): <code>operator:*:5:root,username</code></li><br />
<br />
<br />
<br />
<li>Перезагружаемся, чтобы удостоверится, что всё заработает.</li><br />
<br />
<br />
</ol>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-63472580392400490592010-03-03T23:30:00.002+03:002010-03-04T01:25:17.655+03:00PF для рабочей станции в локальной сетиТипичный конфиг (файл <span style="font-style:italic;">/etc/pf.conf</span>) для пакетного фильтра рабочей станции:<pre><br />#PF:2010-03-03<br />#-------------------<br />#1/Macros<br /># Сетевой интерфейс<br />ext_if="net0"<br /># Разрешенные типы icmp сообщений<br />allowed_icmp_types="{ echoreq, unreach }"<br /># Разрешённые сервисы<br /># 1. разрешить запросы к серверу NFS и RPCBIND только из локальной сети<br /># 2. обеспечить запуск с флагами mountd -p 883, rpc.lockd -p 884, rpc.statd -p 885 в rc.conf<br /># 3. выделенные порты для torrent и http/https/ssh-серверов доступны всем<br />allowed_lan_tcp_services="{ ssh, www, http, https, ntp, nfsd, rpcbind, 883, 884, 885, 6881:6991, 8080 }"<br />allowed_lan_udp_services="{ ntp, nfsd, rpcbind, 883, 884, 885, 6881:6991 }"<br />allowed_wan_tcp_services="{ ssh, www, 6881:6991, 8080, 8081 }"<br />allowed_wan_udp_services="{ ntp, 5501, 6881:6991 }"<br />#-------------------<br />#2/Tables<br />#-------------------<br />#3/Options<br /># ведение лога<br />#--set loginterface $ext_if<br /># тем, кто лезет туда, куда не нужно, - бить по рукам<br />set block-policy drop<br /># на интерфейсах петли пакеты не фильтровать<br />set skip on { lo }<br /># укороченный таймаут для состояния установленного tcp соединения<br />set timeout { frag 10, tcp.established 24000, icmp.first 10, icmp.error 5 }<br />#-------------------<br />#4/Scrub<br /># Нормализовать все входящие пакеты<br />scrub in all<br />#-scrub on $ext_if random-id max-mss 1452 reassemble tcp fragment reassemble<br />#-------------------<br />#5/Queueing<br />#-------------------<br />#6/Translations<br /># Перенаправить tcp трафик с порта 80 на порт 8080 для пользовательского Web-сервера<br />rdr proto tcp from any to any port http -> self port 8080<br />#-------------------<br />#7/Filter Rules<br /># Антиспуффинг<br />#-antispoof for $ext_if<br /># Блокировать всё, что не разрешено<br />block all<br />#-------------------<br /># Разрешить входящий ICMP (ping)<br />pass inet proto icmp all icmp-type $allowed_icmp_types<br /># Разрешить трафик IGMP для IP-TV<br />pass quick on $ext_if inet proto igmp from any to any allow-opts<br /># Разрешающий доступ откуда угодно (ограниченные службы)<br />pass in quick on $ext_if proto tcp to port $allowed_wan_tcp_services<br />pass in quick on $ext_if proto udp to port $allowed_wan_udp_services<br /># Разрешающий доступ из локальной сети (ограниченные службы)<br />pass in quick on $ext_if proto tcp from $ext_if:network to port $allowed_lan_tcp_services<br />pass in quick on $ext_if proto udp from $ext_if:network to port $allowed_lan_udp_services<br /># Разрешить исходящий трафик<br />pass out all<br /></pre><br /><br /><h4>Проверка синтаксиса</h4><pre><br />% pfctl -nf /etc/pf.conf</pre><br /><br /><h4>Запуск в работу</h4><pre><br />% echo 'pf_enable="YES"' >> /etc/rc.conf<br />% echo 'pf_rules="/etc/pf.conf"' >> /etc/rc.conf<br />% pfctl -ef /etc/pf.conf</pre><br /><br /><h4>Проверка действующих правил и прочей статистики</h4><pre><br />% pfctl -sa</pre><br /><br /><h4>Выключение</h4><pre><br />% pfctl -d</pre><br /><br /><h4>Примечание касательно трансляции IP-TV</h4>При запуске VLC, например, с URL-адресом такого вида <i>udp://@239.1.1.28:5501</i> воспроизведение начнётся не сразу, а спустя примерно 45 секунд с момента нажатия на кнопку PLAY. Однако переключение на другие каналы будет происходить практически мгновенно.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-58020155414170922962010-01-08T10:31:00.002+03:002010-01-08T10:56:14.702+03:00GNU/Linux не для программистовВ контексте использования Linux НИГДЕ не говорится о зарабатывании денег программированием. Программисты GNU/Linux не могут зарабатывать тем, что они умеют лучше всего!!<br /><br />И после этого кто-то будет утверждать, что программисты могут заработать денег своими мозгами? Да, только не в GNU/Linux!<br /><br />GNU/Linux (~10-15% рынка с коммерческим сопровождением) вытеснило другое коммерческое Open Source (примерно 1% рынка с коммерческим сопровождением) на задворки цивилизации и представляет собой настоящий непрошибаемый барьер для других открытых операционных систем и решений. Узурпация майнстрима движения явно неспроста.<br /><br />Кому это выгодно?<br /><br />Для Microsoft и Apple решения на базе GNU/Linux — всего лишь писк комара над ухом, не более. Им оно не конкурент В_ПРИНЦИПЕ.<br />Для Red-Hat, IBM, Oracle решения на базе GNU/Linux — всего лишь платформа для продвижения своих услуг и решений, этакий "паровозик с углём" ("рельсы" стоят денег).<br /><br />Так какого хрена программистам нужен GNU/Linux, если от написани кода для него получается только FUN? Деньги IBM никогда не подкинет даже в качестве пожертвования, не надейтесь. За какие такие заслуги программисты должны прислушиваться к речам фанатиков от Open Source, если оно GNU/Linux не приносит дохода от непосредственной деятельности программистам? Программисты GNU/Linux не могут зарабатывать тем, что они умеют лучше всего!!<br /><br />Программисты не идут на GNU/Linux. Они зарабатывают, работая под Windows.<br /><br />(Кстати, по статистике почти все коммерческие приложения на платформо-независимых языках, таких, как Java, JavaME, да те же ECMAScript и C# с PHP, разрабатываются на Windows, но никак не на Linux. На Linux они тестируются, если находится время и применение.)<br /><br />Не вкладывайте силы и мозги в GNU. Это не окупается, так как денег не приносит. На поприще GNU может заработать только техподдержка (Вы хотите работать в техподдержке? Сочувствую. Это как эникеем подрабатывать.).<br /><br />Когда программисты начнут зарабатывать, создавая открытый код, презирая уставки GNU, вот тогда Open Source возродится!iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com3tag:blogger.com,1999:blog-1640831195049620902.post-38454142040519591492010-01-04T08:40:00.002+03:002010-01-04T08:45:32.745+03:00J2ME на FreeBSD 8.0 [amd64]Вчера разбирался с J2ME на FreeBSD 8.0 [amd64] чисто из спортивного интереса.<br /><br />В портах есть Sun WTK 2.2. Он ставится, но не работает под 64-битной Sun JDK 1.6: при запуске эмулятора телефона в KToolbar выводится ошибка работы графической библиотеки.<br /><br />Проблему решил следующим образом.<br />Временно снёс нативный JDK1.6. Запустил линуксулатор (эмулятор Linux 2.6.16 + linux_base-f10); поставил 32-битный java/linux-sun-jdk16; установил java/sun-wtk с небольшой шлифовкой его конфигов (переименовал каталог wtklib/FreeBSD в wtklib/Linux); заново установил нативный JDK (64-битный). Оба JDK сосуществуют без проблем — при необходимости нужная JVM выбирается через панель управления настройками javaws. WTK 2.2 работает с собственными настройками: пути к линуксовой JVM автоматически прописаны в скрипты запуска его утилит при инсталляции.<br /><br />Sun JavaME SDK 2.5.2 похожим образом запустить не удалось — KToolbar при запуске эмулятора пишет об ошибке в распределении памяти shm.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-21664378290145645232009-10-03T19:30:00.000+04:002009-10-03T19:33:06.098+04:00makeinfo: not foundПри очередном обновлении портов заметил странную вещь:<br /><code>% portupgrade -ap<br />---> Upgrading 'libtool-2.2.6a' to 'libtool-2.2.6a_1' (devel/libtool22)<br />---> Building '/usr/ports/devel/libtool22'<br />===> Cleaning for libtool-2.2.6a_1<br />===> Extracting for libtool-2.2.6a_1<br />=> MD5 Checksum OK for libtool-2.2.6a.tar.gz.<br />=> SHA256 Checksum OK for libtool-2.2.6a.tar.gz.<br />===> Patching for libtool-2.2.6a_1<br />===> Applying FreeBSD patches for libtool-2.2.6a_1<br />/usr/bin/sed -i.bak -e 's|sed gsed|sed|g' /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6/configure<br />===> Configuring for libtool-2.2.6a_1<br />## ------------------------- ##<br />## Configuring libtool 2.2.6 ##<br />## ------------------------- ##<br /><br />checking for a BSD-compatible install... /usr/bin/install -c -o root -g wheel<br />checking whether build environment is sane... yes<br />checking for a thread-safe mkdir -p... libltdl/config/install-sh -c -d<br />checking for gawk... gawk<br />checking whether make sets $(MAKE)... yes<br />checking whether subdir libobjs are useable... yes<br />.....<br />make all-recursive<br />test -f doc/.dirstamp || make doc/.dirstamp<br />restore=: && backupdir=".am$$" && am__cwd=`pwd` && cd . && rm -rf $backupdir && mkdir $backupdir && if (makeinfo --no-split --version) >/dev/null 2>&1; then for f in ./doc/libtool.info ./doc/libtool.info-[0-9] ./doc/libtool.info-[0-9][0-9] ./doc/libtool.i[0-9] ./doc/libtool.i[0-9][0-9]; do if test -f $f; then mv $f $backupdir; restore=mv; else :; fi; done; else :; fi && cd "$am__cwd"; if makeinfo --no-split -I doc -I ./doc -o ./doc/libtool.info ./doc/libtool.texi; then rc=0; cd .; else rc=$?; cd . && $restore $backupdir/* `echo "././doc/libtool.info" | sed 's|[^/]*$||'`; fi; rm -rf $backupdir; exit $rc<br />makeinfo: not found<br />*** Error code 127<br /><br />Stop in /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6.<br />*** Error code 1<br /><br />Stop in /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6.<br />*** Error code 1<br /><br />Stop in /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6.<br />*** Error code 1<br /><br />Stop in /usr/ports/devel/libtool22.<br />** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20091003-1547-1j96bj1-0 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=libtool-2.2.6a UPGRADE_PORT_VER=2.2.6a make DEPENDS_TARGET=package<br />** Fix the problem and try again.<br />** Listing the failed packages (-:ignored / *:skipped / !:failed)<br /> ! devel/libtool22 (libtool-2.2.6a) (unknown build error)</code><br /><br />Оказывается, новый мир был собран с опцией <i>WITHOUT_INFO=true</i> в файле <i>/etc/make.conf</i>, а при очередной чистке устаревших библиотек система лишилась доступа к info-файлам установленных приложений.<br /><br />Решение этой проблемы найдено <a href="http://www.cyberciti.biz/faq/freebsd-jail-makeinfo-not-found/">очень быстро</a>:<br />1) Убираем вредную строчку из <i>/etc/make.conf</i> (и из <i>/etc/src.conf</i>, если она там была);<br />2) Собираем и устанавливаем недостающие библиотеки мира<br /><code>% cd /usr/src/gnu/usr.bin/texinfo/<br />% make && make depend && make install<br />===> libtxi (all)<br />===> makeinfo (all)<br />===> info (all)<br />===> infokey (all)<br />===> install-info (all)<br />===> texindex (all)<br />===> doc (all)<br />===> libtxi (depend)<br />===> makeinfo (depend)<br />===> info (depend)<br />===> infokey (depend)<br />===> install-info (depend)<br />===> texindex (depend)<br />===> doc (depend)<br />===> libtxi (install)<br />===> makeinfo (install)<br />===> info (install)<br />===> infokey (install)<br />===> install-info (install)<br />===> texindex (install)<br />===> doc (install)<br />% rehash</code><br /><br />После этого апгред порта проходит нормально.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-76935253224255439622009-09-05T19:08:00.008+04:002013-10-28T00:06:09.359+04:00FreeBSD: Automount<a href="http://www.freebsd.org/cgi/query-pr.cgi?pr=109024">Известная проблема</a> непривелегированного использования съёмных носителей с неродными файловыми системами с использованиеванием таблиц перекодирования символов (<i>mount_msdosfs: msdosfs_iconv: Operation not permitted</i>) под FreeBSD может быть решена, собственно, самой системой.<br />
<habracut/><br />
<h4>Как это есть</h4><br />
Обычный сценарий использования съёмного носителя под операционными системами класса Unix заключается в следующем:<br />
<ol><li>Подсоединить устройство с носителем к внешнему интерфейсу (USB, SAS, FireWire).</li>
<li>Создать каталог-точку монтирования (если каталог не создан заранее).</li>
<li>Смонтировать сменный носитель в каталог-точку монтирования с опциями по перекодированию символов неродной файловой системы в родную файловую систему и обратно.</li>
<li>Поработать с файловой системой носителя.</li>
<li>Демонтировать сменный носитель.</li>
<li>Отсоединить устройство.</li>
</ol><br />
Все эти действия пользователь выполняет без какой-либо автоматизации, вручную!<br />
<br />
В отличие от вездесущего Linux-демона <a href="http://ru.wikipedia.org/wiki/HAL_%28freedesktop.org%29">HAL</a>, работающего в связке с <a href="http://ru.wikipedia.org/wiki/PolicyKit">PolicyKit</a> и демоном информационной шины <a href="http://ru.wikipedia.org/wiki/D-Bus">D-Bus</a>, встроенные системные средства FreeBSD позволяют обойтись без нагромождений стороннего софта. Естественно, модуль конвертации кодировок <i>msdosfs_iconv</i> из одной системы в другую и обратно всё же должен быть прописан в автозагрузке в файле <i>/boot/loader.conf</i> (<i>msdosfs_iconv_enable="YES"</i>), либо вкомпилирован в ядро системы (<i>options MSDOSFS_ICONV</i>).<br />
<br />
"Всё должно быть просто, но не так чтобы сильно." © кто-то из великих<br />
<br />
<h4>Преамбула</h4><br />
Только хозяин (<i>owner</i>, создатель) каталога может производить в него монтирование устройств, работать с файловой системой смонтированого устройства как ему вздумается. Демон <i>devd(8)</i> (device state change daemon) работает с системной (<i>root</i>) учётной записью и у него нет понятия "текущий пользователь" (строго говоря, FreeBSD — это многопользовательская ОС, в которой одновременно работают различные процессы под разными учётными записями). В общем, демон <i>devd(8)</i> имеет понятие только об устройствах (классах устройств) виртуальной файловой системы <i>devfs(8)</i>, файловой системе вообще и событиях, случающихся в системе, но не имеет понятия, какой пользователь подсоединил или отсоединил девайс.<br />
<br />
<h4>Фокус-покус</h4><br />
<b>Хорошая новость: FreeBSD больше не падает при отсоединении неотмонтированной флэшки</b>. А именно это будет происходить всякий раз, при использовании следующего описания. Хотя и не страшно.<br />
<br />
Пишем в <a href="http://www.freebsd.org/cgi/man.cgi?query=devd.conf&apropos=0&sektion=0&manpath=FreeBSD+8-current&format=html"><i>/etc/devd.conf</i></a> следующие строчки:<br />
<code><br />
# Automount<br />
attach 10 {<br />
match "device-name" "umass[0-9]+";<br />
action "sleep 4 && mkdir -p /media/$device-name && chown -R username /media/$device-name && \<br />
(/sbin/mount_msdosfs -o sync -L ru_RU.UTF-8 -D CP1251 /dev/da0s1 /media/$device-name || \<br />
/sbin/mount_msdosfs -o sync -L ru_RU.UTF-8 -D CP1251 /dev/da0 /media/$device-name)";<br />
};<br />
detach 10 {<br />
match "device-name" "umass[0-9]+";<br />
action "/sbin/umount -f /media/$device-name && rm -r /media/$device-name";<br />
};<br />
</code><br />
Запускаем демон состояния виртуальной файловой системы устройств: <br />
<pre>% echo 'devd_enable="YES"' >> /etc/rc.conf
% /etc/rc.d/devd start
</pre><br />
Или рестартуем его, если он работает (чтобы он перечитал свой конфиг):<br />
<pre>% /etc/rc.d/devd restart
Stopping devd.
Starting devd.
</pre><br />
На события <i>attach/detach</i> демон <i>devd(8)</i> реагирует следующим образом: определяет, какой тип устройства подключается/отключается (здесь: <i>umassНомерустройства</i>) и совершает соответствующее действие (<i>action</i>). Из описанных действий нетрудно понять, каким образом ведётся работа с флэшкой.<br />
<br />
При подсоединении съёмного носителя (флэшки) будет создан каталог <i>/media/umass0</i>, носитель будет подвергнут проверке fsck и, если никаких ошибок не найдено, созданный каталог изменит владельца на <i>username</i>, и в этот каталог смонтируется устройство <i>/dev/da0s1</i> (первый слайс накопителя с файловой системой FAT). После этого пользователь, имеющий учётную запись <i>username</i>, сможет работать с устройством как с собственным файловым хранилищем.<br />
<br />
Так как устройство работает в синхронном режиме, то есть данные на носитель пишутся и читаются последовательно, без отложенных операций, то ручное отмонтирование не требуется — по завершении всех операций достаточно просто отсоединить устройство — это событие заставит демон <i>devd(8)</i> выполнить действия по очистке точки монтирования, как в виртуальной файловой системе <i>devfs</i> (демонтирует каталог <i>/dev/da0s1</i>), так и в реальной файловой системе (удалит временный каталог <i>/media/umass0</i>).<br />
<br />
<h4>Три ложечки дёгтя</h4><br />
<ol><li>Необходимость в использовании имени учётной записи пользователя (<i>username</i>), к которому привязывается точка монтирования;</li>
<li>Фиксированное название раздела носителя (<i>da0s1</i>) не позволит смонтировать в автоматическом режиме другие носители;</li>
<li>Фиксированный тип файловой системы (<i>msdosfs</i>) на монтируемом носителе не позволяет правилом <i>attach</i> смонтировать носитель, с тем же названием раздела, но с отличной от FAT ФС.</li>
</ol><br />
<br />
<h4>P.S.</h4><br />
Я имею представление о портах, позволяющих обходить проблему автомонтирования флэшек с разных сторон: <a href="http://cvsweb.freebsd.org/ports/sysutils/kiconvtool">sysutils/kiconvtoo</a>l и <a href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/sysutils/automounter/">sysutils/automounter</a>. Но лично у меня первый порт не заработал (ошибка осталась), а второй несколько избыточен по функциональности (надстройка над <i>amd(8)</i>).iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com4tag:blogger.com,1999:blog-1640831195049620902.post-42841242867609877582009-08-13T17:00:00.001+04:002009-08-13T18:14:12.848+04:00Diablo JDK 1.6: ошибка в VM<h4>Информация о системе</h4><pre><br />> uname -rsm<br />FreeBSD 8.0-BETA2 amd64</pre> Дерево портов обновлено.<br /><h4>Инсталляция и неудачный запуск</h4><pre><br />% portinstall -p java/diablo-jdk16<br />...<br />===> Registering installation for diablo-jdk-1.6.0.07.02_5<br />...<br />===> Building package for diablo-jdk-1.6.0.07.02_5<br />...<br />===> Cleaning for diablo-jdk-1.6.0.07.02_5<br />---> Cleaning out obsolete shared libraries<br />[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 444 packages found (-0 +1) . done]<br />% rehash<br />% java -version<br />Error occurred during initialization of VM<br />Unable to load ZIP library: /usr/local/diablo-jdk1.6.0/jre/lib/amd64/libzip.so<br />% </pre><br /><h5>Решение проблемы</h5><pre><br />% echo "libz.so.4 libz.so.5 #for diablo-jdk1.6" >> /etc/libmap.conf<br />% rehash<br />% java -version<br />Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02)<br />Diablo Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)<br />% </pre>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com2tag:blogger.com,1999:blog-1640831195049620902.post-2576520933377418642009-08-12T18:15:00.007+04:002009-08-12T21:50:11.363+04:00Метки GPT для ZFSНужно создать ZFS пул с зеркалом из носителей, смонтированных по меткам GPT, чтобы не зависеть от имён устройств и номеров портов контроллёров.<br /><br /><h4>Исходное состояние</h4><br />Зеркало как таковое отсутствует: <pre><br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br /> scrub: none requested<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> ad6p3 ONLINE 0 0 0<br /><br />errors: No known data errors</pre><br />Включим в пул ещё один носитель (GPT-раздел устройства <i>ad10</i>) — разметка разделов второго винчестера аналогична первому, так что здесь последовательность команд не приводится.<br /><h4>Создание зеркала в пуле</h4><pre><br />% zpool attach amd64rio /dev/ad6p3 /dev/ad10p3<br />% zpool scrub amd64rio<br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br /> scrub: scrub in progress for 0h0m, 0,00% done, 131h10m to go<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> mirror ONLINE 0 0 0<br /> ad6p3 ONLINE 0 0 0<br /> ad10p3 ONLINE 0 0 0<br /><br />errors: No known data errors</pre><br /><h4>Состояние разметки устройств</h4><br />Подготовительные операции для перехода на новую схему: <pre><br />% echo 'geom_label_load="YES"' >> /boot/loader.conf<br />% shutdown -r now<br />% glabel list<br />Geom name: ad6p1<br />Providers:<br />1. Name: gpt/rio_boot<br /> Mediasize: 131072 (128K)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 256<br /> length: 131072<br /> index: 0<br />Consumers:<br />1. Name: ad6p1<br /> Mediasize: 131072 (128K)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad6p1<br />Providers:<br />1. Name: gptid/6e56389f-81a6-11de-8aa6-02508d92a2eb<br /> Mediasize: 131072 (128K)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 256<br /> length: 131072<br /> index: 0<br />Consumers:<br />1. Name: ad6p1<br /> Mediasize: 131072 (128K)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad6p2<br />Providers:<br />1. Name: gpt/rio_swap<br /> Mediasize: 2147483648 (2.0G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 4194304<br /> length: 2147483648<br /> index: 0<br />Consumers:<br />1. Name: ad6p2<br /> Mediasize: 2147483648 (2.0G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad6p2<br />Providers:<br />1. Name: gptid/e0fa02b3-81a6-11de-8aa6-02508d92a2eb<br /> Mediasize: 2147483648 (2.0G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 4194304<br /> length: 2147483648<br /> index: 0<br />Consumers:<br />1. Name: ad6p2<br /> Mediasize: 2147483648 (2.0G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad6p3<br />Providers:<br />1. Name: gpt/rio_zfs<br /> Mediasize: 317921280000 (296G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 620940000<br /> length: 317921280000<br /> index: 0<br />Consumers:<br />1. Name: ad6p3<br /> Mediasize: 317921280000 (296G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad6p3<br />Providers:<br />1. Name: gptid/1f26a2d6-81a7-11de-8aa6-02508d92a2eb<br /> Mediasize: 317921280000 (296G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 620940000<br /> length: 317921280000<br /> index: 0<br />Consumers:<br />1. Name: ad6p3<br /> Mediasize: 317921280000 (296G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad10p1<br />Providers:<br />1. Name: gptid/a01d172c-81a6-11de-8aa6-02508d92a2eb<br /> Mediasize: 131072 (128K)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 256<br /> length: 131072<br /> index: 0<br />Consumers:<br />1. Name: ad10p1<br /> Mediasize: 131072 (128K)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad10p2<br />Providers:<br />1. Name: gptid/e2aef92e-81a6-11de-8aa6-02508d92a2eb<br /> Mediasize: 2147483648 (2.0G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 4194304<br /> length: 2147483648<br /> index: 0<br />Consumers:<br />1. Name: ad10p2<br /> Mediasize: 2147483648 (2.0G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /><br />Geom name: ad10p3<br />Providers:<br />1. Name: gptid/20db981e-81a7-11de-8aa6-02508d92a2eb<br /> Mediasize: 317921280000 (296G)<br /> Sectorsize: 512<br /> Mode: r0w0e0<br /> secoffset: 0<br /> offset: 0<br /> seclength: 620940000<br /> length: 317921280000<br /> index: 0<br />Consumers:<br />1. Name: ad10p3<br /> Mediasize: 317921280000 (296G)<br /> Sectorsize: 512<br /> Mode: r0w0e0</pre><br /><h4>Процесс отвязки носителей от "устройств"</h4><br /><h5>1. Вывод из зеркала одного носителя и его полная очистка "для чистоты эксперимента"</h5><pre><br />% zpool detach amd64rio ad10p3<br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br /> scrub: scrub in progress for 0h0m, 0,00% done, 69h45m to go<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> ad6p3 ONLINE 0 0 0<br /><br />errors: No known data errors<br />% dd if=/dev/zero of=/dev/ad10p3 bs=100m<br />dd: /dev/ad10p3: short write on character device<br />dd: /dev/ad10p3: end of device<br />3032+0 records in<br />3031+1 records out<br />317921280000 bytes transferred in 5836.782166 secs (54468587 bytes/sec)</pre><br /><h5>2. Задание метки</h5><pre><br />% gpart modify -i 3 -l rio_zfs2 ad10<br />ad10p3 modified<br />% shutdown -r now</pre><br /><h5>3. Внесение носителя в зеркало</h5><pre><br />% zpool attach amd64rio ad6p3 gpt/rio_zfs2<br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br />status: One or more devices is currently being resilvered. The pool will<br /> continue to function, possibly in a degraded state.<br />action: Wait for the resilver to complete.<br /> scrub: resilver in progress for 0h3m, 17,22% done, 0h17m to go<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> mirror ONLINE 0 0 0<br /> ad6p3 ONLINE 0 0 0 7,80M resilvered<br /> gpt/rio_zfs2 ONLINE 0 0 0 9,08G resilvered<br /><br />errors: No known data errors</pre><br /><h5>4. После окончания репликации проделываем аналогичную операцию с другим носителем</h5><pre><br />% zpool detach amd64rio ad6p3<br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br /> scrub: none requested<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> gpt/rio_zfs2 ONLINE 0 0 0<br /><br />errors: No known data errors<br />% gpart modify -i 3 -l rio_zfs1 ad6<br />ad6p3 modified<br />% dd if=/dev/zero of=/dev/ad6p3 bs=100m<br />dd: /dev/ad6p3: short write on character device<br />dd: /dev/ad6p3: end of device<br />3032+0 records in<br />3031+1 records out<br />317921280000 bytes transferred in 5950.955982 secs (53423564 bytes/sec)<br />% shutdown -r now<br />% zpool attach amd64rio gpt/rio_zfs2 gpt/rio_zfs1<br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br /> scrub: resilver completed after 0h21m with 0 errors on Wed Aug 12 17:44:06 2009<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> mirror ONLINE 0 0 0<br /> gpt/rio_zfs2 ONLINE 0 0 0 123M resilvered<br /> gpt/rio_zfs1 ONLINE 0 0 0 52,7G resilvered<br /><br />errors: No known data errors</pre><br /><br />Это всё.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-15260535179238620162009-08-09T22:50:00.012+04:002009-11-15T23:26:01.992+03:00GPT и ZFS для FreeBSDИмеется диск Western Digital серии Scorpio Blue<br />(<a href="http://www.wdc.com/ru/products/products.asp?driveid=377">WD3200BEVT</a>, 320 ГБ; SATA 3 Гб/с; Кэш 8 МБ; 5400 об/мин).<br />Вот его-то я и подготовлю для использования в FreeBSD 8.<br /><br /><h4>Предисловие</h4><pre><br />% echo 'zfs_load="YES"' >> /boot/loader.conf<br />% shutdown -r now</pre><br /><br /><h4>Начало</h4><pre><br />% gpart create -s GPT ad6<br />% gpart add -b 34 -s 256 -t freebsd-boot -l rio_boot ad6<br />ad6p1 added<br />% gpart add -b 290 -s 4194304 -t freebsd-swap -l rio_swap ad6<br />ad6p2 added<br />% gpart add -b 4194594 -s 620940000 -t freebsd-zfs -l rio_zfs ad6<br />ad6p3 added<br />% gpart show<br />=> 34 625142381 ad6 GPT (298G)<br /> 34 256 1 freebsd-boot (128K)<br /> 290 4194304 2 freebsd-swap (2.0G)<br /> 4194594 620940000 3 freebsd-zfs (296G)<br /> 625134594 7821 - free - (3.8M)<br />% gpart bootcode -b /boot/pmbr ad6<br />ad6 has bootcode<br />% gpart bootcode -p /boot/gptzfsboot -i 1 ad6</pre><br /><br /><h4>Сначала было слово...</h4><pre><br />% zpool create amd64rio /dev/ad6p3<br />% zpool set bootfs=amd64rio amd64rio<br />% zfs list<br />NAME USED AVAIL REFER MOUNTPOINT<br />amd64rio 67,5K 291G 18K /amd64rio</pre><br /><br /><h4>Он сказал: "Поехали!"</h4><pre><br />% zfs set atime=off amd64rio<br />% zfs create -o atime=on amd64rio/var<br />% zfs create -o compression=gzip amd64rio/var/crash<br />% zfs create -o readonly=on amd64rio/var/empty<br />% zfs create amd64rio/var/tmp<br />% chmod 1777 /amd64rio/var/tmp<br />% zfs create amd64rio/var/db<br />% zfs create amd64rio/usr<br />% zfs create amd64rio/usr/home<br />% zfs create amd64rio/usr/local<br />% zfs create amd64rio/usr/obj<br />% zfs create -o compression=gzip amd64rio/usr/ports<br />% zfs create -o compression=off amd64rio/usr/ports/distfiles<br />% zfs create -o compression=gzip amd64rio/usr/src<br />% zfs create amd64rio/tmp</pre><br /><br /><h4>Результат</h4><pre><br />% zfs list<br />NAME USED AVAIL REFER MOUNTPOINT<br />amd64rio 387K 291G 22K /amd64rio<br />amd64rio/tmp 18K 291G 18K /amd64rio/tmp<br />amd64rio/usr 114K 291G 23K /amd64rio/usr<br />amd64rio/usr/home 18K 291G 18K /amd64rio/usr/home<br />amd64rio/usr/local 18K 291G 18K /amd64rio/usr/local<br />amd64rio/usr/obj 18K 291G 18K /amd64rio/usr/obj<br />amd64rio/usr/ports 37K 291G 19K /amd64rio/usr/ports<br />amd64rio/usr/ports/distfiles 18K 291G 18K /amd64rio/usr/ports/distfiles<br />amd64rio/usr/src 18K 291G 18K /amd64rio/usr/src<br />amd64rio/var 95K 291G 23K /amd64rio/var<br />amd64rio/var/crash 18K 291G 18K /amd64rio/var/crash<br />amd64rio/var/db 18K 291G 18K /amd64rio/var/db<br />amd64rio/var/empty 18K 291G 18K /amd64rio/var/empty<br />amd64rio/var/tmp 18K 291G 18K /amd64rio/var/tmp</pre><br /><br /><h4>Проверка</h4><pre><br />% zpool export amd64rio<br />% zpool import amd64rio<br />% zpool status<br /> pool: amd64rio<br /> state: ONLINE<br /> scrub: none requested<br />config:<br /><br /> NAME STATE READ WRITE CKSUM<br /> amd64rio ONLINE 0 0 0<br /> ad6p3 ONLINE 0 0 0<br /><br />errors: No known data errors</pre><br /><br />На этом пока всё.<br /><br /><h4>Полезные ссылки</h4><lo><li><a href="http://docs.sun.com/app/docs/doc/820-0836?l=ru">Руководство по администрированию файловых систем ZFS Solaris</a></li><li><a href="http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide">ZFS Best Practice Guide</a></li><li><a href="http://blogs.sun.com/roch/entry/when_to_and_not_to">WHEN TO (AND NOT TO) USE RAID-Z</a></li><br /></lo>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-53400824968771366602009-07-23T19:35:00.000+04:002009-07-23T19:37:42.177+04:00Conky в Xfce 4.6.1Настроил монитор ресурсов Conky. При ручном запуске в текущем сеансе Xfce всё, что надо, отображается и работает. Но когда ставлю его в автозагрузку ("Сеансы и запуск" в настройках Xfce), то Conky появляется ненадолго и исчезает — прогружается девственно-чистый Рабочий стол Xfce. В процессах текущего сеанса Conky нет.<br /><br />Как это исправить?<br /><br />1. Опции сборки Conky следующие (см. файл <span style="font-style:italic;">/var/db/ports/conky/options</span>):<br /><br /><code># This file is auto-generated by 'make config'.<br /># No user-servicable parts inside!<br /># Options for conky-1.7.1.1_1<br />_OPTIONS_READ=conky-1.7.1.1_1<br />WITHOUT_AUDACIOUS=true<br />WITHOUT_BMPX=true<br />WITHOUT_LUA=true<br />WITHOUT_MPD=true<br />WITHOUT_XMMS2=true<br />WITH_DOUBLE_BUFFER=true<br />WITHOUT_IMLIB2=true<br />WITH_XFT=true</code><br /><br />2. Простенький скрипт запуска Conky с <span style="font-weight:bold;">задержкой</span> в несколько секунд для того, чтобы полностью прогрузилось окно Рабочего стола Xfwm и не закрывало окно Conky:<br /><br /><code>#!/bin/sh<br />(sleep 5 && conky)</code><br /><br />Файл скрипта должен быть исполняемым:<br /><br /><code>> chmod 755 /other/path/to/conky.sh</code><br /><br />Поместить команду на запуск этого скрипта в автозагрузку Xfce: Настройки -> Сеансы и запуск -> вкладка Автозапуск приложений, по кнопке Добавить нужно указать имя приложения и полный путь к файлу скрипта.<br /><br />3. Наконец, файл настроек <span style="font-style:italic;">~/.conkyrc</span>:<br /><br /><code># Conky, a system monitor, based on torsmo<br />#<br /># Any original torsmo code is licensed under the BSD license<br />#<br /># All code written since the fork of torsmo is licensed under the GPL<br />#<br /># Please see COPYING for details<br />#<br /># Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen<br /># Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)<br /># All rights reserved.<br />#<br /># This program is free software: you can redistribute it and/or modify<br /># it under the terms of the GNU General Public License as published by<br /># the Free Software Foundation, either version 3 of the License, or<br /># (at your option) any later version.<br />#<br /># This program is distributed in the hope that it will be useful,<br /># but WITHOUT ANY WARRANTY; without even the implied warranty of<br /># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br /># GNU General Public License for more details.<br /># You should have received a copy of the GNU General Public License<br /># along with this program. If not, see <http://www.gnu.org/licenses/>.<br />#<br /><br />#alignment top_left<br />alignment top_right<br />#alignment bottom_left<br />#alignment bottom_right<br /><br />background no<br />border_margin 9<br />border_width 1<br /><br />cpu_avg_samples 2<br />default_color grey90<br />default_shade_color black<br />default_outline_color DarkGrey<br /><br />draw_borders no<br />draw_graph_borders yes<br />draw_outline no<br />draw_shades yes<br />double_buffer yes<br />use_xft yes<br />#xftfont DejaVu Sans Mono:size=9<br />xftfont Monaco CY:size=9<br /># Text alpha when using Xft<br />xftalpha 0.5<br />gap_x 8<br />gap_y 8<br />minimum_size 300 600<br />net_avg_samples 2<br />no_buffers yes<br />out_to_console no<br />out_to_stderr no<br />override_utf8_locale yes<br />own_window no<br />own_window_class Conky<br />own_window_hints undecorated,below,above,sticky,skip_taskbar,skip_pager<br />own_window_type desktop<br />stippled_borders 1<br />total_run_times 0<br />update_interval 3<br />uppercase no<br />use_spacer no<br />show_graph_scale no<br />show_graph_range no<br /><br />TEXT<br />${color #ffcb48}$nodename ${color #828282}$sysname $kernel [$machine]${color #ffcb48} ${hr 2}<br />${color #98c2c7}FRQ :$color $freq${color grey}MHz<br />${color #98c2c7}THR :$color $acpitemp°C<br />${color #98c2c7}RAM :$color $mem $memmax $memperc% ${color #78af78}${membar 4}${alignr 0}<br />${color #98c2c7}SWAP:$color $swap $swapmax $swapperc% ${color #78af78}${swapbar 4}<br />${color #98c2c7}CPU :$color $cpu% ${color #78af78}${cpubar 4}<br />${color #78af78}${cpugraph #78af78 #a3a3a3}<br /><br />${color #ffcb48}FS ${hr 2}<br />${color #98c2c7}/ : $color${fs_used /} ${fs_size /} ${alignr 90}${color #78af78}${fs_bar 6 /}<br />${color #98c2c7}/local : $color${fs_used /usr/local} ${fs_size /usr/local} ${alignr 90}${color #78af78}${fs_bar 6 /usr/local}<br />${color #98c2c7}/home : $color${fs_used /usr/home} ${fs_size /usr/home} ${alignr 90}${color #78af78}${fs_bar 6 /usr/home}<br /><br />${color #ffcb48}NETWORKING ${hr 2}<br />${color #98c2c7}${alignr 0}TOTAL<br />${color #98c2c7}UP :$color ${upspeed nfe0}$color ${alignr 0}${totalup nfe0}<br />${color #98c2c7}DOWN :$color ${downspeed nfe0}$color ${alignr 0}${totaldown nfe0}<br />${color #78af78}${downspeedgraph nfe0 #104E8B #0077ff}<br /><br />${color #ffcb48}PROCESSING ${hr 2}<br />${color #98c2c7}NAME PID CPU% MEM%<br />${color #e5e5e5}${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}<br />${color #c4c4c4}${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}<br />${color #a3a3a3}${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}<br />${color #828282}${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}<br />${color #676767}${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5}<br />${color #98c2c7}PROCESSES :$color $processes<br />${color #98c2c7}UPTIME :$color $uptime<br /><br />${color #ffcb48}TIME ${hr 2}<br />${color #e5e5e5}${font Arial Black:size=32}${alignc }${time %H:%M}${font}<br />${color #e5e5e5}${font DejaVu Sans:size=9}${alignc }${time %A, %d %B %Y}<br /><br />${color #ffcb48}LOGGING ${hr 2}<br />${color #e5e5e5}${font Monaco CY:size=7}${execi 10 tail -n25 /var/log/messages | fold -w50}${font}</code><br /><br />Вот и всё!<br /><a href="http://izen.dev.juga.ru/image/FreeBSD7.2-STABLE-Conky-Xfce4.6.1.png"><img width="50%" height="50%" src="http://izen.dev.juga.ru/image/FreeBSD7.2-STABLE-Conky-Xfce4.6.1.png" /></a>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com3tag:blogger.com,1999:blog-1640831195049620902.post-50005485052734742902009-07-15T20:53:00.005+04:002009-07-15T21:01:42.621+04:00Firefox 3.5 и Java-pluginЧтобы включить поддержку исполнения апплетов в firefox 3.5 на платформе [amd64], нужно проделать ряд несложных действий:<br /><br />1. Создать символическую ссылку на библиотеку <i>libjavaplugin_oji.so</i> JRE в каталоге плагинов firefox:<pre><br />% cd /usr/local/lib/firefox3/plugins/<br />% ln -s /usr/local/jdk1.6.0/jre/plugin/amd64/ns7/libjavaplugin_oji.so .</pre><br />2. Активировать плагин в настройках Дополнений браузера.<br /><br />После этого браузер может загружать и запускать java-апплеты.iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com0tag:blogger.com,1999:blog-1640831195049620902.post-19262248943836281192009-01-14T01:24:00.009+03:002009-09-03T17:28:05.865+04:00JSF для TomcatJSF входит в поставку любого JEE-сервера приложений, но не в ходит в Tomcat, так как Tomcat только лишь контейнер Web-приложений, но никак не JEE-сервер.<br /><br />Однако можно заставить Tomcat работать как полноценный сервер JSF-приложений. И сейчас я расскажу как это сделать по шагам. (Будем считать, что у вас уже установлен и работает Apache Tomcat 6.0).<br /><br /><ol><br /><li>Загрузите архив mojarra-1.2_09-b02-FCS-binary.zip с сайта https://javaserverfaces.dev.java.net/<br />Распакуйте из этого архива библиотеки jsf-api.jar и jsf-impl.jar и положите их в каталог CATALINA_HOME/lib.</li><br /><li>Перенесите библиотеки jstl.jar и standard.jar из каталога CATALINA_HOME/webapps/examples/WEB-INF/lib в каталог CATALINA_HOME/lib.</li><br /><li>Создайте тестовое JSF-приложение.<br />Структура каталогов:<pre><code><br />CATALINA_HOME/webapps/loginjsf<br />|-WEB-INF<br />| |-classes<br />| | |-com<br />| | |-corejsf<br />| | |-UserBean.class<br />| |-web.xml<br />| |-faces-config.xml<br />|-index.html<br />|-index.jsp<br />|-welcome.jsp<br /></code></pre><br />Исходник UserBean.java:<pre><br />package com.corejsf;<br /><br />public class UserBean {<br /> private String name;<br /> private String password;<br /><br /> // PROPERTY: name<br /> public String getName() { return name; }<br /> public void setName(String newValue) { name = newValue; }<br /><br /> // PROPERTY: password<br /> public String getPassword() { return password; }<br /> public void setPassword(String newValue) { password = newValue; }<br />}<br /></pre><br />Содержимое файла<br />CATALINA_HOME/webapps/loginjsf/WEB-INF/web.xml:<pre><br /><span class="ST0"><?</span><span class="ST0">xml</span> version="1.0"?><br /><span class="xml-tag"><web-app</span> <span class="xml-attribute">xmlns</span>=<span class="xml-value">"http://java.sun.com/xml/ns/javaee"</span><br /> <span class="xml-attribute">xmlns:xsi</span>=<span class="xml-value">"http://www.w3.org/2001/XMLSchema-instance"</span><br /> <span class="xml-attribute">xsi:schemaLocation</span>=<span class="xml-value">"http://java.sun.com/xml/ns/javaee</span><br /><span class="xml-value"> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><br /> <span class="xml-attribute">version</span>=<span class="xml-value">"2.5"</span><span class="xml-tag">></span><br /> <span class="xml-tag"><servlet</span><span class="xml-tag">></span><br /> <span class="xml-tag"><servlet-name</span><span class="xml-tag">></span>Faces Servlet<span class="xml-tag"></servlet-name</span><span class="xml-tag">></span><br /> <span class="xml-tag"><servlet-class</span><span class="xml-tag">></span>javax.faces.webapp.FacesServlet<span class="xml-tag"></servlet-class</span><span class="xml-tag">></span><br /> <span class="xml-tag"><load-on-startup</span><span class="xml-tag">></span>1<span class="xml-tag"></load-on-startup</span><span class="xml-tag">></span><br /> <span class="xml-tag"></servlet</span><span class="xml-tag">></span> <br /><br /> <span class="xml-tag"><servlet-mapping</span><span class="xml-tag">></span><br /> <span class="xml-tag"><servlet-name</span><span class="xml-tag">></span>Faces Servlet<span class="xml-tag"></servlet-name</span><span class="xml-tag">></span><br /> <span class="xml-tag"><url-pattern</span><span class="xml-tag">></span>*.faces<span class="xml-tag"></url-pattern</span><span class="xml-tag">></span><br /> <span class="xml-tag"></servlet-mapping</span><span class="xml-tag">></span> <br /><br /> <span class="xml-tag"><welcome-file-list</span><span class="xml-tag">></span><br /> <span class="xml-tag"><welcome-file</span><span class="xml-tag">></span>index.html<span class="xml-tag"></welcome-file</span><span class="xml-tag">></span><br /> <span class="xml-tag"></welcome-file-list</span><span class="xml-tag">></span><br /><span class="xml-tag"></web-app</span><span class="xml-tag">></span><br /></pre><br /><br />Содержимое файла<br />CATALINA_HOME/webapps/loginjsf/WEB-INF/faces-config.xml:<pre><br /><span class="ST0"><?</span><span class="ST0">xml</span> version="1.0"?><br /><span class="xml-tag"><faces-config</span> <span class="xml-attribute">xmlns</span>=<span class="xml-value">"http://java.sun.com/xml/ns/javaee"</span><br /> <span class="xml-attribute">xmlns:xsi</span>=<span class="xml-value">"http://www.w3.org/2001/XMLSchema-instance"</span><br /> <span class="xml-attribute">xsi:schemaLocation</span>=<span class="xml-value">"http://java.sun.com/xml/ns/javaee</span><br /><span class="xml-value"> http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"</span><br /> <span class="xml-attribute">version</span>=<span class="xml-value">"1.2"</span><span class="xml-tag">></span><br /> <span class="xml-tag"><navigation-rule</span><span class="xml-tag">></span><br /> <span class="xml-tag"><from-view-id</span><span class="xml-tag">></span>/index.jsp<span class="xml-tag"></from-view-id</span><span class="xml-tag">></span><br /> <span class="xml-tag"><navigation-case</span><span class="xml-tag">></span><br /> <span class="xml-tag"><from-outcome</span><span class="xml-tag">></span>login<span class="xml-tag"></from-outcome</span><span class="xml-tag">></span><br /> <span class="xml-tag"><to-view-id</span><span class="xml-tag">></span>/welcome.jsp<span class="xml-tag"></to-view-id</span><span class="xml-tag">></span><br /> <span class="xml-tag"></navigation-case</span><span class="xml-tag">></span><br /> <span class="xml-tag"></navigation-rule</span><span class="xml-tag">></span><br /><br /> <span class="xml-tag"><managed-bean</span><span class="xml-tag">></span><br /> <span class="xml-tag"><managed-bean-name</span><span class="xml-tag">></span>user<span class="xml-tag"></managed-bean-name</span><span class="xml-tag">></span><br /> <span class="xml-tag"><managed-bean-class</span><span class="xml-tag">></span>com.corejsf.UserBean<span class="xml-tag"></managed-bean-class</span><span class="xml-tag">></span><br /> <span class="xml-tag"><managed-bean-scope</span><span class="xml-tag">></span>session<span class="xml-tag"></managed-bean-scope</span><span class="xml-tag">></span><br /> <span class="xml-tag"></managed-bean</span><span class="xml-tag">></span><br /><span class="xml-tag"></faces-config</span><span class="xml-tag">></span><br /></pre><br />Содержимое файла<br />CATALINA_HOME/webapps/loginjsf/WEB-INF/index.html:<pre><br /><span class="tag"><</span><span class="tag">html</span><span class="tag">></span><br /> <span class="tag"><</span><span class="tag">head</span><span class="tag">></span><br /> <span class="tag"><</span><span class="tag">meta</span> <span class="argument">http-equiv</span><span class="argument">=</span><span class="value">"Refresh"</span> <span class="argument">content</span><span class="argument">=</span> <span class="value">"0; URL=index.faces"</span><span class="tag">/></span><br /> <span class="tag"><</span><span class="tag">title</span><span class="tag">></span>Start Web Application<span class="tag"></</span><span class="tag">title</span><span class="tag">></span><br /> <span class="tag"></</span><span class="tag">head</span><span class="tag">></span><br /> <span class="tag"><</span><span class="tag">body</span><span class="tag">></span><br /> <span class="tag"><</span><span class="tag">p</span><span class="tag">></span>Please wait for the web application to start.<span class="tag"></</span><span class="tag">p</span><span class="tag">></span><br /> <span class="tag"></</span><span class="tag">body</span><span class="tag">></span><br /><span class="tag"></</span><span class="tag">html</span><span class="tag">></span><br /></pre><br />Содержимое файла<br />CATALINA_HOME/webapps/loginjsf/WEB-INF/index.jsp:<pre><br /><span class="ST0"><</span><span class="ST0">html</span><span class="ST0">></span><br /> <span class="ST1"><%@</span><span class="ST2">page</span> <span class="attribute-name">contentType</span><span class="ST1">=</span><span class="attribute-value">"text/html; charset=UTF-8"</span> <span class="attribute-name">pageEncoding</span><span class="ST1">=</span><span class="attribute-value">"UTF-8"</span><span class="ST1">%></span><br /> <span class="ST1"><%@</span><span class="ST2"> taglib</span> <span class="attribute-name">uri</span><span class="ST1">=</span><span class="attribute-value">"http://java.sun.com/jsf/core"</span> <span class="attribute-name">prefix</span><span class="ST1">=</span><span class="attribute-value">"f"</span> <span class="ST1">%></span><br /> <span class="ST1"><%@</span><span class="ST2"> taglib</span> <span class="attribute-name">uri</span><span class="ST1">=</span><span class="attribute-value">"http://java.sun.com/jsf/html"</span> <span class="attribute-name">prefix</span><span class="ST1">=</span><span class="attribute-value">"h"</span> <span class="ST1">%></span><br /> <span class="ST0"><</span><span class="ST0">f:view</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">head</span><span class="ST0">></span> <br /> <span class="ST0"><</span><span class="ST0">title</span><span class="ST0">></span>A Simple JavaServer Faces Application<span class="ST0"></</span><span class="ST0">title</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">head</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">body</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h:form</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h3</span><span class="ST0">></span>Please enter your name and password.<span class="ST0"></</span><span class="ST0">h3</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">table</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">tr</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">td</span><span class="ST0">></span>Name:<span class="ST0"></</span><span class="ST0">td</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">td</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h:inputText</span> <span class="ST3">value</span><span class="ST3">=</span><span class="attribute-value">"</span><span class="scriptlet-delimiter">#{</span>user.name<span class="scriptlet-delimiter">}</span><span class="attribute-value">"</span><span class="ST0">/></span><br /> <span class="ST0"></</span><span class="ST0">td</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">tr</span><span class="ST0">></span> <br /> <span class="ST0"><</span><span class="ST0">tr</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">td</span><span class="ST0">></span>Password:<span class="ST0"></</span><span class="ST0">td</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">td</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h:inputSecret</span> <span class="ST3">value</span><span class="ST3">=</span><span class="attribute-value">"</span><span class="scriptlet-delimiter">#{</span>user.password<span class="scriptlet-delimiter">}</span><span class="attribute-value">"</span><span class="ST0">/></span><br /> <span class="ST0"></</span><span class="ST0">td</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">tr</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">table</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">p</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h:commandButton</span> <span class="ST3">value</span><span class="ST3">=</span><span class="attribute-value">"Login"</span> <span class="ST3">action</span><span class="ST3">=</span><span class="attribute-value">"login"</span><span class="ST0">/></span><br /> <span class="ST0"></</span><span class="ST0">p</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">h:form</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">body</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">f:view</span><span class="ST0">></span><br /><span class="ST0"></</span><span class="ST0">html</span><span class="ST0">></span><br /></pre><br />Содержимое файла<br />CATALINA_HOME/webapps/loginjsf/WEB-INF/welcome.jsp:<pre><br /><span class="ST0"><</span><span class="ST0">html</span><span class="ST0">></span><br /> <span class="ST1"><%@</span><span class="ST2">page</span> <span class="attribute-name">contentType</span><span class="ST1">=</span><span class="attribute-value">"text/html; charset=UTF-8"</span> <span class="attribute-name">pageEncoding</span><span class="ST1">=</span><span class="attribute-value">"UTF-8"</span><span class="ST1">%></span><br /> <span class="ST1"><%@</span><span class="ST2"> taglib</span> <span class="attribute-name">uri</span><span class="ST1">=</span><span class="attribute-value">"http://java.sun.com/jsf/core"</span> <span class="attribute-name">prefix</span><span class="ST1">=</span><span class="attribute-value">"f"</span> <span class="ST1">%></span><br /> <span class="ST1"><%@</span><span class="ST2"> taglib</span> <span class="attribute-name">uri</span><span class="ST1">=</span><span class="attribute-value">"http://java.sun.com/jsf/html"</span> <span class="attribute-name">prefix</span><span class="ST1">=</span><span class="attribute-value">"h"</span> <span class="ST1">%></span><br /><br /> <span class="ST0"><</span><span class="ST0">f:view</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">head</span><span class="ST0">></span> <br /> <span class="ST0"><</span><span class="ST0">title</span><span class="ST0">></span>A Simple JavaServer Faces Application<span class="ST0"></</span><span class="ST0">title</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">head</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">body</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h:form</span><span class="ST0">></span><br /> <span class="ST0"><</span><span class="ST0">h3</span><span class="ST0">></span><br /> Welcome to JavaServer Faces,<br /> <span class="ST0"><</span><span class="ST0">h:outputText</span> <span class="ST3">value</span><span class="ST3">=</span><span class="attribute-value">"</span><span class="scriptlet-delimiter">#{</span>user.name<span class="scriptlet-delimiter">}</span><span class="attribute-value">"</span><span class="ST0">/></span>!<br /> <span class="ST0"></</span><span class="ST0">h3</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">h:form</span><span class="ST0">></span><br /> <span class="ST0"></</span><span class="ST0">body</span><span class="ST0">></span> <br /> <span class="ST0"></</span><span class="ST0">f:view</span><span class="ST0">></span><br /><span class="ST0"></</span><span class="ST0">html</span><span class="ST0">></span><br /></pre><br /><li>Откройте строку адреса http://127.0.0.1:8080/loginjsf/ в окне броузера и убедитесь, что JSF-приложение работает.</li><br /></ol><br /><h4>Литература</h4><br /><ul><li><a href="http://www.williamspublishing.com/Books/978-5-8459-1396-8.html">Гери Д., Хорстманн К. «JavaServer Faces», Вильямс, 2008, ISBN 978-5-8459-1396-8, 978-0-13-173886-7</a><br />В принципе подойдёт в качестве быстрого старта в деле программирования динамичных Web-страниц. Но не скажу, что книга для тех, кто не знает ЯП Java и язык разметки HTML. Кроме JSF рассматриваются несколько технологий Apache. Примеры не привязаны к конкретной среде программирования — нужен только Apache Ant для сборки проектов.</li><br /><li><a href="http://info.okc.ru:8080/okc/publish/imag.nsf/book/978-5-91136-051-1">Дей Нейси, Мандел Лоренс, Райман Артур «Eclipse. Платформа Web-инструментов. Разработка Web-приложений на языке Java», КУДИЦ-ПРЕСС, 2008, ISBN 978-5-91136-051-1</a><br />Учит вести Web-проекты на примерах и разбираться со средой и окружением Eclipse. Жаль, что издание на русском языке вышло позже оригинального издания года на два.</li><br /></ul><br /><h4>Дополнительно</h4><br />Включить по умолчанию отдачу контента в кодировке UTF-8 можно в <i>server.xml</i> Tomcat'а:<br /><pre><br />< connector<br /> executor="tomcatThreadPool"<br /> port="8080"<br /> protocol="HTTP/1.1"<br /> connectionTimeout="20000"<br /> redirectPort="8443"<br /> URIEncoding="utf-8"<br /> useBodyEncodingForURI="utf-8"/><br /></pre>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com2tag:blogger.com,1999:blog-1640831195049620902.post-74873600901991313882008-12-15T20:37:00.006+03:002008-12-15T21:27:52.070+03:00FreeBSD: декорация окон в теме Nimbus<a href="http://izen.dev.juga.ru/image/FreeBSD7.1-PRERELEASE_Xfce4.4.3_Nimbus-theme.png"><img src="http://izen.dev.juga.ru/image/FreeBSD7.1-PRERELEASE_Xfce4.4.3_Nimbus-theme.png" width="50%" height="50%"></a><br /><h3>Как установить</h3><br /><ol><br /><li>Установить из порта тему Nimbus для элементов Gtk:<pre><br />% cd /usr/ports/x11-themes/nimbus/ && make install clean</pre></li><br /><li>Менеджер окон Xfce4 (xfwm4), устанавливаемый вместе со средой из порта, не имеет декорации окон для темы Nimbus, поэтому идём сюда:<br /><a href="http://www.xfce-look.org/content/show.php/Nimbus-Xfwm4?content=54833">http://www.xfce-look.org/content/show.php/Nimbus-Xfwm4?content=54833</a><br />Скачиваем файлик <i>54833-Nimbus-Xfwm4.tar.bz2</i>;<br />распаковываем его содержимое в каталог <i>~/.themes</i>.<br />Перелогиниваемся и выбираем в настройках Xfce4: пользовательский интерфейс <i>nimbus</i>; окна <i>Nimbus-Xfwm4</i></li><br /></ol>iZENhttp://www.blogger.com/profile/05672297564535855076noreply@blogger.com1