Установка FreeBSD 9 на ZFS.
1) Загрузите компьютер (сервер) с использованием DVD диска FreeBSD 9 или USB Flash и выберите пункт загрузочного меню «Live CD».
2) На католог /tmp установите права разрешающие запись в него (777) и перемонтируем его.
chmod 777 /tmp
umount /dev/md1
mdmfs -s 512M md1 /tmp
3) Создаём необходимые ZFS разделы диска и добавляем загрузочную запись.
a) Для простой установки:
gpart create -s gpt ada0
gpart add -b 34 -s 64k -t freebsd-boot ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
b) Если осуществляем зеркальную установку то повторяем предыдущее действие и для второго диска:
gpart create -s gpt ada1
gpart add -b 34 -s 64k -t freebsd-boot ada1
gpart add -t freebsd-zfs -l disk1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
4) Создаём ZFS пул.
a) Для простой установки:
zpool create zroot /dev/gpt/disk0
b) Для зеркала:
zpool create zroot mirror /dev/gpt/disk0 /dev/gpt/disk1
5) Устанавливаем опции bootfs, контрольные суммы и точки монтирования. (На этом этапе игнорируем любые сообщения кроме ошибок)
zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 zroot
zfs set mountpoint=/mnt zroot
6) Экспортируем пулл zroot.cache в каталог /tmp.
zpool export zroot
zpool import -o cachefile=/tmp/zpool.cache zroot
7)Создаём соответствующие файловые системы (Если вы опытны в работе на ZFS то можете внести свои коррективы в обратном случае лучше оставить как есть):
zfs create zroot/usr
zfs create zroot/usr/home
zfs create zroot/var
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
8) Создаём swap раздел и отключаем проверку контрольных сумм. В данном случае создаётся SWAP раздел размеров 4GB.
zfs create -V 4G zroot/swap
zfs set org.freebsd:swap=on zroot/swap
zfs set checksum=off zroot/swap
9) Создаём symlink на каталог /home и выставляем необходимые права доступа.
chmod 1777 /mnt/tmp
cd /mnt ; ln -s usr/home home
chmod 1777 /mnt/var/tmp
10) Распаковываем файлы FreeBSD 9 (по факту и есть установка).
sh
cd /usr/freebsd-dist
export DESTDIR=/mnt
for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
11) Копируем zpool.cache (Очень важно, не пропустите этот шаг)
cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
12) Редактируем файл настроек /etc/rc.conf, /boot/loader.conf и создаём пустой /etc/fstab (если не сделать то нас пошлют на этапе загрузки системы).
echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
touch /mnt/etc/fstab
13) Делаем последние штрихи.
zfs set readonly=on zroot/var/empty
zfs umount -a
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var
14) При умирании винта (если использовалось зеркало):
1) Инициализируем новый винт, как в пункте 3b
2) zpool online zroot ada1p2; zpool replace zroot ada1p2
3) после перестроения зеркала: zpool clear zroot
Проблема с кривым системным Times.
~$ sudo rm /etc/fonts/conf.d/30-urw-aliases.conf
~$ sudo rm /etc/fonts/conf.d/30-metric-aliases.conf
в ~/.fonts.conf
<fontconfig>
<match target=»pattern»>
<test qual=»any» name=»family»>
<string>Times</string>
</test>
<edit name=»family» mode=»assign»>
<string>Times New Roman</string>
</edit>
</match>
</fontconfig>
Как убрать tearing в mplayer.
$ mplayer -v file.avi
…
using Xvideo port 97 for hw scaling
теперь запускаем xvinfo:
Adaptor #0: «Intel(R) Textured Video» port base: 97
Adaptor #1: «Intel(R) Video Overlay» port base: 113
Т.е mplayer пользует не тот порт, осталось это поправить:
mplayer -vo xv:port=113 file.avi
Как посмотреть кто держит устройство.
rabid rabid # lsof /dev/snd/pcmC0D0p
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python2.5 11075 rabid 62u CHR 116,5 0t0 12653 /dev/snd/pcmC0D0p
python2.5 11089 rabid 62u CHR 116,5 0t0 12653 /dev/snd/pcmC0D0p
Добавления в debian скрипта в автозагрузку.
В начале скрипта:
### BEGIN INIT INFO
# Provides: defaultdaemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
После этого
update-rc.d имя defaults
Для удаления скрипта из автозагрузки
update-rc.d -f имя remove
debian+lighttpd+postgres+request tracker
Потребовалось прикрутить багтрекер Request Tracker к lighttpd.
Приступим.
Устанавливаем lighttpd:
apt-get install lighttpd
Request Tracker лично я ставил руками:
Качаем:
wget http://download.bestpractical.com/pub/rt/release/rt-3.8.1.tar.gz
Далее:
tar xzvf rt-3.8.1.tar.gz -C /tmp; cd /tmp/rt-3.8.1
По умолчанию трекер ставится в каталог /opt/rt3, использует базу в mysql и работает от пользователя www. Меня это не устраивает, так как у меня postgres, да и lighttpd работает от www-data, поэтому:
./configure --prefix=/usr/share/rt3 --with-db-type=Pg --with-db-port=5432
--with-db-dba=superpg --with-web-user=www-data --with-web-group=www-data
Где superpg – пользователь postgres с правами root.
Проверяем наличие необходимых перловых модулей:
make testdeps
У меня не оказалось почти всех, и потому:
make fixdeps
После установки модулей, проверяем еще раз с помощью testdeps и если все хорошо:
make install
Осталось только создать базу в postgres:
make initialize-database
Отвечаем на вопросы скрипта и вуаля, база создана.
Редактируем /usr/share/rt3/etc/RT_SiteConfig.pm, заменив example.com на ваш домен:
Set($rtname,"example.com");
Set($Organization,"example.com");
Set($CorrespondAddress,"support@example.com");
Set($CommentAddress,"support-comment@example.com");
Set($Timezone,"Europe/Moscow");
Set($WebPath,"/rt");
Set($WebBaseURL,"http://example.com");
1;
Теперь переходим к прикручиванию трекера к lighttpd через fastcgi. Сразу оговорюсь, в поставке RT есть готовый хэндлер mason_handler.fcgi, но у меня с ним RT работать отказывался. Посему пришлось использовать модифицированную версию, взятую из вики. Вот она:
#!/usr/bin/perl
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
#
# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
#
package RT::Mason;
use strict;
use vars '$Handler';
use File::Basename;
require (dirname(__FILE__) . '/webmux.pl');
# Enter CGI::Fast mode, which should also work as a vanilla CGI script.
require CGI::Fast;
RT::Init();
while ( my $cgi = CGI::Fast->new ) {
# the whole point of fastcgi requires the env to get reset here..
# So we must squash it again
$ENV{'PATH'} = '/bin:/usr/bin';
$ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'};
$ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'};
$ENV{'ENV'} = '' if defined $ENV{'ENV'};
$ENV{'IFS'} = '' if defined $ENV{'IFS'};
Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase();
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
&& ( $Handler->interp->comp_exists( $cgi->path_info . "/index.html" ) ) )
{$cgi->path_info( $cgi->path_info . "/index.html" );}
eval { $Handler->handle_cgi_object($cgi); };
if ($@) {
$RT::Logger->crit($@);
}
RT::Interface::Web::Handler->CleanupRequest();
}
1;
Проще всего заменить этим содержимое исходного mason_handler.fcgi, который располагается в каталоге /usr/share/rt3/bin в моем случае.
Добавим кое-какие костыли
Для этого в /etc/lighttpd/lighttpd.conf:
откоментируем
"mod_rewrite", "mod_redirect", "mod_setenv",
и добавим три строчки перед server.document-root :
fastcgi.map-extensions = ( ".css" => ".html", ".js" => ".html", "/" => ".html",
"mail-gateway" => ".html", "Search/Chart" => ".html", "Search/Results.rdf" =>
".html", "Search/Results.tsv" => ".html" )
setenv.add-environment = ("SCRIPT_NAME" => "/",)
url.rewrite-once = ("^/(?!NoAuth/images/)(.*)" => "/$1","^(.*)/
Ticket/Attachment/(.*)" => "/$1/Ticket/Attachment/$2/")
Включим поддержку fastcgi в lighttpd:
ln -s /etc/lighttpd/conf-available/10-fastcgi.conf /etc/lighttpd/conf-enabled/
И добавим обработку файлов html, приведя /etc/lighttpd/conf-available/10-fastcgi.conf к такому виду:
server.modules += ( "mod_fastcgi" )
## Start an FastCGI server for php (needs the php5-cgi package)
fastcgi.server = ( ".php" =>
((
"bin-path" => "/opt/php/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)),
".html" =>
((
"socket" => "/tmp/rt-fcgi.socket",
"bin-path" => "/usr/share/rt3/bin/mason_handler.fcgi",
"check-local" => "disable",
))
)
Пути естественно мои, подправьте если не устраивает
Делаем симлинк:
ln -s /usr/share/rt3/share/html /var/www/rt
Перезапускаем lighttpd:
/etc/init.d/lighttpd restart
Входим на трекер броузером: http://example.com/rt
Логин: root, пароль: password