Путь свободен!

понедельник, 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 приобретает законченный вид: