вторник, 15 декабря 2009 г.

Пример минимального сеанса работы с gnuplot

Рассмотрим создание двухмерного графика.
Пусть у нас текстовый файл из трех колонок чисел output.dat. В первой и второй колонках - аргументы функции, в третей - ее значение. Визуализируем эти данные. Есть тонкость - колонки "разделены" пустыми строками на блоки, в которых один из аргументов должен иметь постоянное значение. Рассматриваем случай, когда аргументы есть равномерная сетка точек на поверхности.
Заходим из командной оболочки в каталог с этим файлом. Привожу минимальный список команд - пополнять и редактировать можно на любой вкус:
#gnuplot
gnuplot> splot 'output.dat' using 1:2:3 w l
gnuplot> set grid
gnuplot> set contour base
gnuplot> set pm
gnuplot> set cntrparam levels 100
gnuplot> set cntrparam levels discret -100,100,150
gnuplot> set xrange [100: 200]
gnuplot> set yrange [200: 300]
gnuplot> key outside
gnuplot> set key off

Цифры даны для примера.
Вывод можно делать и в файл. Возьмем тип postscript:
gnuplot> set term postscript
gnuplot> set out 'picture.ps'
Вернем вывод на консоль:
gnuplot> set out x11
gnuplot> set term x11

Еще немного полезных команд:
gnuplot> set view map
gnuplot> set surface no
gnuplot> unset surface

Хорошая ссылка по теме на русском языке.

пятница, 11 декабря 2009 г.

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

Инсталлируем portdowngrade:
#cd /usr/ports/sysutils/portdowngrade
#make DEFAULT_CVS_SERVER=\”:pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs\” install clean
Можно выбрать другой сервер, по желанию.
Используем:
#portdowngrade portname
Заметим, что portdowngrade изменяет только порты, а не само программное обеспечение. Поэтому необходимы следующие шаги:
#portsdb -Uu
#portupgrade -f portname

четверг, 3 декабря 2009 г.

Минимальный набор функций OpenGL для освещения сцены

Освещение сцены OpenGL необходимо не только для ее собственно освещения, но без реализации освещения сцена не будет восприниматься как трехмерная. Приведем минимальный набор функций для релизации этой возможности:
1)По умолчанию машина OpenGL находиться в состоянии с выключенным освещением. Включим его:
glEnable(GL_LIGHTING);
2)Но это только "состояние" этой машины. Нужно теперь "включить" источник света. Он может быть не один. На каждый - своя команда:
glEnable(GL_LIGHT0);
3)Кроме просто включить, надо еще установить свойства каждого источника света:
glLightfv(GL_LIGHT0, GL_POSITION, l0_pos);
glLightfv(GL_LIGHT0, GL_DIFFUSE , l0_dif);
Первый параметр указывает источник, второй - свойство, третий - значение свойства. Этих двух параметров достаточно для "минимальной" функциональности.
А вообще параметров целое множество:
а)Параметры GL_SPOT_EXPONENT,GL_SPOT_CUTOFF,GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION и GL_QUADRATIC_ATTENUATION устанавливаются функциями glLightf() и glLighti().
б)Параметры GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR,GL_POSITION, GL_SPOT_CUTOFF, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT,GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION и GL_QUADRATIC_ATTENUATION утанавливаются функциями glLightfv() или glLightiv()
4)Свойства есть не только у света, но и у материала, который освещаеться:
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, par_mat);Первый параметр функции определяет сторону материала, для которой задаются свойства, второй задает свойство, третий - его значение.

среда, 25 ноября 2009 г.

top of monitoring tools for SysAdmin

Taked from http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
1)vmstat - System Activity, Hardware and System Information
2)free - Memory Usage
3)iostat - Average CPU Load, Disk Activity
4)sar - Collect and Report System Activity
5)mpstat - Multiprocessor Usage
6)pmap - Process Memory Usage
7)netstat - Network Statistics
8)ss - Network Statistics too
9)iptraf - Real-time Network Statistics
10)/Proc file system - Various Kernel Statistics
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts
11)Nagios - Server And Network Monitoring
12)Cacti - Web-based Monitoring Tool
13)Gnome System Monitor - Real-time Systems Reporting and Graphing
14)lsof - list open files, network connections and much more
15)ntop web based tool - ntop is the best tool to see network usage in a way similar to what top command does for processes
16)vnstat - vnStat is a console-based network traffic monitor
17)htop - htop is an enhanced version of top
18)mtr - mtr combines the functionality of the traceroute and ping programs in a single network diagnostic tool

среда, 11 ноября 2009 г.

Инсталляция и использование DCC клиента на FreeBSD

DCC можно использовать в виде клиента или в виде сервера. Для того чтобы использовать серверный вариант необходимо получить server-ID. Получить его можно (следуя инструкции по инсталляции) через соответствующую веб-форму на сайте производителя. Чтобы вас рассматривали как успешного кандидата на получение этого идентификационного кода, вам необходимо иметь почтовый "оборот" не менее 100 тысяч писем в день и 4 гигабайта оперативной памяти для процесса сервера DCC. Поэтому далее обсуждать будем только "клиентский" вариант.
Рассмотрим случай, когда роль почтового сервера играет sendmail. Взаимодействие с DCC осуществляется через механизм мильтеров.
#uname -prs
FreeBSD 7.0-RELEASE i386
# cd /usr/ports
# make search name=dcc


...
Port: dcc-dccd-1.3.115
Path: /usr/ports/mail/dcc-dccd
Info: Distributed Checksum Clearinghouse bulk email detector
Maint: cgreen@sentex.net
B-deps:
R-deps:
WWW: http://www.rhyolite.com/dcc/
...


#cd mail/dcc-dccd
#make install

Делаем без clean, так как нам понадобиться директория work
Правим фаерволл (я использую pf):
#vim /etc/pf.conf
pass out on fxp0 proto udp from fxp0 to any port { 6276 6277 }
pass in on fxp0 proto udp from any port {6276 6277 } to fxp0

Правим
#vim /var/dcc/dcc_conf
DCCM_ENABLE=on
# vim /etc/rc.conf
dccm_enable="YES"
# cd mail/dcc-dccd/work/dcc-1.3.115/
# ./configure

В директории mail/dcc-dccd/work/dcc-1.3.115/misc/ появится файл dcc.m4. Скопируем его в /usr/local/share/sendmail/cf/feature/.
Далее - комментируем в нем всю часть, относящуюся к LOCAL_RULESETS. И добавляем в конфигурационный mc файл, находящийся в /etc/mail:
FEATURE(`dcc')dnl
Добавляем в том же файле "dcc" в строчку перечисления используемых мильтеров (если это единственный мильтер, который мы используем, то слово dcc будет одно):
define(`confINPUT_MAIL_FILTERS', `milter1,milter2,...,dcc')
#vim /var/dcc/whiteclnt
mx ip xxx.xxx.xxx.xxx адрес вашего почтовика
ok env_to postmaster административные почтовые адреса
ok env_to root@xxx.xxx.xxx.xxx
ok ip 10.10.0.0/16 ваша локальная сеть


Стартуем мильтер и рестартуем почтовый сервер:
# /usr/local/etc/rc.d/dccm start
# /usr/local/etc/rc.d/sendmail.sh stop start
#ps ax|grep dcc


...
47063 ?? Is 0:00.00 /usr/local/dcc/libexec/dccm -Idcc -tREP,20 -tCMN,5, -wwhiteclnt -llog -Uuserdirs -SHELO -Smail_host -SSender -SList-ID
47065 ?? S 0:00.20 /usr/local/dcc/libexec/dccm -Idcc -tREP,20 -tCMN,5, -wwhiteclnt -llog -Uuserdirs -SHELO -Smail_host -SSender -SList-ID
...


Полезными будут следующие ссылки:
http://linux.die.net/man/8/dcc
http://www.rhyolite.com/dcc/INSTALL.html#configure-dccproc
http://kocmuk.ru/2008/12/27/dcc-distributed-checksum-clearinghouse/

пятница, 23 октября 2009 г.

Создание базы данных tags

Пусть мы создаем эту базу из исходников на языке си. Тогда:
#cd /my/working/directory
#find . -regex '.*\.c$\|.*\.h$' -print >taglist.tmp
#ctags -L taglist.tmp

В текущей директории и появиться нужный нам файл tags.
Теперь для поиска функции someFunction() делаем так:
#vi -t someFunction
Файл taglist.tmp можно вытереть.

понедельник, 19 октября 2009 г.

Пакетный фильтр pf на клиенте ftp активного и пассивного режимов

Коротко о режимах.
Активный режим:
1)клиент инициирует соединение со своего произвольного непривилигированного Х-го порта на 21-м порту сервера;
2)сервер инициирует соединение со своего 20-го порта на (Х+1)-м порту клиента;
Пассивный режим:
1)клиент инициирует соединение со своего произвольного непривилигированного Х-го порта на 21-м порту сервера;
2)клиент инициирует соединение со своего произвольного непривилигированного (Х+1)-го порта на непривилигированном Y-м порту сервера;
Разрешающие правила

Активный режим.
Пользуемся ftp-proxy.
#grep ftp-proxy /etc/services
ftp-proxy 8021/tcp # FTP proxy
#grep proxy /etc/group
proxy:*:62:
#which ftp-proxy
/usr/sbin/ftp-proxy
Добавим в файл /etc/inetd.conf такую строку:
ftp-proxy stream tcp nowait root /usr/sbin/ftp-proxy ftp-proxy -u proxy -m 55000 -M 57000 -t 180
Добавляем правила пакетного фильтра на клиенте, которые разрешают вышеописанные соединения:
rdr on $INT proto tcp from 192.168.0.1/24 to any port 21 -> 127.0.0.1 port 8021
Это нужно в случае если данная машина - шлюз локальной сети.
$INT означает внутренний интерфейс, $EXT - внешний.
pass in on $EXT inet proto tcp from any port 20 to $EXT port 55000 >< 57000 user proxy flags S/SA
pass out on $EXT inet proto tcp from $EXT to any port 20 flags S/AUPRFS modulate state


Пассивный режим.
nat on $EXT from 127.0.0.1/32 to any -> $EXT
pass out on $EXT inet proto tcp from $EXT to any port 21 flags S/AUPRFS modulate state
pass out on $EXT inet proto tcp from $EXT to any port > 1024 flags S/AUPRFS modulate state

Если клиент - шлюз, то вместо 127.0.0.1/32 пишем адреса внутренней сети.

По материалам этого источника.

воскресенье, 13 сентября 2009 г.

Создание почтовой рассылки с помощью mailman, sendmail и FreeBSD.

Все действия происходят на:
# uname -prs
FreeBSD 7.0-RELEASE i386

Ищем нужный для наших целей порт:
# cd /usr/ports
# make search name=mailman

Port: mailman-2.1.12
Path: /usr/ports/mail/mailman
Info: A mailing list manager (MLM) with a user-friendly web front-end
Maint: jmelo@FreeBSD.org
B-deps: python26-2.6.2_2
R-deps: python26-2.6.2_2
WWW: http://www.list.org/


Заходим в найденную нами директорию и даем команду на инсталляцию. При конфигурировании возникает вопрос о том, какой почтовой программой будем пользоваться. В данном случае выбираем:
[X] SENDMAIL for use with sendmail
Порт устанавливает MAIL_GID=mailnull.

Также нам сообщаеться, какие параметры мы можем изменить во время компиляции:
You may change the following build options:
MM_USERNAME=mailman The username of the Mailman user.
MM_USERID=91 The user ID of the Mailman user.
MM_GROUPNAME=mailman The group to which the Mailman user will belong.
MM_GROUPID=MM_USERID The group ID for the Mailman user.
MM_DIR=mailman Mailman will be installed in /usr/local/mailman.
CGI_GID=www The group name or id under which your web server executes CGI scripts.
IMGDIR=www/icons Icon images will be installed in /usr/local/www/icons.


По успешном завершении компиляции выдается такое сообщение:
----------------------------------------------------------------------------
Mailman has been installed, but requires further configuration before use!

You will have to configure both your MTA (mail server) and web server to
integrate with Mailman. If the port's documentation has been installed,
extensive post-installation instructions may be found in:

/usr/local/share/doc/mailman/FreeBSD-post-install-notes

Note (1): If you use an alternate (non-Sendmail) MTA, you MUST be sure
that the correct value of MAIL_GID was used when this port or package
was built. Performing a "make config" in the Mailman port directory
you can choose your MTA with the correct MAIL_GID.

Note (2): The entire Mailman installation resides under /usr/local/mailman
The command-line scripts necessary to administer Mailman have been
installed in /usr/local/mailman/bin

Note (3): As of version 2.1, Mailman's queue runner runs as a daemon and
is started by a script in /usr/local/etc/rc.d
----------------------------------------------------------------------------


SECURITY REPORT сообщает нам про установку таких испоняемых файлов:
/usr/local/mailman/cgi-bin/create
/usr/local/mailman/cgi-bin/subscribe
/usr/local/mailman/mail/mailman
/usr/local/mailman/cgi-bin/listinfo
/usr/local/mailman/cgi-bin/rmlist
/usr/local/mailman/cgi-bin/options
/usr/local/mailman/cgi-bin/private
/usr/local/mailman/cgi-bin/admindb
/usr/local/mailman/cgi-bin/edithtml
/usr/local/mailman/cgi-bin/roster
/usr/local/mailman/cgi-bin/admin
/usr/local/mailman/cgi-bin/confirm

Ну что ж, заглянем в файл, про который нам сказали:
#less /usr/local/share/doc/mailman/FreeBSD-post-install-notes
Выделим основные шаги, которые мы предпримем:
1) Общие послеинсталяционные шаги;
2) Интеграция Mailman с нашим веб сервером, апачем (для других веб серверов указаний нет);
3) Интеграция Mailman с почтовым сервером Sendmail
4) Конфигурирование Apache (странно - то же что второй пункт по моему мнению)

Рассмотрим каждый шаг поподробнее:
1) Прочитайте файлы "INSTALL" и "README" в той же директории, что и этот файл. Без комментариев. Читаем.
Там же есть другая документация, с которой неплохо бы ознакомиться:
# ls /usr/local/share/doc/mailman/
ACKNOWLEDGMENTS README UPGRADING
BUGS README-I18N.en mailman-admin.txt
FAQ README.CONTRIB mailman-install.txt
FreeBSD-post-install-notes README.NETSCAPE mailman-member.txt
INSTALL README.USERAGENT
NEWS TODO


2, 4)
Этот кусок из конфигурационного файла апача дает полное представление об изменениях, которые нам необходимо совершить:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin ya@my.email
DocumentRoot /usr/local/mailman
ServerName myhost.mydomain.ua
ErrorLog /var/log/apache2/rassylka-error.log
CustomLog /var/log/rassylka-access.log common
ScriptAlias /mailman "/usr/local/mailman/cgi-bin"
Alias /pipermail "/usr/local/mailman/archives/public"
<Directory "/usr/local/mailman">
Options FollowSymLinks ExecCGI
AllowOverride None
Order deny,allow
Deny from all
Allow from x.x.x.x #адреса, с которых разрешен доступ к нашей рассылке
</Directory>
</VirtualHost>


Если мы инсталлируем Mailman в нестандартное место, то надо соответственно изменить изменить "/usr/local/mailman".

3) С sendmail мы делаем следующее. Изменяем файлы virtusertable и aliases:
#cd /etc/mail
#vim virtusertable

mailman@mydomain.ua mailman
mailman-admin@mydomain.ua mailman-admin
mailman-bounces@mydomain.ua mailman-confirm
mailman-confirm@mydomain.ua mailman-confirm
mailman-join@mydomain.ua mailman-join
mailman-leave@mydomain.ua mailman-leave
mailman-owner@mydomain.ua mailman-owner
mailman-request@mydomain.ua mailman-request
mailman-subscribe@mydomain.ua mailman-subscribe
mailman-unsubscribe@mydomain.ua mailman-unsubscribe

trial@mydomain.ua trial
trial-admin@mydomain.ua trial-admin
trial-bounces@mydomain.ua trial-confirm
trial-confirm@mydomain.ua trial-confirm
trial-join@mydomain.ua trial-join
trial-leave@mydomain.ua trial-leave
trial-owner@mydomain.ua trial-owner
trial-request@mydomain.ua trial-request
trial-subscribe@mydomain.ua trial-subscribe
trial-unsubscribe@mydomain.ua trial-unsubscribe


# vim aliases
mailman: "|/usr/local/mailman/mail/mailman post mailman"
mailman-admin: "|/usr/local/mailman/mail/mailman admin mailman"
mailman-bounces: "|/usr/local/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/usr/local/mailman/mail/mailman confirm mailman"
mailman-join: "|/usr/local/mailman/mail/mailman join mailman"
mailman-leave: "|/usr/local/mailman/mail/mailman leave mailman"
mailman-owner: "|/usr/local/mailman/mail/mailman owner mailman"
mailman-request: "|/usr/local/mailman/mail/mailman request mailman"
mailman-subscribe: "|/usr/local/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe mailman"

trial: "|/usr/local/mailman/mail/mailman post trial"
trial-admin: "|/usr/local/mailman/mail/mailman admin trial"
trial-bounces: "|/usr/local/mailman/mail/mailman bounces trial"
trial-confirm: "|/usr/local/mailman/mail/mailman confirm trial"
trial-join: "|/usr/local/mailman/mail/mailman join trial"
trial-leave: "|/usr/local/mailman/mail/mailman leave trial"
trial-owner: "|/usr/local/mailman/mail/mailman owner trial"
trial-request: "|/usr/local/mailman/mail/mailman request trial"
trial-subscribe: "|/usr/local/mailman/mail/mailman subscribe trial"
trial-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe trial"

#make
#make stop && make start

Это мы почтовый сервер рестартанули. Теперь стартанем наш апач.
Добавляем в /etc/rc.conf такую строчку:
apache2_enable="YES"
Потом делаем такие действия:
#mkdir /var/log/apache2
#chown www:www /var/log/apache2
#/usr/local/etc/rc.d/apache2 start

Теперь займемся собственно mailman-ом.
#vim /usr/local/mailman/Mailman/mm_cfg.py
В качестве образца переменных в этом файле смотрим /usr/local/mailman/Mailman/Defaults.py
Нам важны следующие переменные:
DEFAULT_EMAIL_HOST = 'mydomain.ua'
DEFAULT_URL_HOST = 'mydomain.ua'
Вообще-то они устанавливаются автоматом.
Далее устанавливаем пароль администратора наших рассылок:
# /usr/local/mailman/bin/mmsitepass

Создаем листы рассылки - служебный mailman и наш лист(листы), которым(и) будем пользоваться. Делаем это так.
Открываем в браузере url http://mydomain.ua/mailman/admin
Name of list: имя листа - trial
Initial list owner address: тут соответствующий почтовый адрес
Initial list password: создаем пароль
Confirm initial password: подтверждаем
Initial list of supported languages. Выбираем язык интерфейса. Есть и украинский и русский
List creator's (authentication) password:(здесь вводим пароль созданный mmsitepass)

# vi /etc/rc.conf
Добавляем строку:
mailman_enable="YES"
# /usr/local/etc/rc.d/mailman start

Смотрим, что у нас появилось в процессах:
# ps ax|grep mailman
2480 ?? Is 0:00.02 /usr/local/bin/python2.6 /usr/local/mailman/bin/mailmanctl -s -q start
2481 ?? S 0:00.57 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=ArchRunner:0:1 -s
2482 ?? S 0:00.57 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=BounceRunner:0:1 -s
2483 ?? S 0:00.58 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=CommandRunner:0:1 -s
2484 ?? D 0:00.59 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=IncomingRunner:0:1 -s
2485 ?? S 0:00.59 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=NewsRunner:0:1 -s
2486 ?? S 0:00.67 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=OutgoingRunner:0:1 -s
2487 ?? S 0:00.65 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=VirginRunner:0:1 -s
2488 ?? I 0:00.51 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=RetryRunner:0:1 -s

Получаем на указанный адрес такие вот два письма:
Subject: Your new mailing list: trial
From: mailman-owner@myhost.mydomain.ua
Sender: trial-bounces@myhost.mydomain.ua
To: ya@mydomain.ua

The mailing list `trial' has just been created for you. The following
is some basic information about your mailing list.

Your mailing list password is:

mailmanbsdrarmaile

You need this password to configure your mailing list. You also need
it to handle administrative requests, such as approving mail if you
choose to run a moderated list.

You can configure your mailing list at the following web page:

http://myhost.mydomain.ua/mailman/admin/trial

The web page for users of your mailing list is:

http://myhost.mydomain.ua/mailman/listinfo/trial

You can even customize these web pages from the list configuration
page. However, you do need to know HTML to be able to do this.

There is also an email-based interface for users (not administrators)
of your list; you can get info about using it by sending a message
with just the word `help' as subject or in the body, to:

trial-request@myhost.mydomain.ua

To unsubscribe a user: from the mailing list 'listinfo' web page,
click on or enter the user's email address as if you were that user.
Where that user would put in their password to unsubscribe, put in
your admin password. You can also use your password to change
member's options, including digestification, delivery disabling, etc.

Please address all questions to mailman-owner@myhost.mydomain.ua

И второе письмо:
Subject: Mailing list creation request for list trial
From: mailman-owner@myhost.mydomain.ua
Sender: mailman-bounces@myhost.mydomain.ua
To: mailman-owner@myhost.mydomain.ua

The mailing list `trial' has been created via the through-the-web
interface. In order to complete the activation of this mailing list, the
proper /etc/aliases (or equivalent) file must be updated. The program
`newaliases' may also have to be run.

Here are the entries for the /etc/aliases file:

trial: "|/usr/local/mailman/mail/mailman post trial"
trial-admin: "|/usr/local/mailman/mail/mailman admin trial"
trial-bounces: "|/usr/local/mailman/mail/mailman bounces trial"
trial-confirm: "|/usr/local/mailman/mail/mailman confirm trial"
trial-join: "|/usr/local/mailman/mail/mailman join trial"
trial-leave: "|/usr/local/mailman/mail/mailman leave trial"
trial-owner: "|/usr/local/mailman/mail/mailman owner trial"
trial-request: "|/usr/local/mailman/mail/mailman request trial"
trial-subscribe: "|/usr/local/mailman/mail/mailman subscribe trial"
trial-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe trial"

Собственно говоря - все.
Список созданных рассылок можно увидеть на:
http://myhost.mydomain.ua/mailman/listinfo
Оригинал статьи можно посмотреть тут.

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

Инсталляция awstats на FreeBSD.

Инсталляцию рассматриваем на:
# uname -prs
FreeBSD 7.2-RELEASE i386
Ищем нужный порт:
# cd /usr/ports
# make search name=awstats

Port: awstats-6.9,1
Path: /usr/ports/www/awstats
Info: Free real-time logfile analyzer to get advanced web statistics
Согласно этому фрагменту вывода делаем следующее:
# cd /usr/ports/www/awstats
# make && make install

make clean не делаем, потому что нам пригодится содержание директории work.

Приведу наиболее полезные части вывода (с моей точки зрения) в конце инсталляции:
* Rename /usr/local/www/awstats/cgi-bin/awstats.model.conf to awstats.site.conf to setup awstats
* Documentation has been installed in /usr/local/share/doc/awstats
*****************************************************************
Please add the following to your apache config, and restart.
#
# Directives to allow use of AWStats as a CGI
#
Alias /awstatsclasses "/usr/local/www/awstats/classes/"
Alias /awstatscss "/usr/local/www/awstats/css/"
Alias /awstatsicons "/usr/local/www/awstats/icons/"
ScriptAlias /awstats/ "/usr/local/www/awstats/cgi-bin/"
#
# This is to permit URL access to scripts/files in AWStats directory.
#
Directory "/usr/local/www/awstats/"
Options None
AllowOverride None
Order allow,deny
Allow from all
/Directory
*****************************************************************


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


Alias /awstatsclasses "/usr/local/www/awstats/classes/"
Alias /awstatscss "/usr/local/www/awstats/css/"
Alias /awstatsicons "/usr/local/www/awstats/icons/"
ScriptAlias /awstats/ "/usr/local/www/awstats/cgi-bin/"

Directory "/usr/local/www/awstats/"
Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from IP адреса, с которых разрешен доступ к статистике
/Directory


Далее выполняем следующие действия:
# mkdir /usr/local/etc/awstats
# cp -r /usr/ports/www/awstats/work/awstats-6.9/tools/* /usr/local/etc/awstats/
# cp -r /usr/ports/www/awstats/work/awstats-6.9/wwwroot/* /usr/local/www/awstats
# chmod +x /usr/local/etc/awstats
# chown www /usr/local/etc/awstats
# mkdir /var/db/awstats
# chown www:www /var/db/awstats/

www - это имя пользователя, под которым крутится апач.
И запускаем конфигурационный скрипт
#/usr/local/etc/awstats/awstats_configure.pl

Видим его "приглашение":
----- AWStats awstats_configure 1.0 (build 1.8) (c) Laurent Destailleur -----
This tool will help you to configure AWStats to analyze statistics for
one web server. You can try to use it to let it do all that is possible
in AWStats setup, however following the step by step manual setup
documentation (docs/index.html) is often a better idea. Above all if:
- You are not an administrator user,
- You want to analyze downloaded log files without web server,
- You want to analyze mail or ftp log files instead of web log files,
- You need to analyze load balanced servers log files,
- You want to 'understand' all possible ways to use AWStats...
Read the AWStats documentation (docs/index.html).

Далее поочередно отвечаем на его вопросы:

1)
-----> Running OS detected: Linux, BSD or Unix
Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'.
If you want to use standard directory, you should first move all content
of AWStats distribution from current directory:
/usr/ports/www/awstats
to standard directory:
/usr/local/awstats
And then, run configure.pl from this location.
Do you want to continue setup from this NON standard directory [yN] ? y

Отвечаем утвердительно.

2)
-----> Check for web server install

Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
> none

Файл httpd.conf редактировали вручную. Отвечаем "нет".

Your web server config file(s) could not be found.
You will need to setup your web server manually to declare AWStats
script as a CGI, if you want to build reports dynamically.
See AWStats setup documentation (file docs/index.html)

-----> Update model config file '/usr/ports/www/awstats/wwwroot/cgi-bin/awstats.model.conf'
File awstats.model.conf updated.


3)
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ? y

Отвечаем утвердительно.

4)
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
>
my.site.ua
ввели имя нашего сата.

5)
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
>
/usr/local/etc/awstats
ввели имя только что созданной директории.

6)
-----> Create config file '/usr/local/etc/awstats/awstats.my.site.ua.conf'
Config file /usr/local/etc/awstats/awstats.my.site.ua.conf created.


7)
-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/ports/www/awstats/wwwroot/cgi-bin/awstats.pl -update -config=my.site.ua
Or if you have several config files and prefer having only one command:
/usr/ports/www/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...


8)
-----> Create config file '/usr/local/etc/awstats/awstats.my.site.ua.conf'
Config file /usr/local/etc/awstats/awstats.my.site.ua.conf created.

9)
-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/ports/www/awstats/wwwroot/cgi-bin/awstats.pl -update -config=my.site.ua
Or if you have several config files and prefer having only one command:
/usr/ports/www/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...
A SIMPLE config file has been created: /usr/local/etc/awstats/my.site.ua.conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'ra.iop.kiev.ua' with command:
> perl awstats.pl -update -config=my.site.ua
You can also build static report pages for 'my.site.ua' with command:
> perl awstats.pl -output=pagetype -config=my.site.ua

Press ENTER to finish...



Добавляем строчку /usr/local/www/awstats/cgi-bin/awstats.pl -update -config=my.site.ua в крон.
Далее правим конфигурационный файл:
#vim /usr/local/etc/awstats/awstats.ra.iop.kiev.ua.conf
Присваиваем следующим параметрам соответствующие значения:
DirData="/var/db/awstats"
LogFile="/var/log/httpd/my.site.ua-access.log"

awstats понимает несколько типов логов. Поэтому ему надо указать, что он будет парсить логи апача:
LogFormat=4
# 4 - Apache or Squid native common log format (NCSA common/CLF log format)
Собственно говоря - все.
Теперь мы можем смотреть статистику сайта из браузера, набрав вот такой url:
http://my.site.ua/awstats/awstats.pl?config=my.site.ua&update
Осталось заметить, что строчки my.site.ua в имени сайта и значении CGI параметра config совпадать не обязаны. То есть мы можем организовать сбор статистики с нескольких виртуальных хостов на одном адресе http://my.site.ua/ и смотреть каждую отдельную статистику меняя значение параметра config.
Оригинал статьи находится тут. Комментарии приветствуются.

суббота, 8 августа 2009 г.

Работа с CVS на FreeBSD

# uname -prs
FreeBSD 7.0-RELEASE i386
Ищем нужный пакет.
#cd /usr/ports
#make search name=cvs
Выдается достаточно долгий список. Я взял тольку его часть, содержащую пути к различным портам, которая на мой взгляд наиболее интересна. У каждого конечно свои потребности.

Path: /usr/ports/devel/cvs2html
Info: Perl script to turn ``cvs log'' output into HTML
Path: /usr/ports/devel/cvs2svn
Info: CVS to Subversion Repository Converter
Path: /usr/ports/devel/cvsadmin
Info: A simple program to administrate users of a CVS repository
Path: /usr/ports/devel/cvsdadm
Info: Tool for CVSd pserver user administration
Path: /usr/ports/devel/cvsstat
Info: Transforms the output of 'cvs status' to a sorted ASCII table
Path: /usr/ports/devel/cvsutils
Info: CVS utilities which facilitate working with local working directories
Path: /usr/ports/devel/cvsweb3
Info: WWW CGI script to browse CVS repository trees version 3
Path: /usr/ports/net/cvsync
Info: A portable CVS repository synchronization utility
Path: /usr/ports/www/mod_cvs
Info: A module that makes Apache CVS aware

Строчки Info: достаточно красноречивы. Мы же расммотрим установку порта /usr/ports/devel/cvsd.
Смотрим файл /usr/local/share/doc/cvsd/README (с инструкциями поустановке), который входит в проинсталлированный пакет и убеждаемся, что он не имеет никакого отношения к FreeBSD, но общий ход действий, описываемый там, более чем прозрачен.
1)Создаем директорию, в которой будут находиться наши репозитарии:
# mkdir /var/db/cvsd
Вообще то по умолчанию выбирается директория /var/lib/cvsd, но /var/db/cvsd мне больше по вкусу.
2)Создаем группу и его одноименного владельца, с домашним каталогом, который только что создали:
# pw group add cvsd
# pw user add cvsd -s /usr/bin/false -d /var/db/cvsd -g cvsd -c 'cvs pserver daemon'

3)Естественно присваиваем этому каталогу соответствующего владельца:
# chown cvsd:cvsd /var/db/cvsd
4)Этот шаг необходим для большей безопасности. Он создает песочницу для cvsd-демона:
# cvsd-buildroot /var/db/cvsd
creating directory structure under /var/db/cvsd... done.
installing binaries... cvs.
looking for non-linked system libraries... done.
installing libraries... done.
adding users to /var/db/cvsd/etc/passwd... root nobody cvsd.
making /var/db/cvsd/etc/pwd.db...done.
fixing ownership... done.
chrooted system created in /var/db/cvsd
if your cvs binary changes (new version) you should rerun cvsd-buildroot

5)Далее делаем стандартный для установки любого демона шаг. Добавляем строчку cvsd_enable="YES" в файл /etc/rc.conf.
6)Создаем и редактируем конфигурационный файл для нашего демона:
#cp /usr/local/etc/cvsd/cvsd.conf.sample /usr/local/etc/cvsd/cvsd.conf
#chmod u+w /usr/local/etc/cvsd/cvsd.conf

Минимально там нужно проконтролировать две опции, при остальных должно работать по умолчанию.
Это опция, которую мы определили командой cvsd-buildroot:
RootJail /var/db/cvsd
И опция, определяющая конкретный репозиторий в песочнице (репозиториев может быть больше одного):
Repos /myrepos
Repos /myrepos2 и т.д.
Путь указывается относительно песочницы. Т.е. в данном случае /myrepos2 означает /var/db/cvsd/myrepos2.
Если мы не делали команду cvsd-buildroot, то опцию RootJail прописываем как none и в опциях Repos указываем полный путь к репозитарию в файловой системе сервера.
7)Каждый репозитарий перед началом работы необходимо инициализировать:
#cvs -d /var/db/cvsd/myrepos init
8)Добавляем пользователей, которые могут работать с конкретным репозитарием:
# cvsd-passwd /var/db/cvsd/myrepos +anonymous
/usr/local/sbin/cvsd-passwd: adding user 'anonymous' to '/var/db/cvsd/myrepos/CVSROOT/passwd'
Причем имя пользователя не обязано совпадать с именем какого-либо локального пользователя.
После этого стартуем сервис и можем приступать непосредственно к работе с ним.

Оригинал находиться здесь.

среда, 7 января 2009 г.

Копирование файлов в среде UNIX через сеть

SCP
scp [-Cr] /path/to/mySourceFile [ anotherSources ... ] destinationHostName:/path/to/destination/file
scp [-Cr] [[user@]sourceHost:]mySourceFile [ anotherSources ... ] [[otherUser@]destinationHostName:/path/to/destination/file]
Ключ -r используется для копирования директории.
Ключ -С включает компрессию. По умолчанию используется 3DES. Чтобы изменить алгоритм применяйте ключ -с.
Недостатки:
1)При копировании для каждого файла порождается копирующий процесс. Из-за чего для большого количества файлов источника процесс копирования может замедлиться.
2)scp не знает о символических ссылках, поэтому
когда используется ключ -r возможны ситуации, когда эта утилита будет пытаться копировать бесконечный объем данных.
RSYNC
rsync -e ssh [-avz] /path/to/myFile [ /path/to/anotherMyFile ... ] destinationHostName:/destination/file
rsync -ave ssh source.server:/path/to/source /destination/dir
Ключ -a желательно использовать всегда. Сохраняет права доступа файлов и знает про символические ссылки.
-z включает компрессию.
-v выводит список копирующихся файлов.
-e ssh указывает, кто будет "транспортом". Всегда используется.
Недостатки этой утилиты:
1)"экстремальный" синтксис.
2)надо помнить, что используется для транспорта другая программа.
TAR
tar -cf - /some/file | ssh hostName tar -xf - -C /destination
То же, но с компрессией:
tar -czf - /some/file | ssh hostName tar -xzf - -C /destination
Для переноса файлов локально с сохранением прав доступа:
tar cf - /some/file | (cd /some/file; tar xf -)
Эта утилита сохраняит права доступа файлов и хорошо работает с символическими ссылками.
Недостатки:
1)Синтаксис тяжел для запоминания.
2)Для малого количества файлов scp быстрее.