понедельник, 24 декабря 2012 г.

Метод задействования tmpfs c ZFS во FreeBSD

Пару слов о tmpfs
Это файловая система в виртуальной памяти, которая, как известно, при необходимости задействует SWAP. Отличие её от RAM-диска в том, что она не резервирует пространство в оперативной памяти фиксированного размера и может использовать пространство свопинга при превышении некоего количества записанных на неё данных и/или по требованию механизма свопинга операционной системы. Это свойство часто используется для ускорения приложений, использующих временные файлы, так как доступ к оперативной памяти намного быстрее, чем к диску. Файлы, записываемые в tmpfs, после перезагрузки не сохраняются.
Метод
1. Пишем в /boot/loader.conf следующую строчку:
tmpfs_load="YES"
Если опция TMPFS не включена в конфигурацию ядра, в текущем сеансе загружаем соответствующий модуль ядра:
% kldload tmpfs
2. Пишем в /etc/fstab следующую строчку:
tmpfs /tmp tmpfs rw,mode=1777 0 0
3. В консоли выполняем серию команд для подготовки SWAP к новому режиму использования (удаляем старую ФС, если она есть, и существующий SWAP неподходящего размера; создаём новые каталог и SWAP подходящего размера):

% 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
Источники информации

вторник, 1 мая 2012 г.

FreeBSD: обновление системы из исходников

Пересборка системы FreeBSD из исходников состоит из следующих этапов:
  • загрузка файлов с исходными кодами
  • редактирование конфигурационных файлов
  • непосредственная компиляция и сборка системы из исходников
  • инсталляция собранных ядра и системного окружения
  • слияние новых настроечных файлов системы с существующими
  • перезагрузка для вступления в силу всех изменений


Рассмотрим эти этапы подробнее.

Конфигурационные файлы

В системе должны быть три файла, влияющие на этапы загрузки (обновления), компиляции и сборки системы. Это файлы: /etc/make.conf, /etc/src.conf и /etc/sys-supfile. При этом файлы src.conf и sys-supfile необязательно присутствуют в системе, но их можно и нужно создать на основе примеров.

Примерный файл /etc/make.conf:
#2012-04-22
KERNCONF=ROXY
WRKDIRPREFIX=/usr/obj
# ln -s /store/distfiles /usr/ports/distfiles
#-DISTDIR=/store/distfiles # zfs set mountpoint=/usr/ports/distfiles store/distfiles
PACKAGES=/store/pckgs64 # ln -s /store/pckgs64 /usr/ports/packages
# see /usr/share/examples/etc/make.conf
MAKE_JOBS_NUMBER=5
CC=clang
CXX=clang++
CPP=clang-cpp
# Don't die on warnings
NO_WERROR=
WERROR=
# Don't forget this when using Jails!
NO_FSCHG=
#-WITH_NEW_XORG=true
LOADER_ZFS_SUPPORT=true
LOCALIZED_LANG=ru
WITH_LCD_FILTERING=true
WITH_XFT=true
WITHOUT_TTF_BYTECODE_ENABLED=false
WITH_TTF_BYTECODE_ENABLED=true
WITH_MSWINDOWS_LICENSE=true
WITH_VPX=true
WITH_A4SIZE=true
WITHOUT_DEBUG=true
WITHOUT_NOUVEAU=true
WITHOUT_ALSA=true
WITHOUT_MYSQL=true
WITHOUT_NAUTILUS=true
# Keep ruby 1.9 as default version.
RUBY_DEFAULT_VER=1.9
# added by use.perl 2012-02-16 21:44:23
PERL_VERSION=5.12.4

Как не трудно заметить, опции файла make.conf влияют на компиляцию не только операционной системы, но и прикладного программного обеспечения, устанавливаемого из коллекции портов. Но вот опции компиляции ПО из коллекции портов не влияют на сборку системы.

Примерный файл /etc/src.conf (дополнительно см. man src.conf):
WITHOUT_AMD=true
WITHOUT_ASSERT_DEBUG=true
WITHOUT_ATM=true
WITHOUT_BIND_DNSSEC=true
WITHOUT_BIND_ETC=true
WITHOUT_BIND_LIBS_LWRES=true
WITHOUT_BIND_MTREE=true
WITHOUT_BIND_NAMED=true
WITHOUT_FLOPPY=true
WITHOUT_FREEBSD_UPDATE=true
WITHOUT_GAMES=true
WITHOUT_GDB=true
WITHOUT_HTML=true
WITH_IDEA=true
WITHOUT_IPFILTER=true
WITHOUT_IPX=true
WITHOUT_IPX_SUPPORT=true
WITHOUT_LIB32=true
WITHOUT_LPR=true
WITHOUT_NDIS=true
WITHOUT_PROFILE=true
WITHOUT_RCS=true
WITHOUT_SENDMAIL=true
WITHOUT_SYSINSTALL=true
WITHOUT_TELNET=true

Мне нужен не весь BIND, а только некоторые утилиты из него. MTA Sendmail и отладчик GDB на обычной рабочей станции не нужны. Также не нужны устаревшие сетевые протоколы ATM и IPX.

Примерный файл /etc/sys-supfile:

*default host=cvsup10.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs
*default tag=RELENG_9
*default delete use-rel-suffix
*default compress
src-all

То есть при использовании этого файла будут загружены исходные коды FreeBSD 9-STABLE.


Процесс обновления
(непосредственно процесс обновления по шагам расписан позднее, здесь даются лишь базовые понятия)

Обновление исходников системы производится системной утилитой csup примерно так:

% csup /etc/sys-supfile

Необходимое и достаточное условие: активное прямое Интернет-соединение!
(здесь и далее символ "%" говорит о том, что используется командная оболочка /bin/tcsh с правами рута; символ ">" говорит о том, что используется командная оболочка /bin/tcsh с правами пользователя.)

Потом необходимо сделать копию файла настроек ядра GENERIC:

% cd /sys/amd64/conf/ && cp GENERIC ROXY

и отредактировать эту копию. Проследите, чтобы имя файла, в данном случае /sys/amd64/conf/ROXY, совпало с именем ядра переменной KERNCONF в файле make.conf.

Файл /sys/amd64/conf/ROXY здесь не весь(!!!), а лишь несколько строчек, в которых я что-то меняю:
# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.568.2.11 2012/04/02 18:13:29 jkim Exp $
...
cpu HAMMER
ident ROXY
...
#-makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
...
Полная инструкция сборки всего системного окружения и ядра FreeBSD
  1. Удаляем бинарники от предыдущей компиляции:

    % cd /usr/obj/ && chflags -R noschg * && rm -rf *
  2. Редактируем файл /etc/sys-supfile для обновления исходников до нужной версии системы:

    % ee /etc/sys-supfile
  3. Синхронизируем дерево исходного кода с серверным:

    % cd /usr/src/ && chflags -R noschg * && csup /etc/sys-supfile
  4. На этом шаге делаем копию конфига ядра:

    % cd /sys/amd64/conf/ && cp GENERIC ROXY
  5. Редактируем конфиг будущего ядра:

    % ee /sys/amd64/conf/ROXY
  6. На этом этапе редактируем make.conf и src.conf, если нужно:

    % ee /etc/make.conf
    и

    % ee /etc/src.conf
  7. Очищаем исходники:

    % cd /usr/src/ && chflags -R noschg * && make cleandir
  8. Собираем Мир и Ядро:

    % cd /usr/src/ && make buildworld buildkernel
  9. Инсталлируем Ядро и Мир в однопользовательском режиме, обновляем файлы конфигурации системы:

    % shutdown now
    # cd /usr/src/ && make installkernel installworld
    # mergemaster
    # shutdown -r now
  10. В одних случаях может быть достаточно нажимать клавишу [i] на вопросы утилиты mergemaster — инсталлировать новые файлы конфигурации. Но сначала нужно проверить, какой файл обрабатывается, прежде чем что-то сделать с ним: заменить старую версию файла новым [i], оставить старый [d], посмотреть изменения [v] или произвести слияние нового со старым [m], сделать ссылку [l] (бывает и такое). В завершение процесса на вопрос об удалении временного каталога можно нажать клавишу [y].
  11. Перезагружаемся:

    # shutdown -r now
  12. Загружаемся как обычно, но затем снова переходим в однопользовательском режим и удаляем мусор от предыдущей инсталляции:

    % shutdown now
    # cd /usr/src/ && make BATCH_DELETE_OLD_FILES=true delete-old delete-old-libs
    # shutdown -r now


Вот и всё.

воскресенье, 11 сентября 2011 г.

Xfce 4.8.2: завершение работы и рестарт

Хм, продолжаем сношаться с чёткой системой костылей и подпорок, придуманной нашими пернатыми друзьями под чутким руководстом коммерческих компаний и FSF во главе с товарищем Штольманом.

Чтобы иметь возможность перезагружать компьютер или завершать работу не из командной строки, а из самой среды Xfce 4.8.2, необходимо сделать доступными кнопки диалога "Выйти" — "Перезагрузить" и "Выключить", соответственно.

Решение проблемы описано здесь: перейти к обсуждению проблемы.

  • Создаём файл:
  • % touch /usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.consolekit.pkla
  • Смотрим сообщение из файла /usr/ports/x11-wm/xfce4-session/pkg-message и редактируем созданный файл в соответствии пожеланиями линуксятников PUTTY-пользователям FreeBSD:
  • [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
(Пользователь, имеющий право перезагружать и выключать компьютер в Unix, как правило, входит в группу operator).

После этого диалог выхода Xfce приобретает законченный вид:

вторник, 7 июня 2011 г.

Популярность копилефт-лицензий падает

Ссылка на статью: Популярность копилефт-лицензий падает

Согласно сводке результатов исследований, проведённых экспертами центра Open Source Resource Center компании Black Duck процентное количество открытых проектов, использующих лицензии семейства GPL, снизилось с 70% (июнь 2008 г.) до 61% (июнь 2011 г.), а использование конкретно лицензии GPLv2 снизилось с 58% до 45% за те же три года. При этом количество проектов, использующих GPL-лицензии, в реальном исчислении увеличилось за последние несколько лет. Например, число проектов под лицензией GPLv2 возросло на 5.5% между июнем 2009 и июнем 2011 года, в то время как общее число проектов с открытым кодом увеличилось более чем на 16%.

Количество проектов, использующих лицензию Apache, выросло на 46% в течение последних двух лет, в то время как количество проектов, лицензируемых на условиях MIT-лицензий, выросло на целых 152%. Графики из исследования Black Duck ясно указывают на то, что лицензии MIT являются лидером в последние два года, их показатель вырос с 3.8% от всех проектов в июне 2009 года до 8.23% на сегодняшний момент времени, и обогнал по общему показателю прогресса использование лицензии Apache, BSD, GPLv3 и LGPLv2.1.

Данные исследования Black Duck демонстрируют в последние годы не только снижение важности копилефт-лицензий, требующих при создании производных работ или внесения изменений открытия кода на тех же условиях. Исследование, проведённое в рамках доклада Control and Community, также указывает на то, что снижается количество производителей, связывающих себя с ПО, лицензируемым строго под копилефт-лицензиями. Были оценены OpenSource стратегии трёхсот компаний-вендоров и их филиалов. Рассматривались такие вопросы, как выбор лицензии, модель разработки, стратегия авторских прав и источник прибыли.


Очень интересные графики, демонстрирующие тренды заинтересованности в той или иной политике лицензирования проектов за последние годы. Особенно мне понравился вот этот график:


— в мае-июне 2006 мне наконец-то удалось разобраться с многообразием дистрибутивов GNU/Linux, попробовать LiveCD BLiN 2.0 на основе GNOME, DVD9 ALT Linux Compact 3.0 со стабильной оболочкой KDE и ужасно глючным Xfce DE. В конце-концов, остановишись и установив в июне 2006 года Ubuntu 6.06, стал готов к окончательному переходу на BSD и проекты с исключительно открытым кодом и вскоре сделал это!

Как-будто чувствовал тренды...

понедельник, 6 июня 2011 г.

ZFSv28 портирована в ветку FreeBSD 8-STABLE

Файловая система ZFSv28 портирована в ветку FreeBSD 8-STABLE

Дождались! :)

Вкратце:
  • добавлен уровень RAIDZ3 — RAID-5 с тройной чётностью
  • дедупликация блоков данных на уровне файловой системы (экономит место на носителях при наличии одинаковых данных в различных файлах)
  • сравнение снапшотов командой zfs diff
  • получение независимых клонов пулов командой zpool split для переноса на другие машины
  • cчётчик ссылок на снапшот для защиты снапшотов от ошибочного удаления
  • восстановление FAULTED-пула путём отматывания последних транзакций записи (ранее практиковался ручной метод восстановления)
  • другие улучшения

суббота, 14 мая 2011 г.

Автоматизация пересборки FreeBSD

1. Обновление исходников

csup-файл:
*default host=cvsup11.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs
*default tag=RELENG_8
*default delete use-rel-suffix
*default compress
src-all


Скрипт обновления исходников:
#!/bin/csh
set SYSTEMPOOL=selena
set TIMESTAMP=`date -u +%Y%m%d%H%M`
#-zfs snapshot ${SYSTEMPOOL}/usr/src@${TIMESTAMP}
cd /usr/src && chflags -R noschg *
csup /etc/sys-supfile
head -25 /usr/src/UPDATING
cd /usr/src/sys/`uname -m`/conf/ && diff `uname -i` GENERIC


2. Скрипт компиляции и сборки

#!/bin/csh
set LOG=/var/log/update_system_build.log
set DONE="System Build Failed."
set TIMESTAMP=`date -u +%Y%m%d%H%M`
cd /usr/src/ && chflags -R noschg * && make cleandir && make cleandir buildworld buildkernel && set DONE="System Build Success."
echo "${TIMESTAMP}: ${DONE}" >> ${LOG}
tail -n1 ${LOG}


3. Ручная работа

shutdown now
cd /usr/src/ && make installkernel installworld
mergemaster
shutdown -r now
shutdown now
cd /usr/src/ && make BATCH_DELETE_OLD_FILES=true delete-old delete-old-libs
shutdown -r now


*) mergemaster я обычно выполняю в диалоговом режиме, чтобы увидеть изменения в системных конфигурационных файлах. В повседневных пересборках, как правило, практически нет критичных изменений и можно смело нажимать [i] для принятия нового.

Update? Ports. Install!

Идея быстрого развёртывания рабочей конфигурации FreeBSD весьма далека от пользователей. Предлагаемый сценарий «карты» ПО даёт сравнительно менее затратный способ получения мультимедийного и рабочего окружения на основе графических сред Fluxbox, Xfce4 или GNOME-lite, а также даёт возможность привести поломанное программное окружение к определённому базовому состоянию.

Для управления ПО используется пакет утилит portupgrade (порт ports-mgmt/portupgrade), но можно использовать и portmaster (порт ports-mgmt/portmaster).
Сценарий карты ПО

#!/bin/csh
alias installport 'portinstall -p'
# Или из бинарных пакетов: alias installport 'env PKG_PATH=/store/pckgs64/All/ portinstall -yPP'
# Или с помощью portmaster: alias installport 'portmaster -gD' # --delete-build-only'
set LOG=/var/log/update_ports.log
set TIMESTAMP_BEGIN=`date -u +%Y%m%d%H%M`
echo "${TIMESTAMP_BEGIN}: begin installation ports" >> ${LOG}
installport sysutils/ataidle
installport sysutils/smartmontools
installport archivers/unrar
installport archivers/p7zip
installport ports-mgmt/pkg_cutleaves
installport ports-mgmt/pkg_tree
installport audio/faad
installport audio/faac
installport audio/sox
installport multimedia/libdvdcss
installport net/liveMedia
installport audio/libaacplus
installport multimedia/libquicktime
#-=Xorg=-
installport x11-drivers/xorg-drivers
installport x11-servers/xorg-server
installport x11/xorg-minimal
installport x11/setxkbmap
installport x11/xhost
installport x11/xset
installport x11/xinput
installport x11/xdpyinfo
installport graphics/mesa-demos
installport x11-fonts/dejavu
installport x11-fonts/urwfonts
installport x11-fonts/urwfonts-ttf
installport x11-fonts/isabella
installport x11-wm/fluxbox
installport x11-themes/cursor-jimmac-theme
installport x11-themes/gtk-murrina-fancy-clearlooks
installport misc/gnome-icon-theme
installport x11/xscreensaver
installport audio/grip
installport www/midori
installport x11/slim
installport math/galculator
#-installport net-im/gajim
installport ftp/gftp
installport textproc/meld
#-installport net-p2p/transmission-gtk2
installport net-p2p/deluge
installport audio/deadbeef
#-=printing=-
installport print/hplip
#-=GNOME App=-
installport archivers/file-roller
installport editors/gedit-plugins
installport graphics/eog-plugins
installport graphics/evince
installport multimedia/gnome-mplayer
installport sysutils/gnome-system-monitor
installport net/gnome-nettool
#-=other=-
installport mail/thunderbird
installport mail/thunderbird-i18n
set TIMESTAMP_END=`date -u +%Y%m%d%H%M`
echo "${TIMESTAMP_END}: end installation ports" >> ${LOG}


Инсталляция Xfce 4.6.2 (из отдельного дерева портов)

#!/bin/csh
alias installport 'portinstall -p'
#alias installport 'portmaster -gD' # --delete-build-only'
#-=Xfce4=-
#-installport deskutils/xfce4-notifyd # conflict with xfce4-notification-daemon
installport deskutils/xfce4-notification-daemon # conflict with xfce4-notifyd
#-installport audio/thunar-media-tags-plugin
installport archivers/thunar-archive-plugin
installport x11-wm/xfce4-session
installport x11-wm/xfce4
installport sysutils/xfce4-systemload-plugin
installport x11/xfce4-screenshooter-plugin
installport x11/xfce4-clipman-plugin
installport sysutils/xfce4-netload-plugin
installport misc/xfce4-weather-plugin
installport sysutils/xfburn


Восстановление конфигурации
#!/bin/csh
set CONFIG_DIR=/root/update/config
set LOCALBASE=/usr/local
set TIMESTAMP=`date -u +%Y%m%d%H%M`
cd ${LOCALBASE}/etc/ && mv -v slim.conf slim.conf.${TIMESTAMP} && cp -v ${CONFIG_DIR}/slim.conf ${LOCALBASE}/etc/
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
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


Важные замечания
  • Дерево портов должно быть своевременно обновлено.
  • Обращаю внимание на то, что по умолчанию настройки политик логина пользователей, монтирования сменных носителей от имени непривелегированных пользователей не определены. Поэтому нужно заранее подготовить файлы slim.conf, PolicyKit.conf и mount.rc, описанные в соответствующих статьях, и разместить их в защищённом от записи непривелегированным пользователем каталоге, например, в /root/update/config.
  • Для пакетного режима работы сценария важно наличие сформированного каталога /var/db/ports/ с заданными необходимыми опциями сборки портов. Иначе придётся настраивать установку одельных портов и их зависимостей в процессе исполнения сценария. ;)
  • Команды этого сценария подготавливают графическую среду для работы и развлечения, не уничтожая исходные файлы конфигурации.
Сценарий повседневного обновления ПО

#!/bin/csh
#-alias upgradeports 'pkgdb -vfFu && portsdb -u && portupgrade -aF && portupgrade -ap'
alias upgradeports 'portmaster -agD --delete-build-only'
alias listupdates 'portmaster -L | grep "New"'
set LOG=/var/log/update_ports.log
set DONE="Ports Updating Failed."
set SYSTEMPOOL=selena
set TIMESTAMP=`date -u +%Y%m%d%H%M`
zfs snapshot ${SYSTEMPOOL}/usr/local@${TIMESTAMP}
zfs snapshot ${SYSTEMPOOL}/var/db/pkg@${TIMESTAMP}
cd /usr/ports/ && chflags -R noschg * && portsnap fetch update
listupdates
head -17 /usr/ports/UPDATING
upgradeports && set DONE="Ports Updating Success."
echo "${TIMESTAMP}: ${DONE}" >> ${LOG}
tail -n1 ${LOG}

пятница, 18 марта 2011 г.

AMD 785G с Phenom II X4 810

Было

% glxgears
2014 frames in 5.0 seconds = 402.682 FPS
2101 frames in 5.0 seconds = 420.139 FPS
2102 frames in 5.0 seconds = 420.367 FPS
2101 frames in 5.0 seconds = 420.153 FPS
2107 frames in 5.0 seconds = 421.336 FPS
2109 frames in 5.0 seconds = 421.762 FPS

Процессор при этом нагружен на 35-45%, причём — все четыре ядра! Это называется софтверным ускорением. :))

Включаем аппаратное 3D-ускорение на Radeon HD

1) Добавляем строчку игнорирования NOUVEAU, чтобы он не мешал графическому окружению:
% echo 'WITHOUT_NOUVEAU=true' >> /etc/make.conf



2) Пересобираем graphics/libdrm, graphics/libGL*, graphics/libglut:
% portupgrade -fp graphics/libdrm && portupgrade -fp graphics/libGL && portupgrade -fp graphics/libGLU && portupgrade -fp graphics/libglut graphics/mesa-demos

или, если есть время, так:
% portupgrade -fpr graphics/libdrm



3) Перезагружаемся и смотрим на результат:
% glxinfo | grep render
IRQ's not enabled, falling back to busy waits: 2 0
direct rendering: Yes
OpenGL renderer string: Mesa DRI R600 (RS880 9710) 20090101 TCL

% glxinfo | grep glx
IRQ's not enabled, falling back to busy waits: 2 0
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:

% glxgears
IRQ's not enabled, falling back to busy waits: 2 0
9033 frames in 5.0 seconds = 1806.251 FPS
8878 frames in 5.0 seconds = 1775.427 FPS
8993 frames in 5.0 seconds = 1798.448 FPS
8999 frames in 5.0 seconds = 1799.691 FPS
9056 frames in 5.0 seconds = 1811.054 FPS
9000 frames in 5.0 seconds = 1799.960 FPS
9031 frames in 5.0 seconds = 1806.070 FPS
8957 frames in 5.0 seconds = 1791.309 FPS
^C

% uname -rsm
FreeBSD 8.2-STABLE amd64

% pkg_info -Ex video-ati
xf86-video-ati-6.14.0_1

% pkg_info -Ex dri
dri-7.6.1,2
dri2proto-2.3
xorg-drivers-7.5.1

% pkg_info -Ex mesa
mesa-demos-7.6.1

% pkg_info -Ex libGL
libGL-7.6.1
libGLU-7.6.1


xorg.conf

Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
ModulePath "/usr/local/lib/xorg/modules"
FontPath "/usr/local/lib/X11/fonts/misc/"
FontPath "/usr/local/lib/X11/fonts/TTF/"
FontPath "/usr/local/lib/X11/fonts/OTF"
FontPath "/usr/local/lib/X11/fonts/Type1/"
FontPath "/usr/local/lib/X11/fonts/100dpi/"
FontPath "/usr/local/lib/X11/fonts/75dpi/"
FontPath "/usr/local/lib/X11/fonts/dejavu/"
EndSection

Section "Module"
#-Load "glx"
Load "extmod"
Load "record"
Load "dbe"
Load "dri"
Load "dri2"
Load "freetype"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "us,ru"
Option "XkbVariant" ",winkeys"
Option "XkbOptions" "grp:caps_toggle,grp_led:caps,compose:ralt"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/sysmouse"
Option "ZAxisMapping" "4 5 6 7"
EndSection

Section "ServerFlags"
Option "AutoAddDevices" "false"
Option "AllowEmptyInput" "off"
Option "AllowMouseOpenFail" "true"
Option "IgnoreABI" "on"
Option "AIGLX" "true"
EndSection

Section "Monitor"
#DisplaySize 540 350 # mm
Identifier "Monitor0"
VendorName "HWP"
ModelName "HP LP2475w"
HorizSync 30.0 - 94.0
VertRefresh 48.0 - 85.0
Option "DPMS"
EndSection

Section "Modes"
Identifier "Mode0"
EndSection

Section "Device"
Option "int10" "on"
Option "BusType" "PCIE"
Option "RenderAccel" "on"
Option "AccelMethod" "exa"
Option "DynamicPM" "on"
Option "DRI" "on"
Identifier "Card0"
#Driver "vesa"
Driver "ati"
VendorName "ATI Technologies Inc"
BoardName "RS880 [Radeon HD 4200]"
#-BusID "PCI:1:5:0"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 24
#Modes "1680x1050"
Modes "1920x1200"
EndSubSection
EndSection

Section "DRI"
Mode 0666
EndSection

Section "Extensions"
Option "Composite" "true"
Option "DAMAGE" "true"
Option "RENDER" "true"
EndSection

среда, 16 июня 2010 г.

Недорогое хранилище данных

Есть SATA-контроллёр, распаянный на материнке. В наличии имеется всего 4 доступных для винчестеров физических портов SATA.

Система собирается в очень компактном корпусе для NAS/Backup. В наличии только одно место под одно 5,25"-устройство (представьте привод CD-ROM).

Под это дело нужно 4 винчестера компактного (не больше 2,5") форм-фактора, несильно горячие, так как их придётся запихнуть хоть и в продуваемую корзину, но каждый в четверть от объёма под 5,25"-устройство.

Итак, расклад такой (значения ёмкости округлены для прикидочных расчётов):
HDD1 — 320ГБ (два логических тома: один на 20ГБ, другой на 300ГБ);
HDD2 — 320ГБ (два логических тома: один на 20ГБ, другой на 300ГБ);
HDD3 — 640ГБ (один логический том на 600ГБ);
HDD4 — 640ГБ (один логический том на 600ГБ).

Формируем из них массивы:
RAID-1: HDD1.1+HDD2.1 — 20ГБ для операционной системы;
RAID-0: HDD1.2+HDD2.2 — 600ГБ логический том для RAID-5;
RAID-5: (HDD1.2+HDD2.2)+HDD3+HDD4 — 1200ГБ для данных.

Пробуем!

Цены

среда, 2 июня 2010 г.

Меню рабочего стола Xfce 4.6 как в Xfce 4.4

Как получить такое меню:
Xfce4 Menu
Делаем

  • Настройки -> Рабочий стол -> вкладка Значки -> Тип значков: Ничего.
    Настройки -> Рабочий стол -> вкладка Меню: флажок Показать меню приложений по щелчку правой кнопкой мыши

  • Включить, а затем отключить отображение значков на Рабочем столе


P.S.
Вот такое вот шаманство. Но всё именно так :)

понедельник, 31 мая 2010 г.

GNOME: ненужные иконки на Рабочем столе

Концепция иконок на Рабочем столе стала популярна ещё в Windows. Но если посмотреть на этот вид представления, то окажется, что иконки "работают" до первого открытия окна, а потом для запуска следующей программы или поиска какого-то документа на Рабочем столе потребуется свернуть все открытые окна. Процесс бессмысленный по своей сути.

Способ убрать иконки следующий:

1. Запускаем gconf-editor (Приложения->Системные->Редактор конфигурации).

2. Снимаем галку со свойства /apps/nautilus/preferences/show_desktop

Готово!
Полезные ссылки

среда, 26 мая 2010 г.

Индустрия моды как успешный образец культуры Open Source

Некоммерческая организация TED выложила на своём сайте видеозапись выступления Джоанны Блекли с недавно прошедшей конференции TEDxUSC 2010 в университете Южной Калифорнии. Это очень любопытная лекция (15 минут), основная идея которой состоит в том, что индустрия моды со своей слабым использованием копирайта может стать примером для медийной индустрии и для софтверного рынка. Она показывает, как рынок дизайна одежды и генерирует сотни миллиардов долларов практически при полном отсутствии интеллектуальной собственности (у них есть только трейдмарки, то есть можно полностью копировать чужой дизайн, но нельзя копировать логотип).
Обсуждение: http://habrahabr.ru/blogs/copyright/94630/

Интересно, а что если…


Например, Вячеслав Зайцев придумал модный/удобный фасон одежды. Через несколько месяцев китайцы заваливают российский рынок ширпотреба одеждой аналогичного фасона. Зайцев якобы лишается недополученной прибыли.

Что если бы Зайцев закрыл свой интеллектальный продукт патентами и не дал китайцам выбрасывать на рынок похожий товар, то что бы изменилось для потребителей?

Ответ: цены на такую одежду взлетели бы до небес.

А что если бы Зайцев специально отдал свою интеллектуальную собственность в руки международного союза кутюрье и запретил бы "закрывать" свои фасоны от широкого распространения, то есть обозначил статус своего творчества как только открытого и доступного для всевозможных вариаций другими кутюрье, не брал бы за это ни копья денег (авторских отчислений). То кто бы выиграл от такого «открытия»?

Ответ: выиграли бы Зайцев с китайцами за счёт союза кутюрье; цены были бы ниже плинтуса за счёт массовости. Творческий союз кутюрье оказался бы в проигрыше из-за демпинга, несопоставимого объёма и дикой разницы цен между «зайцевским» ширпотребом и эксклюзивного товара от других кутюрье — налицо вытеснение кутюрье из массового сегмента рынка и сильной сегментации. Расслоение общества потребления неизбежно.

Третий вариант: Зайцев генерирует только идеи и не патентует их, строит свой бизнес на реализации их наравне с конкурирующими партнёрами в лице других профессиональных кутюрье и китайцев. Что бы было?

Ответ: хорошо сбалансированная на основе чисто рыночных механизмов модель производство-потребления, учитывающая запросы всех без исключения производителей продукции и потребителей, которые покупают то, что им нравится и за адекватную цену.

воскресенье, 2 мая 2010 г.

Автомаунт подсоединяемых носителей в Xfce4

Вопросы по автомаунту флэшек и CD/DVD с русскими именами под Xfce4/Thunar+HAL решены.
  1. Убираем все точки монтирования сменных носителей из /etc/fstab.
  2. Редактируем файл /usr/local/etc/xdg/xfce4/mount.rc:
    [vfat]
    uid=
    shortname=winnt
    # FreeBSD specific option
    longnames=true
    -L=ru_RU.UTF-8
    -D=CP866
    -m=0664
    -M=0775

    [iso9660]
    uid=
    longnames=true
    -C=UTF-8
    -m=0664
    -M=0775

  3. Пишем /usr/local/etc/PolicyKit/PolicyKit.conf:
    <?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
    
    <!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"
    "http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">
    
    <!-- See the manual page PolicyKit.conf(5) for file format -->
    
    <config version="0.1">
            <define_admin_auth group="operator" />
            <match action="org.freedesktop.hal.storage.mount-removable">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.storage.mount-fixed">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.storage.eject">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.storage.unmount-others">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.power-management.reboot">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.power-management.shutdown">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.power-management.hibernate">
                    <return result="yes" />
            </match>
            <match action="org.freedesktop.hal.power-management.suspend">
                    <return result="yes" />
            </match>
    </config>
    
    
    




  4. Добавляем пользователя в группу operator (редактируем файл /etc/group): operator:*:5:root,username




  5. Перезагружаемся, чтобы удостоверится, что всё заработает.



среда, 3 марта 2010 г.

PF для рабочей станции в локальной сети

Типичный конфиг (файл /etc/pf.conf) для пакетного фильтра рабочей станции:

#PF:2010-03-03
#-------------------
#1/Macros
# Сетевой интерфейс
ext_if="net0"
# Разрешенные типы icmp сообщений
allowed_icmp_types="{ echoreq, unreach }"
# Разрешённые сервисы
# 1. разрешить запросы к серверу NFS и RPCBIND только из локальной сети
# 2. обеспечить запуск с флагами mountd -p 883, rpc.lockd -p 884, rpc.statd -p 885 в rc.conf
# 3. выделенные порты для torrent и http/https/ssh-серверов доступны всем
allowed_lan_tcp_services="{ ssh, www, http, https, ntp, nfsd, rpcbind, 883, 884, 885, 6881:6991, 8080 }"
allowed_lan_udp_services="{ ntp, nfsd, rpcbind, 883, 884, 885, 6881:6991 }"
allowed_wan_tcp_services="{ ssh, www, 6881:6991, 8080, 8081 }"
allowed_wan_udp_services="{ ntp, 5501, 6881:6991 }"
#-------------------
#2/Tables
#-------------------
#3/Options
# ведение лога
#--set loginterface $ext_if
# тем, кто лезет туда, куда не нужно, - бить по рукам
set block-policy drop
# на интерфейсах петли пакеты не фильтровать
set skip on { lo }
# укороченный таймаут для состояния установленного tcp соединения
set timeout { frag 10, tcp.established 24000, icmp.first 10, icmp.error 5 }
#-------------------
#4/Scrub
# Нормализовать все входящие пакеты
scrub in all
#-scrub on $ext_if random-id max-mss 1452 reassemble tcp fragment reassemble
#-------------------
#5/Queueing
#-------------------
#6/Translations
# Перенаправить tcp трафик с порта 80 на порт 8080 для пользовательского Web-сервера
rdr proto tcp from any to any port http -> self port 8080
#-------------------
#7/Filter Rules
# Антиспуффинг
#-antispoof for $ext_if
# Блокировать всё, что не разрешено
block all
#-------------------
# Разрешить входящий ICMP (ping)
pass inet proto icmp all icmp-type $allowed_icmp_types
# Разрешить трафик IGMP для IP-TV
pass quick on $ext_if inet proto igmp from any to any allow-opts
# Разрешающий доступ откуда угодно (ограниченные службы)
pass in quick on $ext_if proto tcp to port $allowed_wan_tcp_services
pass in quick on $ext_if proto udp to port $allowed_wan_udp_services
# Разрешающий доступ из локальной сети (ограниченные службы)
pass in quick on $ext_if proto tcp from $ext_if:network to port $allowed_lan_tcp_services
pass in quick on $ext_if proto udp from $ext_if:network to port $allowed_lan_udp_services
# Разрешить исходящий трафик
pass out all


Проверка синтаксиса


% pfctl -nf /etc/pf.conf


Запуск в работу


% echo 'pf_enable="YES"' >> /etc/rc.conf
% echo 'pf_rules="/etc/pf.conf"' >> /etc/rc.conf
% pfctl -ef /etc/pf.conf


Проверка действующих правил и прочей статистики


% pfctl -sa


Выключение


% pfctl -d


Примечание касательно трансляции IP-TV

При запуске VLC, например, с URL-адресом такого вида udp://@239.1.1.28:5501 воспроизведение начнётся не сразу, а спустя примерно 45 секунд с момента нажатия на кнопку PLAY. Однако переключение на другие каналы будет происходить практически мгновенно.

пятница, 8 января 2010 г.

GNU/Linux не для программистов

В контексте использования Linux НИГДЕ не говорится о зарабатывании денег программированием. Программисты GNU/Linux не могут зарабатывать тем, что они умеют лучше всего!!

И после этого кто-то будет утверждать, что программисты могут заработать денег своими мозгами? Да, только не в GNU/Linux!

GNU/Linux (~10-15% рынка с коммерческим сопровождением) вытеснило другое коммерческое Open Source (примерно 1% рынка с коммерческим сопровождением) на задворки цивилизации и представляет собой настоящий непрошибаемый барьер для других открытых операционных систем и решений. Узурпация майнстрима движения явно неспроста.

Кому это выгодно?

Для Microsoft и Apple решения на базе GNU/Linux — всего лишь писк комара над ухом, не более. Им оно не конкурент В_ПРИНЦИПЕ.
Для Red-Hat, IBM, Oracle решения на базе GNU/Linux — всего лишь платформа для продвижения своих услуг и решений, этакий "паровозик с углём" ("рельсы" стоят денег).

Так какого хрена программистам нужен GNU/Linux, если от написани кода для него получается только FUN? Деньги IBM никогда не подкинет даже в качестве пожертвования, не надейтесь. За какие такие заслуги программисты должны прислушиваться к речам фанатиков от Open Source, если оно GNU/Linux не приносит дохода от непосредственной деятельности программистам? Программисты GNU/Linux не могут зарабатывать тем, что они умеют лучше всего!!

Программисты не идут на GNU/Linux. Они зарабатывают, работая под Windows.

(Кстати, по статистике почти все коммерческие приложения на платформо-независимых языках, таких, как Java, JavaME, да те же ECMAScript и C# с PHP, разрабатываются на Windows, но никак не на Linux. На Linux они тестируются, если находится время и применение.)

Не вкладывайте силы и мозги в GNU. Это не окупается, так как денег не приносит. На поприще GNU может заработать только техподдержка (Вы хотите работать в техподдержке? Сочувствую. Это как эникеем подрабатывать.).

Когда программисты начнут зарабатывать, создавая открытый код, презирая уставки GNU, вот тогда Open Source возродится!

понедельник, 4 января 2010 г.

J2ME на FreeBSD 8.0 [amd64]

Вчера разбирался с J2ME на FreeBSD 8.0 [amd64] чисто из спортивного интереса.

В портах есть Sun WTK 2.2. Он ставится, но не работает под 64-битной Sun JDK 1.6: при запуске эмулятора телефона в KToolbar выводится ошибка работы графической библиотеки.

Проблему решил следующим образом.
Временно снёс нативный 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 автоматически прописаны в скрипты запуска его утилит при инсталляции.

Sun JavaME SDK 2.5.2 похожим образом запустить не удалось — KToolbar при запуске эмулятора пишет об ошибке в распределении памяти shm.

суббота, 3 октября 2009 г.

makeinfo: not found

При очередном обновлении портов заметил странную вещь:
% portupgrade -ap
---> Upgrading 'libtool-2.2.6a' to 'libtool-2.2.6a_1' (devel/libtool22)
---> Building '/usr/ports/devel/libtool22'
===> Cleaning for libtool-2.2.6a_1
===> Extracting for libtool-2.2.6a_1
=> MD5 Checksum OK for libtool-2.2.6a.tar.gz.
=> SHA256 Checksum OK for libtool-2.2.6a.tar.gz.
===> Patching for libtool-2.2.6a_1
===> Applying FreeBSD patches for libtool-2.2.6a_1
/usr/bin/sed -i.bak -e 's|sed gsed|sed|g' /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6/configure
===> Configuring for libtool-2.2.6a_1
## ------------------------- ##
## Configuring libtool 2.2.6 ##
## ------------------------- ##

checking for a BSD-compatible install... /usr/bin/install -c -o root -g wheel
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... libltdl/config/install-sh -c -d
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether subdir libobjs are useable... yes
.....
make all-recursive
test -f doc/.dirstamp || make doc/.dirstamp
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
makeinfo: not found
*** Error code 127

Stop in /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6.
*** Error code 1

Stop in /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6.
*** Error code 1

Stop in /usr/obj/usr/ports/devel/libtool22/work/libtool-2.2.6.
*** Error code 1

Stop in /usr/ports/devel/libtool22.
** 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
** Fix the problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
! devel/libtool22 (libtool-2.2.6a) (unknown build error)


Оказывается, новый мир был собран с опцией WITHOUT_INFO=true в файле /etc/make.conf, а при очередной чистке устаревших библиотек система лишилась доступа к info-файлам установленных приложений.

Решение этой проблемы найдено очень быстро:
1) Убираем вредную строчку из /etc/make.conf (и из /etc/src.conf, если она там была);
2) Собираем и устанавливаем недостающие библиотеки мира
% cd /usr/src/gnu/usr.bin/texinfo/
% make && make depend && make install
===> libtxi (all)
===> makeinfo (all)
===> info (all)
===> infokey (all)
===> install-info (all)
===> texindex (all)
===> doc (all)
===> libtxi (depend)
===> makeinfo (depend)
===> info (depend)
===> infokey (depend)
===> install-info (depend)
===> texindex (depend)
===> doc (depend)
===> libtxi (install)
===> makeinfo (install)
===> info (install)
===> infokey (install)
===> install-info (install)
===> texindex (install)
===> doc (install)
% rehash


После этого апгред порта проходит нормально.

суббота, 5 сентября 2009 г.

FreeBSD: Automount

Известная проблема непривелегированного использования съёмных носителей с неродными файловыми системами с использованиеванием таблиц перекодирования символов (mount_msdosfs: msdosfs_iconv: Operation not permitted) под FreeBSD может быть решена, собственно, самой системой.

Как это есть


Обычный сценарий использования съёмного носителя под операционными системами класса Unix заключается в следующем:
  1. Подсоединить устройство с носителем к внешнему интерфейсу (USB, SAS, FireWire).
  2. Создать каталог-точку монтирования (если каталог не создан заранее).
  3. Смонтировать сменный носитель в каталог-точку монтирования с опциями по перекодированию символов неродной файловой системы в родную файловую систему и обратно.
  4. Поработать с файловой системой носителя.
  5. Демонтировать сменный носитель.
  6. Отсоединить устройство.

Все эти действия пользователь выполняет без какой-либо автоматизации, вручную!

В отличие от вездесущего Linux-демона HAL, работающего в связке с PolicyKit и демоном информационной шины D-Bus, встроенные системные средства FreeBSD позволяют обойтись без нагромождений стороннего софта. Естественно, модуль конвертации кодировок msdosfs_iconv из одной системы в другую и обратно всё же должен быть прописан в автозагрузке в файле /boot/loader.conf (msdosfs_iconv_enable="YES"), либо вкомпилирован в ядро системы (options MSDOSFS_ICONV).

"Всё должно быть просто, но не так чтобы сильно." © кто-то из великих

Преамбула


Только хозяин (owner, создатель) каталога может производить в него монтирование устройств, работать с файловой системой смонтированого устройства как ему вздумается. Демон devd(8) (device state change daemon) работает с системной (root) учётной записью и у него нет понятия "текущий пользователь" (строго говоря, FreeBSD — это многопользовательская ОС, в которой одновременно работают различные процессы под разными учётными записями). В общем, демон devd(8) имеет понятие только об устройствах (классах устройств) виртуальной файловой системы devfs(8), файловой системе вообще и событиях, случающихся в системе, но не имеет понятия, какой пользователь подсоединил или отсоединил девайс.

Фокус-покус


Хорошая новость: FreeBSD больше не падает при отсоединении неотмонтированной флэшки. А именно это будет происходить всякий раз, при использовании следующего описания. Хотя и не страшно.

Пишем в /etc/devd.conf следующие строчки:

# Automount
attach 10 {
match "device-name" "umass[0-9]+";
action "sleep 4 && mkdir -p /media/$device-name && chown -R username /media/$device-name && \
(/sbin/mount_msdosfs -o sync -L ru_RU.UTF-8 -D CP1251 /dev/da0s1 /media/$device-name || \
/sbin/mount_msdosfs -o sync -L ru_RU.UTF-8 -D CP1251 /dev/da0 /media/$device-name)";
};
detach 10 {
match "device-name" "umass[0-9]+";
action "/sbin/umount -f /media/$device-name && rm -r /media/$device-name";
};

Запускаем демон состояния виртуальной файловой системы устройств:
% echo 'devd_enable="YES"' >> /etc/rc.conf
% /etc/rc.d/devd start

Или рестартуем его, если он работает (чтобы он перечитал свой конфиг):
% /etc/rc.d/devd restart
Stopping devd.
Starting devd.

На события attach/detach демон devd(8) реагирует следующим образом: определяет, какой тип устройства подключается/отключается (здесь: umassНомерустройства) и совершает соответствующее действие (action). Из описанных действий нетрудно понять, каким образом ведётся работа с флэшкой.

При подсоединении съёмного носителя (флэшки) будет создан каталог /media/umass0, носитель будет подвергнут проверке fsck и, если никаких ошибок не найдено, созданный каталог изменит владельца на username, и в этот каталог смонтируется устройство /dev/da0s1 (первый слайс накопителя с файловой системой FAT). После этого пользователь, имеющий учётную запись username, сможет работать с устройством как с собственным файловым хранилищем.

Так как устройство работает в синхронном режиме, то есть данные на носитель пишутся и читаются последовательно, без отложенных операций, то ручное отмонтирование не требуется — по завершении всех операций достаточно просто отсоединить устройство — это событие заставит демон devd(8) выполнить действия по очистке точки монтирования, как в виртуальной файловой системе devfs (демонтирует каталог /dev/da0s1), так и в реальной файловой системе (удалит временный каталог /media/umass0).

Три ложечки дёгтя


  1. Необходимость в использовании имени учётной записи пользователя (username), к которому привязывается точка монтирования;
  2. Фиксированное название раздела носителя (da0s1) не позволит смонтировать в автоматическом режиме другие носители;
  3. Фиксированный тип файловой системы (msdosfs) на монтируемом носителе не позволяет правилом attach смонтировать носитель, с тем же названием раздела, но с отличной от FAT ФС.


P.S.


Я имею представление о портах, позволяющих обходить проблему автомонтирования флэшек с разных сторон: sysutils/kiconvtool и sysutils/automounter. Но лично у меня первый порт не заработал (ошибка осталась), а второй несколько избыточен по функциональности (надстройка над amd(8)).

четверг, 13 августа 2009 г.

Diablo JDK 1.6: ошибка в VM

Информация о системе


> uname -rsm
FreeBSD 8.0-BETA2 amd64
Дерево портов обновлено.

Инсталляция и неудачный запуск


% portinstall -p java/diablo-jdk16
...
===> Registering installation for diablo-jdk-1.6.0.07.02_5
...
===> Building package for diablo-jdk-1.6.0.07.02_5
...
===> Cleaning for diablo-jdk-1.6.0.07.02_5
---> Cleaning out obsolete shared libraries
[Updating the pkgdb in /var/db/pkg ... - 444 packages found (-0 +1) . done]
% rehash
% java -version
Error occurred during initialization of VM
Unable to load ZIP library: /usr/local/diablo-jdk1.6.0/jre/lib/amd64/libzip.so
%

Решение проблемы

% echo "libz.so.4 libz.so.5 #for diablo-jdk1.6" >> /etc/libmap.conf
% rehash
% java -version
Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02)
Diablo Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)
%

среда, 12 августа 2009 г.

Метки GPT для ZFS

Нужно создать ZFS пул с зеркалом из носителей, смонтированных по меткам GPT, чтобы не зависеть от имён устройств и номеров портов контроллёров.

Исходное состояние


Зеркало как таковое отсутствует:

% zpool status
pool: amd64rio
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
amd64rio ONLINE 0 0 0
ad6p3 ONLINE 0 0 0

errors: No known data errors

Включим в пул ещё один носитель (GPT-раздел устройства ad10) — разметка разделов второго винчестера аналогична первому, так что здесь последовательность команд не приводится.

Создание зеркала в пуле


% zpool attach amd64rio /dev/ad6p3 /dev/ad10p3
% zpool scrub amd64rio
% zpool status
pool: amd64rio
state: ONLINE
scrub: scrub in progress for 0h0m, 0,00% done, 131h10m to go
config:

NAME STATE READ WRITE CKSUM
amd64rio ONLINE 0 0 0
mirror ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0

errors: No known data errors

Состояние разметки устройств


Подготовительные операции для перехода на новую схему:

% echo 'geom_label_load="YES"' >> /boot/loader.conf
% shutdown -r now
% glabel list
Geom name: ad6p1
Providers:
1. Name: gpt/rio_boot
Mediasize: 131072 (128K)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 256
length: 131072
index: 0
Consumers:
1. Name: ad6p1
Mediasize: 131072 (128K)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad6p1
Providers:
1. Name: gptid/6e56389f-81a6-11de-8aa6-02508d92a2eb
Mediasize: 131072 (128K)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 256
length: 131072
index: 0
Consumers:
1. Name: ad6p1
Mediasize: 131072 (128K)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad6p2
Providers:
1. Name: gpt/rio_swap
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 4194304
length: 2147483648
index: 0
Consumers:
1. Name: ad6p2
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad6p2
Providers:
1. Name: gptid/e0fa02b3-81a6-11de-8aa6-02508d92a2eb
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 4194304
length: 2147483648
index: 0
Consumers:
1. Name: ad6p2
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad6p3
Providers:
1. Name: gpt/rio_zfs
Mediasize: 317921280000 (296G)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 620940000
length: 317921280000
index: 0
Consumers:
1. Name: ad6p3
Mediasize: 317921280000 (296G)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad6p3
Providers:
1. Name: gptid/1f26a2d6-81a7-11de-8aa6-02508d92a2eb
Mediasize: 317921280000 (296G)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 620940000
length: 317921280000
index: 0
Consumers:
1. Name: ad6p3
Mediasize: 317921280000 (296G)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad10p1
Providers:
1. Name: gptid/a01d172c-81a6-11de-8aa6-02508d92a2eb
Mediasize: 131072 (128K)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 256
length: 131072
index: 0
Consumers:
1. Name: ad10p1
Mediasize: 131072 (128K)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad10p2
Providers:
1. Name: gptid/e2aef92e-81a6-11de-8aa6-02508d92a2eb
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 4194304
length: 2147483648
index: 0
Consumers:
1. Name: ad10p2
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Mode: r0w0e0

Geom name: ad10p3
Providers:
1. Name: gptid/20db981e-81a7-11de-8aa6-02508d92a2eb
Mediasize: 317921280000 (296G)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 620940000
length: 317921280000
index: 0
Consumers:
1. Name: ad10p3
Mediasize: 317921280000 (296G)
Sectorsize: 512
Mode: r0w0e0

Процесс отвязки носителей от "устройств"


1. Вывод из зеркала одного носителя и его полная очистка "для чистоты эксперимента"

% zpool detach amd64rio ad10p3
% zpool status
pool: amd64rio
state: ONLINE
scrub: scrub in progress for 0h0m, 0,00% done, 69h45m to go
config:

NAME STATE READ WRITE CKSUM
amd64rio ONLINE 0 0 0
ad6p3 ONLINE 0 0 0

errors: No known data errors
% dd if=/dev/zero of=/dev/ad10p3 bs=100m
dd: /dev/ad10p3: short write on character device
dd: /dev/ad10p3: end of device
3032+0 records in
3031+1 records out
317921280000 bytes transferred in 5836.782166 secs (54468587 bytes/sec)

2. Задание метки

% gpart modify -i 3 -l rio_zfs2 ad10
ad10p3 modified
% shutdown -r now

3. Внесение носителя в зеркало

% zpool attach amd64rio ad6p3 gpt/rio_zfs2
% zpool status
pool: amd64rio
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h3m, 17,22% done, 0h17m to go
config:

NAME STATE READ WRITE CKSUM
amd64rio ONLINE 0 0 0
mirror ONLINE 0 0 0
ad6p3 ONLINE 0 0 0 7,80M resilvered
gpt/rio_zfs2 ONLINE 0 0 0 9,08G resilvered

errors: No known data errors

4. После окончания репликации проделываем аналогичную операцию с другим носителем

% zpool detach amd64rio ad6p3
% zpool status
pool: amd64rio
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
amd64rio ONLINE 0 0 0
gpt/rio_zfs2 ONLINE 0 0 0

errors: No known data errors
% gpart modify -i 3 -l rio_zfs1 ad6
ad6p3 modified
% dd if=/dev/zero of=/dev/ad6p3 bs=100m
dd: /dev/ad6p3: short write on character device
dd: /dev/ad6p3: end of device
3032+0 records in
3031+1 records out
317921280000 bytes transferred in 5950.955982 secs (53423564 bytes/sec)
% shutdown -r now
% zpool attach amd64rio gpt/rio_zfs2 gpt/rio_zfs1
% zpool status
pool: amd64rio
state: ONLINE
scrub: resilver completed after 0h21m with 0 errors on Wed Aug 12 17:44:06 2009
config:

NAME STATE READ WRITE CKSUM
amd64rio ONLINE 0 0 0
mirror ONLINE 0 0 0
gpt/rio_zfs2 ONLINE 0 0 0 123M resilvered
gpt/rio_zfs1 ONLINE 0 0 0 52,7G resilvered

errors: No known data errors


Это всё.