FastNetMon

Thursday, 17 January 2008

Решение проблемы с Apache2::ModSSL OpenSuse 10.3

При установке данного модуля высыпается несколько проблем -- первая из них, идёт много ругани на отсутствие mod_perl.h, но если путь с этим файликом жёстко прописать в Makefile.PL (который был предварительно сгенерирован посредством perl Makefile.PL, все файлы лежат по пути ~/.cpan/build/Apache2-ModSSL-0.03-некоторые_символы):
INC = -I/usr/include/apache2 -I/usr/include/apache2/modules/perl


То высыпется ещё целая прорва ошибок сборки, которая решается прописыванием путей к заголовочным файлам библиотеки apr:
INC = -I/usr/include/apache2 -I/usr/include/apache2/modules/perl -I/usr/include/apr-1


Ну и конечно же, devel версии пакетов Apache2 и mod_perl должны стоят в системе :)

Wednesday, 16 January 2008

Немного о CPAN

Как удалить модуль с хранилища модулей (локального, конечно же) CPAN?

В общем случае никак (?), но бывают исключения. В конфигурационном файле CPAN (/usr/lib/perl5/5.8.8/CPAN/Config.pm) есть переменная ('build_dir'), отвечающая за расположение папки для временного хранения модулей перед установкой. Как можно понять, в этой папке хранятся инсталяцонные файлы модулей, которые представляют из себя стандартный комплект -- Makefile.PL / Build.pl и обычно уже созданный Makefile (т.к. данные модули уже были установлены Вами), который и устанавливает модуль в хранилище. А у Данного Make файла присутствует цель uninstall, т.е. можно выполнить make uninstall и либо удалить модуль сразу, либо получить рекомендации для удаления.

Но, к несчастью, данный метод не универсальный, но почти во всех случаях, когда мне было необходимо по тем или иным причинам удалить модуль, он срабатывал :)


Конфигурирование CPAN.

CPAN при запуске очень любит доставать вопросами о конфигурации. Чтобы отучить его заниматься сим противным занятием давайте напрямую отредактируем конфиг файл /usr/lib/perl5/5.8.8/CPAN/Config.pm
(его расположение меняется от дистрибутива к дистрибутиву, так что если что проявите смекалку и отыщите его). Ниже привожу свой конфиг файл.


# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.

$CPAN::Config = {
'build_cache' => q[100],
'build_dir' => q[/home/nrg/.cpan/build],
'cache_metadata' => q[1],
'cpan_home' => q[/home/nrg/.cpan],
'cpan_version_check' => q[1],
'dontload_hash' => { },
'ftp' => q[/usr/bin/ftp],
'ftp_proxy' => q[],
'getcwd' => q[cwd],
'gpg' => q[/usr/bin/gpg],
'gzip' => q[/bin/gzip],
'histfile' => q[/home/nrg/.cpan/histfile],
'histsize' => q[100],
'http_proxy' => q[],
'inactivity_timeout' => q[0],
'index_expire' => q[1],
'inhibit_startup_message' => q[0],
'keep_source_where' => q[/home/nrg/.cpan/sources],
'lynx' => q[],
'make' => q[/usr/bin/make],
'make_arg' => q[],
'make_install_arg' => q[],
'makepl_arg' => q[INSTALLDIRS=site],
'ncftp' => q[],
'ncftpget' => q[],
'no_proxy' => q[],
'pager' => q[/usr/bin/less],
'prerequisites_policy' => q[follow],
'scan_cache' => q[atstart],
'shell' => q[/bin/bash],
'tar' => q[/bin/tar],
'term_is_latin' => q[1],
'unzip' => q[/usr/bin/unzip],
'urllist' => [q[ftp://cpan.makeperl.org/pub/CPAN], q[ftp://cpan.nx1.ru/], q[ftp://cpan.rinet.ru/pub/mirror/CPAN/], q[ftp://ftp.aha.ru/CPAN/], q[ftp://ftp.chg.ru/pub/lang/perl/CPAN/], q[ftp://ftp.spbu.ru/CPAN/], q[http://ftp.silvernet.ru/CPAN/], q[http://mirror.rol.ru/CPAN/]],
'wget' => q[/usr/bin/wget],
};
1;
__END__


Вот примерно такой вид должен иметь наш конфиг файл, но в случае проблем при его использовании придётся переконфигурировать Цпан вручную, это делается довольно просто -- удаляем указанный конфиг файл Цпана и запускаем сам cpan :)

А вот для пользователей убунту данный конфиг стоит искать по адресу: /etc/perl/CPAN/Config.pm

Как бороться с ошибками вида: "Has already been unwrapped into directory /root/.cpan/build/ИМЯ_модуля-некая_уникальная_последовательность" ?

Такое бывает, когда сваливаются тесты модуля или Вы любите поэксперементировать с Цпаном. Это решается в лоб: rm -r /root/.cpan/build/ИМЯ_модуля-*

Monday, 14 January 2008

Новое в Перл 5.12 и немного о my и local

В то время, как весь мир судачит о грядущем Перл6, разработчики 5го Перла прикручивают очень вкусные фишки к языку, вот ссылочка с примерным списком нововведений.

Вот уже третий день усиленно вычитываю статьи на opennet.ru, вот сегодня наткнулся на очень хорошее описание разницы (хотя не совсем разницы, скорее указываются тонкости применения каждого из них) между my и local в Перл5, а вот и ссылка.

Sunday, 13 January 2008

MVC Catalyst + Apache2 mod_perl

Ах, кто к нам такой пришёл ?) А пациентом у нас сегодня будет Perl приложение (простите, но скриптом уже язык не поворачивается называть) на очень прогрессивном MVC фреймворке Catalyst... стоп, а что за Каталист-то? А вот, пожалуйста статья.

По ссылке довольно хорошее введение в предмет, так что не думаю, что возникнет много вопросов. В этой же статье описывается создание простейшего (но вот "простоту" своего нового Стартапа определяете сами :) приложения на данной платформе, у меня оно будет расположено по следующему пути: /home/nrg/dev/my_catalyst_app/lib, так что все последующие конфиги будут идти с учётом оного.

А вот по данной ссылке можно наблюдать описание процесса настройки mod_perl2 для исполнения Каталист приложений. Открываем конфиг файл /etc/apache2/conf.d/mod_perl.conf и внутри тегов <IfModule mod_perl.c> и </IfModule> после всех остальных записей добавляем следующее:

PerlSwitches -I/home/nrg/dev/my_catalyst_app/lib
PerlModule my_catalyst_app
<Location /cat>
SetHandler perl-script
PerlResponseHandler my_catalyst_app
</Location>

Строчка с PerlSwitches указывает веб серверу путь, по которому искать наш обработчик событий для mod_perl (им и будет наше приложение), директива "PerlModule my_catalyst_app" указывает о том, что компиляция нашего проекта будет проведена сразу после запуска Апача, а о назначении остальных строк, думаю, можно догадаться самим, там всё предельно просто - указываем тип обработчика и выбираем наше приложение обработчиком.

После данных манипуляция, перезапускаем Апача - service apache2 restart и смотрим tail -n20 /var/log/apache2/error_log, если там присутствует ошибка Can't locate Catalyst/Engine/Apache2/MP20.pm in @INC, то от имени суперпользователя root устанавливаем недостающий модуль: cpan Catalyst::Engine::Apache2::MP20

Ну вот, пожалуй, и всё, снова перезапускаем сервер и открываем страницу http://127.0.0.1/cat, где видим красивый лейбл Каталиста :)

Добавление от 24 июня.

Вот приобрел хостинг на Дебияне, нашел более удобный способ конфигурирования -- добавить все настройки в отдельный файл /etc/apache2/mods-available/perl.load (который создан ранее).

В итоге у меня получился вот такой небольшой конфиг для Каталиста на отдельном домене:

LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so

PerlSwitches -I/home/nrg/MyApp/lib

<VirtualHost 72.4.76.1:80>

ServerName www.goosync.ru
ServerAlias host.ru *.host.ru

<IfModule mod_perl.c>
PerlModule MyApp
SetHandler perl-script
PerlResponseHandler MyApp
</IfModule>

</VirtualHost>

Saturday, 12 January 2008

Циклические ссылки и сборщик мусора в Perl (perl trash garbage)

Я, конечно, понимаю, что из-за одной ссылки делать целый пост аморально, но статья очень хорошая и для разработчика под mod_perl и FastCGI относится к разряду MUST READ, ссылка в студию: http://www.opennet.ru/base/dev/perl_destruction.txt.html

Apache2 MPM Worker + mod_perl2 на OpenSuse 10.3

В установке данной связки ничего сильно сложного нету, но тем не менее на некоторые моменты стоит обратить внимание. Для начала ставим пакеты apache2, apache2-worker, apache2-utils, apache2-mod_perl и apache2-example-pages через Yast2 или вручную, это уже зависит от Ваших предпочтений. В заголовке статьи я специально сделал акцент на то, что настройка именно для Опенсусе, т.к. некоторые моменты при конфигурировании могут отличаться от дистрибутива к дистрибутиву. Все рассуждения и выводы будут основаны на данной статье.

После того, как всё было успешно (а я ,надеюсь, это так и будет) установлено переходим к настройке. Для начала запустим Апач командой service apache2 start, после этого будет выведено: Starting httpd2 (worker) done, это означает, что запуск веб сервера Apache2 c MPM Worker выполнен успешно.

Далее нам необходимо просмотреть список модулей, которые загружаются сервером, для этого можно воспользоваться командой: apache2ctl -t -D DUMP_MODULES, как можно видеть, там нету perl_module (именно так зовётся модуль mod_perl), поэтому нам нужно сообщить серверу о том, что мы хотим использовать именно его. Список модулей, загружаемых Apache2, хранится в файле /etc/apache2/sysconfig.d/loadmodule.conf, но его особенность в том, что все изменения в нём живут до перезапуска сервера, т.к. в это время конфиг файл затирается и приводится в первоначальную форму. Как можно понять, добавлять в этот конфиг mod_perl2 бесполезно, но куда же его прописывать? Некоторое время поломав голову, я-таки понял, что где-то есть внешний конфиг файл, где и хранится список модулей, на основе которого и создаётся loadmodule.conf - это файл /etc/sysconfig/apache2. Открываем его на редактирование любимым редактором текстов, например vim, ищем строку APACHE_MODULES="а здесь список модулей" и добавляем в неё mod_perl, не забывая, что имена модулей отделяются друг от друга пробелами.

Далее снова ерезапускаем Apache2 и смотрим список модулей командой apache2ctl -t -D DUMP_MODULES, теперь же в этом списке должен появиться "perl_module (shared)". Ещё один способ убедиться в успешной загрузке mod_perl - это команда tail -n20 /var/log/apache2/error_log, далее ищете в лог файле строку наподобие вот этой:
[Sat Jan 12 11:51:58 2008] [notice] Apache/2.2.4 (Linux/SUSE) mod_ssl/2.2.4 OpenSSL/0.9.8e mod_perl/2.0.3 Perl/v5.8.8 configured -- resuming normal operations

Теперь попробуем запустить обычный perl cgi скрипт. Просмотрев конфиг файл /etc/apache2/default-server.conf, можно понять, что обычным местом для CGI приложений является папка /srv/www/cgi-bin (если её нету, то Вам потребуется её создать). В указанной папке создаём файл hello.pl следующего содержания:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Standard CGI!\n";

После этого нам нужно поставить права 755 для файла hello.pl, для этого можно использовать команду chmod a+rx hello.pl. Всё, можете пробовать открыть ссылку http://127.0.0.1/cgi-bin/hello.pl, если отобразится "Standard CGI!", то с настройкой обычного CGI мы закончили. Переходим непосредственно к настройке к mod_perl.

Создадим папку для наших mod_perl2 приложений - mkdir /srv/www/cgi-fast. Далее переименуем старый конфиг mod_perl2 mv /etc/apache2/conf.d/mod_perl.conf /etc/apache2/conf.d/conf_old, т.к. мы его будем заменять на новый, а старый лишь сохраняем на всякий случай, вдруг пригодится.

Создаём файл /etc/apache2/conf.d/mod_perl.conf следующего содержания:
Alias /cgi-fast/ /srv/www/cgi-fast/

<IfModule mod_perl.c>
PerlRequire "/etc/apache2/mod_perl-startup.pl"
<Location /cgi-fast/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
# PerlResponseHandler ModPerl::PerlRun 
# выбор конкретного модуля определяется
# условиями решаемой задачи
# более подробно про модули на search.cpan.org
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
</IfModule>


Далее в папке /srv/www/cgi-fast создаём файл test.pl следующего содержания:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Standard CGI from mod_perl folder!\n";
print $ENV{MOD_PERL};


Выставляем права chmod a+rx test.pl, проверяем http://127.0.0.1/cgi-fast/test.pl, скрипт должен напечатать строки: Standard CGI from mod_perl folder! и mod_perl/2.0.3, что повествует о работоспособности mod_perl. Как можно понять, в этом случае мы произвели запуск обыкновенного Perl скрипта через mod_perl.

Создаём в папке /srv/www/perl-lib подпапку MyApache2 и во вновь созданной папке создаём файл Rocks.pm следующего содержания:
#file:MyApache2/Rocks.pm
#----------------------
package MyApache2::Rocks;

use strict;
use warnings;

use Apache2::RequestRec ();
use Apache2::RequestIO ();

use Apache2::Const -compile => qw(OK);

sub handler {
my $r = shift;

$r->content_type('text/plain');
print "mod_perl2 application rocks!!!\n";

return Apache2::Const::OK;
}
1;



Теперь добавляем в конфиг /etc/apache2/conf.d/mod_perl.conf следующий блок:
<Location /rocks>
SetHandler perl-script
PerlResponseHandler  MyApache2::Rocks
</Location>


Таким образом конфиг примет вид:
Alias /cgi-fast/ /srv/www/cgi-fast/

<IfModule mod_perl.c>
PerlRequire "/etc/apache2/mod_perl-startup.pl"
<Location /cgi-fast/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
# PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
<Location /rocks>
SetHandler perl-script
PerlResponseHandler  MyApache2::Rocks
</Location>
</IfModule>


Теперь открываем http://127.0.0.1/rocks и, надеюсь, радуемся увиденному :)

Apache2 prefork vs worker

Довольно продолжительное время при установке веб сервера Apache я сомневался, ставить ли мне apache2-worker или apache2-prefork, вот и настал момент, когда стоит устранить все неясности в этом выборе и явно описать, что и когда лучше использовать.

Официальная документация сервера говорит о следующем:
Choosing an MPM

Apache 2.x supports pluggable concurrency models, called Multi-Processing Modules (MPMs). When building Apache, you must choose an MPM to use. There are platform-specific MPMs for some platforms: beos, mpm_netware, mpmt_os2, and mpm_winnt. For general Unix-type systems, there are several MPMs from which to choose. The choice of MPM can affect the speed and scalability of the httpd:

* The worker MPM uses multiple child processes with many threads each. Each thread handles one connection at a time. Worker generally is a good choice for high-traffic servers because it has a smaller memory footprint than the prefork MPM.
* The prefork MPM uses multiple child processes with one thread each. Each process handles one connection at a time. On many systems, prefork is comparable in speed to worker, but it uses more memory. Prefork's threadless design has advantages over worker in some situations: it can be used with non-thread-safe third-party modules, and it is easier to debug on platforms with poor thread debugging support.

For more information on these and other MPMs, please see the MPM documentation


Переводить всё не возьмусь, смысла в этом не вижу, но постараюсь описать в двух словах, чем занимаются каждый из указанных модулей.

В документации рассказывается, что у сервера Apache2 мультипоточность реализована посредством подключаемых модулей - MPM (по поводу перевода я сомневаюсь, но, на мой взгляд, лучше перевести как "модули мультипоточной обработки", хотя далее я буду использовать аббревиатуру в виду громоздкости данного названия), которые являются платформозависимыми. Существует две основных модели MPM модулей - это worker MPM и prefork MPM.

Worker работает следующим образом - при запуске создаётся несколько дочерних процессов, по несколько потоков в каждом (сколько именно подразумевается под "несколько" задаётся в конфиг файле Apache2). В качестве преимущества данного модуля указывается пониженное потребление памяти по сравнению с Prefork модулем. Также этот модуль рекомендуется для высоконагруженных веб серверов.

Prefork же создаёт некоторое количество дочерних процессов, но в отличие от Worker, в каждом из них ровно по одному потоку. Т.е. каждый процесс обрабатывает только одно соединение. По поводу скорости указывается, что скорость обоих модулей более-менее соизмерима, но Prefork потребляет больше памяти. Использование безпоточного модуля Prefork предпочтительно в случае использования модулей, который не обладают безопасной мультипоточностью. Также рекомендуется использовать Prefork на платформах, где отладка мультипоточных приложений не реализована на должном уровне (к слову говоря, отлаживать мультипоточные приложения даже на системах с хорошей поддержкой оного - занятие не из простых).


В заключение хотелось бы добавить, что однозначного выбора не существует, всё определятся решаемыми задачами, но следует помнить, что модель Prefork (она, кстати, была единственной моделью, которую поддерживали сервера на Apache 1.3) является заведомо более стабильной, т.к. сбой в одном процессе не затрагивает другие процессы, а в случае Worker сбой в одном потоке может вывести из строя ещё несколько соседних потоков, хотя Worker показывает более высокую скорость в определённом спектре задач (в частности высоконагруженные сервера).

А вот данные реального тестирования: http://www.camelrichard.org/apache-prefork-vs-worker
Стабильности серверов в обоих случаях была 100%, а вот Worker почти в 2 раза обогнал Prefork, но тем не менее это не значит, что и на большем количестве соединений результаты будут в том же самом соотношении да и тест синтетический, в реальных условиях всё может быть иначе.

А вот на тему скорости работы: http://www.camelrichard.org/apache-prefork-vs-worker (mpm worker показывает двухкратный прирост производительности на Solaris!) Для Линукса такого роста, к несчастью, нету: http://www.thrull.com/corner/webserver/prefork-vs-worker/

Сейчас попробуем провести тесты, как будет работать Apache+ mod_fcgi PHP в конфигурациях Prefork и Worker.

Sunday, 23 December 2007

Возвращаюсь :)

Давно ничего не писал, творческий кризис своего рода был, но, думаю, уже кончился :)
В скором времени выхожу на новую работу, в связи с этим будет много публикаций по лезвийным http серверам (nginx, lighthttpd и проч), по MVC (в частности Catalyst {Perl}, RoR {Ruby}) и прочей мистической атрибутике крупных web разработок. С линуксом на пользовательском уровне уже наигрался вдоволь, так что публикации низкого-среднего уровня сложности уже вряд ли можно будет наблюдать в моём блоге, ибо решения уже решённых задач не так интересны :)

По учёбе начинаю заниматься научной работой по аппроксимации случайных величин, так что может и по этой теме будут публикации.

Искренне Ваш, Одинцов Павел.

Sunday, 18 November 2007

Джаббер, пошаговое руководство по настройке клиента Psi версии 0.11 в ОС Windows


  1. Для начала переходим на страницу загрузки официального сайта PSI: http://psi-im.org/download/, там выбираем "Official Psi 0.11 Downloads Microsoft Windows", после щелчка на указанной ссылке нас перебросит на страницу загрузки и закачка начнётся автоматически (если этого не произошло, нажмите там ссылку"this direct link")

  2. После окончания загрузки клиента, устанавливаем его, тут всё тривиально и никаких специализированных настроек не требуется.

  3. При первом запуске нам будет предложено зарегистрировать новый (Register New account) или использовать существующий (use existing account) аккаунт джаббера, выбираем первый пункт, т.к. мы регистрируемся впервые.



  4. Перед нами появляется вот такое окно:



  5. В соответствующее поле вводим имя сервера (name of server), на котором будем регистрироваться.



  6. Поле "encrypt connection" управляет шифрованием данных при работе с сервером (это делает задачу перехвата вашей личной переписки почти неразрешимой). Здесь можно выставить значение либо "Always" (т.е. шифровать всегда), либо When Available (когда доступно). Я бы советовал поставить Always, дабы не допустить открытой передачи.



  7. *Прокси* Если в Вашей сети используется прокси сервер, то щёлкните кнопку Edit, которая справа от поля выбора прокси сервера. После этого пред нами предстанет следующего вида окошко:



  8. *Прокси* После этого нажимаем кнопку New и появляется новый пункт для ввода информации о нашем прокси сервере. Требуется ввести его имя (Name), хост (в моём случае 192.168.155.2), порт (чаще всего 3128) и выбрать его тип (чаще всего HTTP "Connect")



    После этого жмём кнопку Save.



  9. Теперь выбираем наш прокси из списка на главной странице:



  10. Теперь будет выдано сообщение о том, что сертификат нашего джаббер сервера является "самоподписным", т.е. право довериться или нет данному серверу возлагается исключительно на нас (а не на сторонний сервер сертификации) самих. Т.к. джаббер.ру является очень известным и надёжным сервером, то мы с чистой совестью можем проигнорировать это предупреждение нажатием кнопки "Continue".



  11. Вот мы и добрались до регистрации аккаунта, тут нужно ввести требуемое имя (name@jabber.ru, где name и есть наше имя в джаббере) и пароль для регистрации в системе:



  12. А вот это будет выдано, если желаемое имя уже зарегистрировано в системе (в этом случае Вам придётся выбрать другой ник):



  13. Поздравляю! Вы стали пользователем джаббера!



  14. Вот общий вид окна PSI:



  15. А при щелчке на панели выбора статуса (жёлтая звёздочка) показывается вот такое меню:



  16. Выбираем "Online", снова вылетает сообщение о том, что сертификат самоподписан, выбираем "Continue" и мы в Сети!

  17. Сразу после подключения Вам будет предложено заполнить информацию о себе (после заполнения нажмите Publish, это отправит все указанные данные на сервер) %)

  18. Можно начинать общаться!

  19. А для теста можете добавить меня в свой Ростер ("Roaster" или иными словами, "Контакт Лист"), для этого щёлкните по кнопке, которая располагается внизу слева (на ней нарисована буква "Пси"), потом выбираем Add Contact (добавить контакт) и там вводим мой JID (JID, он же Jabber ID - идентификатор в системе), который имеет вот такой вид nrg[собака]jabber.snc.ru и жмём Add. Потом дважды щёлкаем по моему JID в списке и отправляем сообщение %)))

  20. Всем спасибо за внимание и удачного использования замечательной сети джаббер!


C уважением, Одинцов Павел aka энерджи.

Создание сервера для раздачи инета в локалку на базе Opensuse 10.3

Материальная база:
  1. Имеем две машины на базе OpenSuSe Linux 10.3.
  2. В каждой машине имеем по сетевому интерфейсу (в моём случае он ещё и беспроводной, но это картины не меняет) eth0.
Сетевая конфигурация машин:
  1. Первый компьютер, далее именуемый как "сервер" подключен к провайдеру ДомРу (замените на имя Вашего провайдера) через PPPoE (IP адрес вида 10.x.x.x выдаётся динамически, но каждый раз один и тот же, адреса DNS серверов также получаются при подключении) и в моём случае имеет внутренний IP 192.168.155.2 (в Вашем случае пропишите ему адрес 192.168.0.1, так будет привычнее) .
  2. Второй компьютер, далее именуемый как "клиент" соединён сетью с первым через свитч (с серверной стороны и ДомРу и локалка подключены через один интерфейс) и имеет внутренний IP 192.168.155.1 (Вы же выберите лучше 192.168.0.2)
Требуется:
  1. Обеспечить прозрачный доступ в интернет через NAT для клиентской машины
  2. Обеспечить поддержку внутреннего ДНС сервера в качестве ретранслятора (далее поймёте зачем это)
Некоторые данные, которые нам пригодятся:
  1. IP адрес яндекса 213.180.204.8
  2. IP адрес гугла 64.233.187.99
  3. Утилита "ping", предназначенная для проверки сетевого соединения между узлами
  4. DNS сервер bind для удобной работы с DNS
  5. Прозрачный прокси на squid (факультативно), позволяющий кешировать весь хттп трафик для его экономии и увеличения скорости доступа к ресурсам.
  6. Suse Firewall 2, обертка для Iptables, предназначенная для удобного конфигурирования фаервола.
  7. Немного бутербродов и чая \ кофе, т.к. процесс не очень-то и быстрый
Для начала предположим, что у нас уже есть настроенное и исправно функционирующее PPPoE соединение. Убедиться в этом можно командой: ping ya.ru и есть в ответ будет выдано нечто вида:
nrg@dell:~> ping google.com
PING google.com (72.14.207.99) 56(84) bytes of data.
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=1 ttl=244 time=171 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=2 ttl=244 time=173 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=3 ttl=244 time=184 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=4 ttl=244 time=172 ms
64 bytes from eh-in-f99.google.com (72.14.207.99): icmp_seq=5 ttl=244 time=170 ms
То все отлично, можно идти дальше. Далее проверим соединение между машинами наберём на сервере команду ping 192.168.155.1, а на клиенте соответственно ping 192.168.155.2 и в ответ должны посыпаться ответы, указанные выше. Насчёт IP, как я уже сказал выше, используейте 192.168.0.1 вместо 192.168.155.2 и 192.168.0.1 вместо 192.168.155.1. Сеть работоспособна. Шаг первый, настроим трансляцию пакетов с Локальной сети в Интернет.
  1. Открываем Yast2 -> "Пользователи и безопасность" -> "Брандмауэр".
  2. Переходим на вкладку "Интерфейсы", выбираем там наше ДСЛ соединение (так зовётся PPPoE), щёлкаем кнопку изменить и выбираем "Внешняя зона", а для сетевой карты, подключённой к Локальной Сети (далее "ЛВС"), выбираем соответственно "Внутренняя зона"
  3. Переходим на вкладку "Трансляция сетевых адресов", в верху ставим галочку "Трансляция сетевых адресов".
  4. Далее щёлкаем кнопку "Добавить" и вводим следующее: сеть источника 192.168.155.0/24, протокол TCP, в полях "Требуемый порт" и "Перенаправление в порт" прописываем нули, требуемый IP вводим "0.0.0.0/0", т.е. любой. А в поле "Перенаправить в транслированный IP" наш IP, который выдаётся для dsl соединения (ifconfig dsl0 и смотрите поле inet addr:). В моём случае это адрес вида 10.65.0.x.
  5. Применяем настройки Брандмауэра.
  6. Переходим к клиентской машине.
На клиентской машине в Yast2->"Сетевые устройства" -> Сетевая плата вбиваем IP сервера (192.168.155.2) как шлюз по умолчанию на вкладке Маршрутизация. Далее опять же на клиентской машине вбиваем ping 64.233.187.99 и смотрим %) Если полетели пакетики, то ура, ибо роутинг уже работает! Далее нам нужно сделать, чтобы вместо ping ip можно было сделать ping ya.ru. Установка локального DNS сервера
  1. Ставим через Yast2 пакет bind и пакета для конфигурирования Бинда через yast2 (вбейте в поиске bind он будет показан)
  2. Открываем Yast2 -> "Сетевые службы" -> "Сервер DNS"
  3. Ставим галочку "PPP Демон устанавливает направление запроса", это означает, что если наш локальный ДНС сервер не обнаружит в своей базе IP адреса требуемого домена, то он попросит его у ДНС провайдера, а в случае указанной конфигурации он автоматически определит ДНС провайдера и будет использовать его. Щелкаем далее.
  4. ничего не трогаем на странице "Установка DNS сервера: DNS зоны" и щелкаем далее.
  5. В поле "Запуск службы" ставим галочку "При загрузке системы" и жмем завершить, тем самым применяя настройки.
Возвращаемся к клиентской машине.И снова Yast2 -> "Сетевые настройки" -> "Сетевая карта" -> Имя узла DNS и там ставим галочку "Изменить /etc/resolv.conf вручную", после этого в поле Сервер имён №1 вбиваем IP нашего сервера - 192.168.155.2 и применяем. Теперь делаем ping ya.ru и радуемся увиденному %) Всё, мои поздравления, сервер настроен, можете открывать браузер на клиентской машине и юзать Инет %) Добавление прозрачного прокси на базе squid (опционально). Теперь можно улучшить скорость доступа к ресурсам и уменьшить потребляемый трафик посредством кэширующего прокси на базе squid. Установите прокси сервер squid и запустите его командой service squid start (или поместите в автозагрузку на 3й либо 5й уровень запуска). После этого нам требуется немного модифицировать его конфигурацию, открываем любым текстовым редактором файл /etc/squid/squid.conf Потом отыскиваем там строку "http_port 3128" и меняем её на "http_port 3128 transparent", тем самым мы указали, что прокси теперь может использоваться как прозрачный. Далее нам нужно указать, что подсеть 192.168.155.0/24 (а в Вашем случае 192.168.0.0/24) является доверенной, чтобы клиенты из данной подсети смогли использовать прокси. Находим текст:
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
И изменяем на следующее следующее:
acl our_networks src 192.168.155.0/24
http_access allow our_networks
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
Тем самым мы как раз и добавили нашу подсеть в список допустимых и перезапускаем squid командой service squid restart дабы применить произведённые настройки. И, наконец, укажем SuSe Firewall`у, что для портов 80 и 8080 нужно использовать прокси. Для этого открываем /etc/sysconfig/SuSEfirewall2 Там ищем строку вида FW_REDIRECT="" и заменяем её на
FW_REDIRECT="192.168.155.0/24,0/0,tcp,80,3128"

Далее перезапускаем Suse Firewall2 через Yast2 и наблюдаем через команду tail -f /var/log/squid/access.log ,что теперь все запросы на указанные порты перекидываются на прокси :)

Чуть позже дополню все скриншотами и выправлю текст.
Благодарность, критика, вопросы по теме принимаются и приветствуются за исключением случаев, когда собеседник хочет, чтобы все сделали за него ("быстро и шоп работало") и ведёт себя бестактно, тогда в помощи я буду вынужден отказать, т.к. ценю своё время.

Автор: Одинцов Павел ака энерджи. Ноября 2007г. Общее время написания статьи: 1 час.

Monday, 5 November 2007

How-to: Джаббер - сеть мгновенного обмена сообщениями. Введение в предмет.

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

Для начала небольшой экскурс. Так что же такое джаббер? Проще говоря - это сеть мгновенного обмена сообщениями, такая же как ICQ, Майл.Агент, MSN и прочие. Так зачем нам этот непонятный джаббер, если есть другие протоколы? У джаббера есть множество преимуществ, среди которых следует отметить следующие:

1) Открытость протокола (а этим почти никто из вышеперечисленных похвастаться не может), что позволяет каждому ознакомиться с принципами работы и даже написать свой собственный клиент.

2) Повышенная безопасность (вы всегда можете включить шифрование вашего трафика по протоколу ssl, что исключает перехват ваших переговоров злоумышленником или недобросовестным системным администратором вашей сети).

2) Децентрализованность (ух ты, какое сложное слово!), а если говорить проще, то серверов джаббера не один, и не 10, и даже не 100, а намного больше, что объясняется довольно просто - любой желающий при соответствующей квалификации может сделать свой собственный сервер джаббера и разрешить пользователям на нем регистрироваться (а может и не разрешить, если это, допустим, корпоративный чат). "Ну подумаешь, много серверов и открытый протокол что из этого? " - можете возразить Вы и будете совершенно правы. Но давайте рассмотрим довольно простую ситуацию, которая имела место в феврале прошлого года, когда корпорация Америка Онлайн (владелец сети ICQ) изменила протокол передачи сообщений в своей сети, в результате чего пользователи многих "альтернативных" клиентов (Miranda-im.com, например) данной сети на протяжении одного-двух дней не могли войти в сеть.

А если вспомнить, что уже многие фирмы ведут коммерческую деятельность посредством ICQ, то убытки от пары дней простоя тоже можно примерно оценить. В случае с джаббером такое в принципе невозможно, т.к. протокол уже устоялся и его изменения не планируются. Далее рассмотрим уже гипотетическую ситуацию (несмотря на то, что она вымышленная, не стоит отрицать и такой вариант), что владелец ICQ собирается закрыть сеть, тем самым лишая пользователей возможности общаться. В случае с джаббером такое опять же невозможно, если даже ваш сервер закрылся или сломался (но полностью вся сеть не сломается никогда!), Вы всегда можете воспользоваться другим сервером.

4) Довольно широкий выбор клиентов для данной сети, среди которых: PSI, Kopete, QIP Infium, Miranda c jabber, Bombus (для сотовых телефонов на платформе J2ME)

5) Возможность работы с другими сетями непосредственно через джаббер используя т.н. механизм транспортов (даже если Ваш jabber сервер не поддерживает определённый транспорт, то Вы всегда можете воспользоваться транспортом с другого jabber сервера, протокол позволяет и это), который предоставляет возможность общаться с клиентами из других сетей (например - icq, mail agent, yahoo, msn и даже smtp и rss) через привычный интерфейс своего любимого джаббер клиента.

6) Расширяемость. Этот пункт может быть и не будет интересен для обычных пользователей, но для руководителей ИТ отделов и администраторов крупных фирм он будет предельно интересен, т.к. обычный протокол передачи данных и сообщений может быть с лёгкостью расширен через стандартный интерфейс посредством введения нового пространства имён, что открывает неограниченные возможность для внедрения специфических для конкретного предприятия функций (например передача банковских котировок в реальном времени).

Автор: Одинцов Павел. Ноябрь 2007.

Saturday, 3 November 2007

How-to: Установка OpenSuSe 10.3 без повреждения MS Windows

Мне довольно часто спрашивают, как безболезненно для Виндовса поставить Сусе, так что пора бы уже на данный вопрос ответить развернуто. В установке есть некоторая специфика, которую я постараюсь изложить в данном посте.
  1. Ну, во-первых, о расположении и размерах разделов. Лично я бы советовал отдать Сусе гигов 15 места на диске, из них 200 мегабайт под /boot раздел(отсюда будет осуществлять загрузка), 8 гигов под / (тут будет система) и 6 под /home (здесь будут пользовательские данные), в дальнейшем можно будет безболезненно переформатировать остальные разделы в ext3 и использовать их в Линуксе.
  2. При первом знакомстве с линуксом лучшим решением будет отрезать (тем же партишен меджиком) от жёсткого диска гигов 15 в конце и оставить их пустыми (строго говоря, это можно сделать и из инсталлятора Сусе, но т.к. мы только начинаем знакомство с линуксом, лучше сделать привычным для себя путём).
  3. Потом при установке Суси щёлкнуть на последнем экране по пункту "разбиение" и выбрать "ручное разбиение", а потом "пользовательское разбиение".
  4. Там уже создать указанные мной разделы с указанным размером (в качестве файловой системы настоятельно рекомендую выбрать ext3, т.к. она является наиболее оптимальной для среднестатистической настольной системы), а в пунктах точка монтирования указать соответственно /boot, / и /home.
  5. Всё остальное (поиск раздела с MS Windows и добавление его в загрузчик) сделает установщик Суси.


Если у вас остались вопросы, милости прошу nrg [собака]jabber.snc.ru :)

How-to: настройка PPPoE (ДомРу) в OpenSuse 10.3

  1. Открываем конфигурационный центр Yast2 (yast2 в консоли), вводим пароль рута, указанный при установке.
  2. Слева выбираем вкладку сетевые устройства.
  3. Справа выбираем пункт DSL (не смущайтесь названию, это подходит не только для ADSL, но и для PPPoE)
  4. Далее создаём подключение, тут все довольно прозрачно. Выбираем сетевую карту, к которой подключён кабель от провадера, потом добавляем нового провайдера в соответствующем пункте меню и вводим свои логин и пароль (только убираем галочку "всегда запрашивать пароль"), других настроек производить не нужно (там много всяких галочек - их не трогайте) !
  5. После того, как соединение создано, ищем значок knetworkmanager (нечто прямоугольное и белое или синяя лесенка в случае беспроводного соединения) в системной области, жмём правой кнопкой мыши и выбираем пункт "Коммутируемые подключения", далее выбираем нашего провайдера и соединяемся :)
  6. Если не нашли значок, значит выбран метод управления сетевыми соединениями через ifup нужно это исправить.
  7. Заходим в подпункт Сетевых устройств "Сетевая карта" и во вкладке "общие параметры" выбираем "Управляемый пользователем knetworkmanager" и применяем, значок должен появиться.
  8. Соединяемся и пользуем все блага Интернета %)

Monday, 29 October 2007

Сборка Live CD на основе OpenSUSE Linux 10.3 и ядра с linux-live.org

Сборка Live CD на основе OpenSUSE Linux 10.3 и ядра с linux-live.org

Ну так вот, встала такая необходимость - до понедельника собрать загружаемый Livecd с Линуксом и некоторым набором своего софта.
Давно на примете было статейка: http://mydebianblog.blogspot.com/2007/09/1-livecd.html , по которой мы и будем собирать наш LiveCd, только я буду поподробнее описывать сам процесс установки линукс-системы в эмулятор qemu.

Собирать дистрибутив мы будем на основе OpenSUSE Linux 2007.0, а не на основе Дебияна, что объяснить довольно просто - Сусю я знаю немного получше (т.к. это моя рабочая ОС). Собираться все это будет под 32 разрядной SuSe Linux 10.3 (в итоге первая часть была собрана на 32 разрядной машине под 10.3, а сам дистрибутив уже под 64 разрядной 10.2, вот так вота), но лайвсиди будет 32 разрядный %)
Для начала небольшой ликбез по qemu: http://phpsuxx.blogspot.com/2007/09/opensu...c-qemu-kvm.html и http://phpsuxx.blogspot.com/2007/09/opensu...emu-kvm_04.html.
При сборке дистрибутива будем придерживаться т.н. Linux-way, то есть не будем изобретать велосипед и соберём все на основе уже готовых и достаточно хорошо отлаженных компонентов.

Для начала сольём весь необходимый софт:
  1. http://www.linuxdevcenter.com/linux/2007/07/05/examples/hello_printk.tar.gz - пример модуля ядра.
  2. ftp://ftp.slax.org/source/slax/kernel/2.6.21.5/src-core/config - конфиг для Лайв ядра.
  3. ftp://ftp.slax.org/Linux-Live/linux-live-6.1.5.tar.gz Linux Live scripts, т.е. скрипты для создания Live дистрибутива
    сайт: http://www.linux-live.org
  4. Качаем Linux Live Scripts и Linux Kernel c сайта: http://www.linux-live.org
  5. Весь софт (а он весьма увесистый) немного позже выложу на наш локальный ФТП (справедливо только для абонентов провайдера ЭрТелеком в г. Самара).

    Набор софта:
    • Не будет графической оболочки в принципе, т.к. задача написать свой аналог Кноппикса и прочих не стоит.
    • GCC
    • VIM
    • MC (Файловый менеджер)
    • Консольные браузеры
    • Исходники патченного ядра, т.к. будет необходима сборка модулей
    • Perl, не, а Вы что хотели лишить меня любимого языка программирования ? И не стыдно, а ?
    • Пакеты поддержки PPPoE, дабы сборку можно было использовать как Rescue CD.
    • Ну это... я ещу думаю
    Energy Live! v2 В связи с тупиковостью предыдущей попытки создать Live CD, пойдем немного другим путем и уже с OpenSUSE 10.3, на которой qemu чувствует себя намного лучше, т.к. kqemu (модуль ядра для поддержки виртуализации) ставится из пакетов. Теперь нам понадобится инсталляционный dvd диск OpenSuSe 10.3 под платформу i386 1штука. Ядро, сорцы ядра и скрипты с linux-live.org
  6. Создаём виртуальный диск:
    #qemu-img create vdisk.img 5G
  7. Запускаем инсталляцию
    modprobe kqemu # грузим модули поддержки
    qemu -hda vdisk.img -cdrom путь_к_исо_образу_суси.iso -boot d -m 128
    либо непосредственно с DVD диска, вставленного в привод хостовой машины:
    qemu -hda vdisk.img -cdrom /dev/sr0 -boot d -m 128, где /dev/sr0 - имя вашего DVD привода.

    При использовании OpenSuSe 10.2 грузим модули kvm вот в данном случаеж
    Запускаем установку от имени рута:
    qemu-kvm -hda vdisk.img -cdrom install-x86-minimal-2007.0-r1.iso -boot d -m 128
    Если в ответ получаем следующее:
    QUOTE
    open /dev/kvm: No such file or directory
    Could not initialize KVM, will disable KVM support

    То делаем modprobe kvm и modprobe kvm_amd (или kvm_intel в зависимости от процессора) и повторяем операцию, все должно заработать и Вы увидите окошко запуска инсталляции.
    Чтобы загружать модули kvm автоматически при старте openSUSE отредактируйте /etc/sysconfig/kernel и добавьте модули kvm в строку MODULES_LOADED_ON_BOOT=”…” . Или настройке их загрузку с помощью yast2 sysconfig.

    А также в данном случае везде используейте qemu-kvm, вместо qemu.

  8. Ставим Сусе, убирая все лишее.В моём случае список необходимых пакетов имеет примерной такой вид
    • tar
    • bzip2
    • mkisofs
    • GCC
    • nano
    • kernel-sources (хотя можно их и не ставить)
    • mc
    • G++
    • Perl
    • vim
    Ещё небольшая тонкость - я советую всю систему ставить на один раздел (и форматировать его в файловой системе ext3)!
  9. Ждём окончания установки системы...
  10. Загружаем установленную систему: qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
  11. Кофигурируем параметры системы, задаём пользователю root пароль SSAU, а пользователю student пароль 1.
  12. Ставим имя узла energy-live.
  13. Настройку сети пропускаем.
  14. Потом, после окончания всех установочных процедур отключаем сусе командой shutdown -h now
  15. Создаём папку cdrom и монтируем к ней наш образ:
    # mount vdisk.img cdrom/ -t ext3 -o loop,offset=32256
    cp linux-live-6.1.5.tar.gz linux-2.6.21.5.tar.bz2 linux-2.6.21.5-i486-1.tgz hello_printk.tar.gz config cdrom/
    umount cdrom

    Тем самым мы скопировали требуемые файлы в наш виртуальный образ.
  16. Грузим систему: # qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
  17. Открываем файл /etc/fstab любым текстовым редактором и там видим в первой строчке запись вида вида: "/dev/disk/by-id/....part1", так вот меняем это безобразие на /dev/hda1.
  18. Так, насчет этого пункта у меня большие сомнения, лучше этого не делайте. Открываем файл /boot/grub/menu.lst ищем там подобную штуку и меняем её везде на /dev/sda1.
  19. Перезагружаемся командой reboot (о ура, новый qemu научился-такие подхватывать рестарты системы и адекватно их обрабатывать), чтобы проверить работоспособность системы.
  20. Распаковываем наше бинарное ядро в систему (находясь в корневой папке /) tar -xvzf linux-2.6.21.5-i486-1.tgz
  21. Ядро будет распаковано в папку /boot под именем vmlinuz, переименуем его до адекватного имени: mv vmlinuz vmlinuz-2.6.21.5
  22. Открываем /boot/grub/menu.lst и добавляем внизу следующее:
    title Energy Live!
    root(hd0,0)
    kernel /boot/vmlinuz-2.6.21.5 root=/dev/hda1 #именно hda1 %)

    А в верху default 0 исправляем на default 2 и перезагружаемся с новым ядром.
  23. Вылезет пачка ошибок по поводу модулей и куча ругани на modules.dep , это решаем командой #depmod и последующей перезагрузкой для проверки.
  24. Проверка сборки модулей. берём файл hello_printk.tar.gz и переносим его в папку /root, распаковываем командой tar -xzf hello_printk.tar.gz, переходим в его папку и выполняем make, но получаем ошибку, т.к. исходников данного ядра у нас нету!
  25. Берем файл linux-2.6.21.5.tar.bz и переносим в папку /usr/src/, потом распаковываем его там командой tar -xjvvf linux-2.6.21.5.tar.bz
  26. переносим файл config в папку /usr/src/linux-2.6.21.5 под именем .config (#mv /config /usr/src/linux-2.6.21.5/.config)
  27. Переходим в папку с ядром: /usr/src/linux-2.6.21.5 и выполняем команды make oldconfig && make prepare && make modules_prepare Эти команды генерирую платформозависимые участки кода ядра, которые и будут использоваться при сборку модулей.
  28. Возвращаемся в нашу папку с модулем и повторяем процедуру сборки, посредством вызова команды make
  29. Модуль должен собраться успешно, после этого подгружаем его в ядро вызовом команды: insmod hello_printk.ko
  30. Если в самом низу вывода команды dmesg появилис строки Hello, World! то можно очень сильно радоваться , т.к. модули функционируют успешно !
  31. Переносим скрипты для лайвсиди в папку /tmp уомандой mv /linux-live-6.1.5.tar.gz и распаковываем их там. После этого переходим во вновь созданную папку и открываем файл .config , ищем в нём пункт "KERNEL=$(uname -r)" и заменяем его на "KERNEL=2.6.21.5"
  32. Запускаем скрипт сборки ./build сначала вводим "Energy Live!", потом /boot/vmlinuz-2.6.21.5, а потом ждем сжатия основных папок, что довольно не быстро... каково же ваше "двольно небыстро?" я хз, но у меня на настольнике (П4-1600\1Гиг оперы это потребовало бы около 5 часов, почему "бы", а потому, что я прерывал на 4м часу). А на ноуте с процессором Турион (у которого виртуализация на железном уровне) управился за где-то полтора часа.
  33. Следуя информационным надписям, можете либо создать загрузочную флешку, либо iso образ.
  34. Потом монтируем виртуальную ФС к хостовой машине и вытаскиываем оттуда образ исо, а также радуемся ;)
У меня получился 400 меговый образ )