воскресенье, 26 февраля 2012 г.

Установка Trac на NetBSD 5.1.2

В этой статье я попытаюсь описать как можно поставить программу Trac на NetBSD.

Почему именно NetBSD? Мне всегда хотелось познакомиться поближе с этой ОС. А тут у меня как раз подвернулась подходящая задача. NetBSD 5.1.2 ставится на VirtualBox стандартным образом (смотри руководство по установке NetBSD). Кроме установки trac нам понадобится установить apache, subversion.
После установки NetBSD рекомендуется прочитать man afterboot.

Проведём базовую настройку NetBSD.
Редактируем файл /etc/rc.conf.
Добавим строчки
dhclient=YES
hostname=bsdstation
defaultroute=10.1.240.1
rtclocaltime=YES


Добавим пользователя с помощью команды
useradd -m -G wheel duglas.
Установим пароль с помощью команды
passwd duglas

Пароль password.
Выполним команду sh /etc/rc.d/rtclocaltime restart.

Выполним команды
# dhclient
# PKG_PATH=http://nyftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.2_2011Q4/All
# export PKG_PATH
Пропишем 2 строчки выше по установке переменной PKG_PATH в файле .profile.


Установим bash.
pkg_add -v bash
Команда запуска оболочки находится по пути /usr/pkg/bin/bash.
Список доступных оболочек хранится по пути /etc/shells.
Мы поставили bash, теперь кастомизируем приглашение.
Настройки оболочки хранятся в домашнем каталоге в файле profile.
Выполним команду vi .profile.
Bash считывает переменную PS1.
PS1 поддерживает следующий формат:
a
Makes the computer "beep".
\d
Displays the date in "Weekday Month Date" format.
\h
Displays short hostname.
\H
Displays complete hostname including domain.
\w
Displays current working directory.
\n
Makes the prompt move to a new line.
\s
Displays the name of the shell, e.g. BASH
\t
Displays the current time in 24 hour HH:MM:SS format.
\T
Displays the current time in 12 hour HH:MM:SS format.
\@
Displays the current time in 12 hour am/pm format.
\u
Displays your username.
\!
Displays the number of commands in the history file (.bash_history).
\#
Displays the number of commands you have executed in your current session.

Укажем строчку:
PS1="\t \u@\h:\w$ "; export PS1

Выйдем и войдём в систему заново.

Список команд для работы с пакетами:
pkg_admin
pkg_create
pkg_delete
pkg_info
pkg_install.conf
pkgsrc
pkg_add

Установка Trac.
Установим pkg_add -v py26-sphinx.
Установим pkg_add -v py26-pytz.
Установим pkg_add -v trac.
При такой установке trac тянет за собой slite3.

Создадим пользователя svn с помощью команды useradd -m  svn.
С помощью команды password зададим пароль password для пользователя svn.
Создадим группу groupadd svn_user.
Добавим пользователя svn в группу svn_user usermod -G svn_user svn.

Перейдём в учётку svn.
Выполним команду svnadmin create repository для создания репозитория.
Выполним команду chgrp -R svn_user repository.
Настроим сервис на автоматический запуск.
Откроем файл /etc/inetd.conf.
Добавим строку:
svn stream tcp nowait svn /usr/pkg/bin/svnserve svnserve –i –r /home/svn/repository

Перейдём в каталог /home/svn/repository.
Отредактируем файл ./conf/passwd.
Добавим в нём запись svn = svn, то есть создадим пользователя svn  с паролем svn.
Отредактируем файл ./conf/svnserve.conf.
В раздел [general] добавим запись svn = write.
В этом же файле раскомментируем строку password-db = passwd.

Перегрузим машину и проверим, что на машине доступен порт 3690.
Выполним команду trac-admin /home/svn/tracproject initenv
Имя проекта укажем MyTestProject.
Строка для подключения к базе данных: sqlite:db/trac.db.
Файл настройки trac находится в файле /home/svn/tracproject/conf/trac.ini.
Для тестирования можно запустить trac командой tracd --port 8000 /home/svn/tracproject.
http://10.1.240.107:8000/tracproject
Базовая установка готова!

Установка системы pkgsrc.
Выполним команду от root:
$ cd /usr && cvs -q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2011Q4 -P pkgsrc

Система пакетов установлена :-)

Теперь установим веб-сервер для работы с trac.
чтобы установить apache:
# cd /usr/pkgsrc/www/apache22
# make install clean clean-depends

Чтобы запускать Apache при запуске выполним,
# cp /usr/pkg/share/examples/rc.d/apache /etc/rc.d
# echo 'apache=YES' >> /etc/rc.conf

Чтобы запустить Apache,
# apachectl start

Размещение httpd.conf по умолчанию
/usr/pkg/etc/httpd
Размещение DocumentRoot по умолчанию
/usr/pkg/share/httpd/htdocs

Установим mod_wsgi:
cd /usr/pkgsrc/www/ap2-wsgi
make install clean clean-depends

Отредактируем файл /usr/pkg/etc/httpd/httpd.conf.
Добавим строку LoadModule wsgi_module lib/httpd/mod_wsgi.so.
Сделаем рестарт apache:
apachectl restart.
Наш сервер не стартует.
В файле httpd.conf закомментируем строку LoadModule unique_id_module lib/httpd/mod_unique_id.so и рестартуем apache.
Теперь введём в браузере http://10.1.240.107/ и увидим, что нам открылась тестовая страница.
Необходимо проверить работоспособность связки apache+mod_wsgi.

Действия будем проводить от имени svn.
Создадим файлик mytest.wsgi со следующим содержимым и поместим его в /home/svn:
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Добавим строчку WSGIScriptAlias /mytest /home/svn/wsgi/mytest.wsgi.
Также  перед введённой выше строкой укажем директиву, чтобы apache мог иметь доступ к этому каталогу
<Directory /home/svn/wsgi>
Order allow,deny
Allow from all
</Directory>

Рестартуем apache apachectl restart.
Введём в браузере http://10.1.240.107/mytest и в ответ должно отобразиться сообщение 'Hello World!'.

Это означает, что связка apache+mos_wsgi работает корректно.

Сгенерируем скрипт для запуска trac.
Войдём в учётку svn.
Запустим в домашнем каталоге команду trac-admin tracproject deploy tracdeploy.
Скрипт на питоне находится по пути /home/svn/tracdeploy/cgi-bin/trac.wsgi.
настроим httpd.conf.
Добавим в httpf.conf следующие строки:
WSGIScriptAlias /trac /home/svn/tracdeploy/cgi-bin/trac.wsgi

<Directory /home/svn/tracdeploy>
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

Крайне рекомендуется сделать отображение статических ресурсов напрямую apache.
Редактируем файл httpd.conf.

Добавим следующие строки:
Alias /trac/chrome/common /home/svn/tracdeploy/htdocs/common
Alias /trac/chrome/site /home/svn/tracdeploy/htdocs/site.
Строки необходимо добавить до тега directory к каталогу tracdeploy.

Так как apache выполняется от имени пользователя www, необходимо настроить права доступа к каталогам tracproject,tracdeploy. Для этого добавим пользователя svn в группу www с помощью команды usermod -G www svn.
Выполним в домашнем каталоге www команды chgrp -R www tracdeploy и chgrp -R www tracproject.
настроим Basic аутентификацию.
Создадим от имени svn файл с паролями:
htpasswd -c trac.htpasswd admin
Пароль для пользователя admin - password.
Добавим в файл httpd.conf информацию о файле с паролями.

<Location "/trac/login">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /home/svn/trac.htpasswd
  Require valid-user
</Location>

Дадим пользователю admin права на администрирование.
Выполним от имени svn команду:
trac-admin tracproject permission add admin TRAC_ADMIN.
Выполним команду в домашнем каталоге svn:
chmod -R g+w tracdeploy tracproject.
Рестартуем apache: apachectl restart.
далее откроем адрес http://10.1.240.107/trac и увидим сообщение:
Error

TracError: The Trac Environment needs to be upgraded.

Run "trac-admin /home/svn/tracproject upgrade"
Выполним приведённую выше команду от имени svn и рестартуем apache.
Опять та же ошибка.
Перейдём в каталог /home/svn/tracproject/conf.
Выполним команду chmod g+r trac.ini.
Снова рестартуем apache.
Откроем http://10.1.240.107/trac и перед нами наконец-таки страничка trac.
Нажмём на ссылку Login.
Введём логин admin пароль password.
Можем продолжить установку.
нужно интегрировать trac и svn.