Установка и использование SVN

Установка и использование SVN

Задача: установить SVN для разворачивания проектов на Ruby on Rails

Система: FreeBSD 6.3

Subversion version 1.6.2

Вначале понадобится переустановить Apache с поддержкой BDB. Лучше всего сделать так:
cd /usr/ports/www/apache22/
make deinstall clean
make config (выбираем BDB)
make install clean

Устанавливаем саму систему:
cd /usr/ports/devel/subversion
make install clean

Отмечаем пункты MOD_DAV_SVN и BDB.

В /usr/local/etc/apache22/httpd.conf должны появится следующие строчки:
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so

Создаем репозиторий

Каталог для репозитория
mkdir -p /home/svn/repos

Каталог для вашего проекта
svnadmin create /home/svn/repos/_project_/

_project_ — заменить на имя вашего проекта (каталога).

Импортируем проект в репозиторий
cd /home/_project_/
svn import ./ file:///home/svn/repos/_project_ —message ‘Initial repository layout’

Установим права веб-сервера
chown -R www:www /home/svn/

Добавить в /usr/local/etc/apache22/httpd.conf
<location /svn>
DAV svn

# разрешает выдавать перечень всех доступных хранилищ в папке SVNParentPath
SVNListParentPath on
SVNParentPath /home/svn/repos
SVNPathAuthz off

# включения базовой аутентификации, т.е. имя_пользователя/пароль
AuthType Basic
AuthName «Subversion repository»
AuthUserFile /home/svn/svn-auth-file

# предписывает, что только пользователям, предоставившим правильные имя_пользователя/пароль,
# будет разрешён доступ к URL
Require valid-user
</location>

Теперь, создадим пользователей для доступа к вашему проекту
htpasswd -cmb /home/svn/svn-auth-file _user_ _password_

и добавляем пользователей, так как ключ “-c” указывает на создание файла
htpasswd -mb /home/svn/svn-auth-file _user_ _password_

Где _user_ и _password_ — имя и пароль соответственно.

Разворачиваем проект в нужной папке:
svn checkout http://_domain_/svn/_project_

Действия в Windows

Выше описанные действия носят общий характер. Теперь посмотрим как нужно действовать при разворачивании реального проекта.
Скачиваем клиент TortoiseSVN — http://tortoisesvn.net/downloads. После установки в контекстном меню появится специальный пункт для работы с SVN.

При первом размещении репозитория действия такие:

1. Создаем репозиторий на сервере FreeBSD

Каталог для репозитория
mkdir -p /home/svn/repos

Каталог для вашего проекта
svnadmin create /home/svn/repos/_project_/

_project_ — заменить на имя вашего проекта (каталога).

Установим права веб-сервера
chown -R www:www /home/svn/

2. Импортируем проект в репозиторий

На windows машине щелкаем ПКМ на папке нужного проекта, выбираем пункт «Import» и вводим URL созданного репозитория и пароль доступа.

3. Извлекаем проект из репозитория в нужный каталог на сервере:

Заходим в папку, где будет размещен проект и извлекаем его
svn checkout http://_domain_/svn/_project_

4. Извлекаем проект на windows машину командой из контекстного меню checkout. Это нужно для нормальной работы с репозиторием. Теперь все изменения нужно вносить только в этой папке.

5. Когда произошли дополнения в проекте на windows машине делаем команду commit и все изменения уходят в репозиторий на сервер. На сервере заходим в каталог проекта и делаем команду svn up. Теперь изменения скачались из репозитория в папку проекта на сервере.

Ссылки:
http://adw0rd.ru/2009/freebsd-subversion/

Использование Pfstat

Устанавливам pfstat:

cd /usr/ports/sysutils/pfstat
make install clean

Создаем конфигурационный файл:

cd /usr/local/etc
touch pfstat.conf

pfstat.conf

collect 1 = interface «xl0» pass bytes in ipv4 diff
collect 2 = interface «xl0» pass bytes out ipv4 diff
image «/usr/local/www/apache22/data/pf_in.jpg»
{
from 24 hours to now
width 980 height 500
left
graph 1 bps «in» «bits/s» color 0 192 0 filled
right
graph 2 bps «out» «bits/s» color 0 0 255
}

Пишим задания для cron:
*/2 * * * * root /usr/local/bin/pfstat -q ## «снимать» данные
*/10 * * * * root /usr/local/bin/pfstat -p ## рисовать новую картинку

Картинку смотрим по адресу — http://IP_сервера/pf_in.jpg

Ссылки:
http://www.benzedrine.cx/pfstat.html

Настройка Apache (mod_rails) для подключения форума на phpBB

При переходе моего проекта orsk-net.ru с PHP на Ruby on Rails (Rails 2.2 + mod_rails) возникла одна сложность. На сайте работал форум доступный по адресу http://orsk-net.ru/forum и мне хотелось, чтобы он был доступен по тому же адресу. Решается эта задача следующим образом: в описании виртуального хоста в Apache нужно добавить секцию Location, где указывается директория в папке public нашего проекта, которая не должна использовать mod_rails. Так выглядит мой конфиг:

<VirtualHost *:80>
ServerAdmin admin@orsk-net.ru
ServerName orsk-net.ru
DocumentRoot «/usr/home/user/public_html/rails/public»
<Location /forum>
PassengerEnabled off
AllowOverride all
</Location>
ErrorLog «/var/log/error_log_user»
CustomLog «/var/log/access_log_user» common
</VirtualHost>

В папке public нужно сделать символическую ссылку на папку форума:
ln -s /usr/home/user/public_html/forum /usr/home/user/public_html/rails/public

С этими настройками всё заработало на Ура!

Установка DHCP под FreeBSD 7.1

Устанавливаем порт DHCP-сервера:

# cd /usr/ports/net/isc-dhcp30-server
# make install clean

Конфигурацию можно оставить по умолчанию.

В файл /etc/rc.conf вносим следующие строчки:

dhcpd_enable=»YES»
# Т.к. на сервере две сетевых платы, то указываем на каком интерфейсе будет работать DHCP сервер
dhcpd_ifaces=»xl0″

Правим /usr/local/etc/dhcpd.conf под свои запросы:

option domain-name «gorod.vera.local»;
option domain-name-servers ns.gorod.vera.local;

default-lease-time 600;
max-lease-time 7200;

ddns-update-style ad-hoc;

log-facility local7;

subnet 10.11.0.0 netmask 255.255.255.0 {
range 10.11.0.100 10.11.0.120;
option routers 10.11.0.201;
}

Установка BIND 9.6 под FreeBSD 7.1

Устанавливаем BIND из портов. На момент написания статьи последняя версия была 9.6.0-P1.

# cd /usr/ports/dns/bind96
# make install clean

Отмечаем опцию «REPLACE_BASE», чтобы заменить базовый BIND

Добавляем в файл /etc/rc.conf следующие строчки:

named_enable=»YES»

В файле named.conf дополняем адреса с которых будут приниматься запросы DNS:

listen-on { 10.10.0.0/16; 127.0.0.1; };

Там же прописываем адреса провайдера:

forwarders { 213.135.97.131; }

/etc/resolv.conf должен выглядить так:

nameserver 127.0.0.1

Перезагружаемся и смотрим логи на наличие ошибок — /var/log/messages. В дальнейшем перезагружать сервер целиком не потребуется. Для рестарта сервиса named применяется одна из команд:

# /etc/rc.d/named restart

# killall -HUP named

Если перезагрузка вызывает ошибку, к примеру такую:

# /etc/rc.d/named restart
Stopping named: rndc failed, trying killall: .
Starting named.

Отключаем файрволл и запускам команду снова. Если команда сработала, то меняем правила. Для PF нужно добавить строчку:
set skip on lo0

В предшествующих версиях BIND для создания реверсной зоны нужно было запускать скрипт /var/named/etc/namedb/make-localhost В версии bind 9.6 такого скрипта уже нет. Имеются два файла localhost-forward.db и localhost-reverse.db. Для создания файла зоны нужно скопировать localhost-forward.db под новым имененем зоны отредактировать:

# cp localhost-forward.db 6mk.lan

Работа с rndc

Включаем возможность работы с утилитой rndc:

# rndc-confgen > /etc/namedb/rndc.conf

копируем строки из rndc.conf в конец файла named.conf и снимаем с них комментарии.

Примеры конфигов

6mk.lan

$TTL 3600 ; 1 hour
6mk.lan. IN SOA ns.6mk.lan. admin.6mk.lan. (
2008010301 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)

; DNS Servers
IN NS ns.6mk.lan.
IN A 10.10.38.50

; Machine Names
ns IN A 10.10.38.50

; Aliases
www IN CNAME @

38.10.10.in-addr.arpa

; $FreeBSD: src/etc/namedb/master/localhost-reverse.db,v 1.1.8.1 2008/11/25 02:59:29 kensmith Exp $

$TTL 3h
@ SOA ns.6mk.lan. admin.6mk.lan. 42 1d 12h 1w 3h
; Serial, Refresh, Retry, Expire, Neg. cache TTL

IN NS ns.6mk.lan.

50 IN PTR ns.6mk.lan.
50 IN PTR 6mk.lan.

named.conf

options {
// Relative to the chroot directory, if any
directory «/etc/namedb»;
pid-file «/var/run/named/pid»;
dump-file «/var/dump/named_dump.db»;
statistics-file «/var/stats/named.stats»;

listen-on { 127.0.0.1; 10.10.0.0/16; 10.11.0.0/24; };

disable-empty-zone «255.255.255.255.IN-ADDR.ARPA»;

forwarders {
127.0.0.1; 213.135.97.131;
};
};

zone «.» { type hint; file «named.root»; };

zone «6mk.lan» {
type master;
file «master/6mk.lan»;
};

zone «38.10.10.in-addr.arpa» {
type master;
file «master/38.10.10.in-addr.arpa»;
};

// RFC 1912
zone «localhost» { type master; file «master/localhost-forward.db»; };
zone «127.in-addr.arpa» { type master; file «master/localhost-reverse.db»; };
zone «255.in-addr.arpa» { type master; file «master/empty.db»; };

# Use with the following in named.conf, adjusting the allow list as needed:
key «rndc-key» {
algorithm hmac-md5;
secret «zYt7cPSrHnIEwBagJtcIHg==»;
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { «rndc-key»; };
};
# End of named.conf

Скрипт восстановления связи при разрыве соединения PPPoE

Модемы на моих серверах соединены по типу bridge. К сожалению это повлекло за собой определенные проблемы, касающиеся разрыва связи. По идее соединение должно восстанавливаться само, но при длительных разрывах это не происходит. Поэтому пришлось создать скрипт и поставить его в крон.
Судя по логам скрипт отрабатывает свою задачу как надо. Но есть и непонятные пока вещи, к примеру, иногда связь пропадает полностью. Причем перезагрузка модема и новый запуск данного скрипта связь не восстанавливает, помогает только перезагрузка ПК целиком.

Скрипт расположен по адресу: /usr/home/user/scripts/ppp-restart

ppp-restart

#!/bin/sh -xv

pings=`/sbin/ping -c 3 213.135.97.131 | grep -c «64 bytes»`
if [ $pings -gt 0 ]
then
:
else
/usr/bin/killall ppp
kill -9 `cat /var/run/tun0.pid`
sleep 5
/usr/sbin/ppp -ddial vtc
DATE=`date ‘+%Y-%m-%d %H:%M:%S’`
PPP_RESTART_LOG=/var/log/ppp_restart.log
echo ${DATE} «[ERROR] Not request from 213.135.97.131» >> $PPP_RESTART_LOG
fi

Задание для крона:

*/1 * * * * /bin/sh /usr/home/user/scripts/ppp-restart
ppp.conf

default:
set device PPPoE:re0:vtc
set speed sync
set mru 1492
set mtu 1492
set ctsrts off
set timeout 0 # 3 minute idle timer (the default)
set redial 0 0

enable lqr
set lqrperiod 5

vtc:
set authname мой_логин
set authkey мой_пароль
add default HISADDR