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

Легкий перевод страниц руководства с помощью po4a

Страницы руководства (man'ы) переводить тяжело. Ещё тяжелее поддерживать перевод в актуальном состоянии. Тяжело потому, что нужно изучать разметку по шаблону groff_man и при переводе нужно выискивать среди директив и управляющих последовательностей сам текст, который нужно перевести. Можно, конечно, сконвертировать страницу руководства в текстовый формат, перевести, а потом проставить разметку по аналогии с исходным текстом. Но представьте объём и муторность работы! Проделав всё это хотя бы раз с одним большим переводом, вы решите больше не заниматься этой неблагодарной работой.

Примерно год назад я тоже попробовал сконвертировать несколько текстовых переводов в формат man вручную. Я попробовал, ужаснулся и решил больше этим не заниматься, а стал просто выкладывать переводы в wiki-систему: http://manpages.ylsoftware.com. Всё это время я надеялся на то, что когда-нибудь они кому-то пригодятся, если повезёт, то кто-нибудь возьмётся сконвертировать их в подобающий формат, отправит разработчикам соответствующих программ или ментейнерам и мои переводы попадут в дистрибутивы.

Несколько месяцев назад я даже написал на PHP простенький конвертер из wiki-формата в man, но разметка некоторых кусков wiki-формата оставалась по-прежнему недоступной регэкспам конвертера и переводы всё-же необходимо было доводить до готовности вручную. Ещё один минус такого подхода заключается в том, что перевод не соответствует оригинальной странице руководства из дистрибутива и поддерживать его актуальность по-прежнему тяжело.

Но теперь я нашёл великолепный пакет, с помощью которого можно с легкостью переводить и поддерживать актуальность переводов страниц руководства. Это пакет po4a - Portable Object For Anything. Он имеется в составе дистрибутива Debian и я считаю очень странным то, что о нём нет ни одного упоминания на русском языке (а англоговорящим людям этот пакет и не нужен). Поставим пакет:
# aptitude install po4a
Этот пакет позволяет переводить тексты в следующих форматах:
$ po4a-gettextize --help-format
Список допустимых форматов:
- dia: несжатые диаграммы Dia.
- docbook: Docbook XML.
- guide: формат документации Gentoo Linux xml.
- ini: формат .INI.
- kernelhelp: описание каждого параметра компиляции ядра.
- latex: формат LaTeX.
- man: формат страниц руководства.
- pod: формат документации языка Perl.
- sgml: форматы debiandoc или docbook DTD.
- texinfo: формат страницы info.
- tex: обобщенные документы TeX (смотрите также latex).
- text: простой текстовый документ.
- wml: WML documents.
- xhtml: документы XHTML.
- xml: обобщенные документы XML (смотрите также docbook).
Перевод обычных файлов HTML не поддерживается, они обязательно должны быть приведены к формату XHTML.

Приступим к созданию проекта перевода страниц руководства. Перво-наперво поставим пакет, страницы из которого мы будем переводить:
# aptitude install pppoe
Теперь создадим каталог для проекта перевода:
$ mkdir pppoe
Скопируем страницы руководства из системы в этот каталог и распакуем их:
$ cd pppoe
$ dpkg -L pppoe | grep man | xargs -I {} cp {} .
$ gunzip *
Теперь напишем файл конфигурации проекта po4a.conf:
[po4a_langs] ru
[po4a_paths] pppoe.pot ru:pppoe.ru.po
[type: man] pppoe.8 ru:pppoe.ru.8 add_ru:pppoe.ru.8.add
[type: man] pppoe-connect.8 ru:pppoe-connect.ru.8 add_ru:pppoe-connect.ru.8.add
[type: man] pppoe-start.8 ru:pppoe-start.ru.8 add_ru:pppoe-start.ru.8.add
[type: man] pppoe-stop.8 ru:pppoe-stop.ru.8 add_ru:pppoe-stop.ru.8.add
[type: man] pppoe-status.8 ru:pppoe-status.ru.8 add_ru:pppoe-status.ru.8.add
[type: man] pppoe-sniff.8 ru:pppoe-sniff.ru.8 add_ru:pppoe-sniff.ru.8.add
[type: man] pppoe-server.8 ru:pppoe-server.ru.8 add_ru:pppoe-server.ru.8.add
[type: man] pppoe-relay.8 ru:pppoe-relay.ru.8 add_ru:pppoe-relay.ru.8.add
[type: man] pppoe-setup.8 ru:pppoe-setup.ru.8 add_ru:pppoe-setup.ru.8.add
Первая строка перечисляет список кодов языков, на которые будем осуществлять перевод. Можно переводить на несколько языков сразу, но мы укажем только русский язык.

Во второй строке задаём файл-шаблон и список файлов-переводов для каждого языка. В файле-шаблоне будут все строки, подлежащие переводу, в остальных файлах будут храниться пары оригинал-перевод.

В последующих строках указываются формат переводимого документа, сам документ. С префиксами ru указываются файлы с переводами на русский язык. С префиксами add_ru указываются аддендум-файлы - файлы с дополнительным текстом, который нужно вставить в перевод (например, информация об авторах перевода).

Например, в моём случае аддендумы были двух видов. Файлы pppoe-relay.ru.8.add, pppoe.ru.8.add, pppoe-server.ru.8.add, pppoe-sniff.ru.8.add выглядят так:
PO4A-HEADER:mode=after;position=АВТОРЫ;beginboundary=\.SH

.SH "АВТОР ПЕРЕВОДА"
Перевод на русский язык выполнил Владимир Ступин <wheelof@gmail.com>.
А файлы pppoe-connect.ru.8.add, pppoe-setup.ru.8.add, pppoe-start.ru.8.add, pppoe-status.ru.8.add, pppoe-stop.ru.8.add выглядят так:
PO4A-HEADER:mode=after;position=АВТОР;beginboundary=\.SH

.SH "АВТОР ПЕРЕВОДА"
Перевод на русский язык выполнил Владимир Ступин <wheelof@gmail.com>.
Аддендумы, фактически, написаны по образу и подобию примеров из страниц руководства po4a. Они предписывают вставить текст после текста "АВТОРЫ" или "АВТОР", разметка которого выполнена с помощью шаблона ".SH". Подробнее о разметке страниц руководства можно прочитать на странице руководства groff_man(7). Некоторое время назад я начал её перевод и в последующем постараюсь довести его до конца.

Теперь главное, выполняем компиляцию проекта:
$ po4a po4a.conf
В каталоге проекта появятся файлы pppoe.pot и pppoe.ru.po. Файл po теперь можно переводить с помощью любого редактора po-файлов. Например, я использую poedit. Вам может понравиться gtranslator или kbabel.

В переводимом тексте встречается разметка, которая однако намного проще разметки groff_man и легко редактируется вручную. Например, текст B<pppoe> означает разметку жирным шрифтом будет выглядеть так: pppoe, текст I<pppoe> означает разметку курсивным шрифтом и будет выглядеть так: pppoe. Знаки больше и меньше имеют вид E<gt> и E<lt>. Например, текст E<gt>htmlE<lt> будет выглядеть на печати следующим образом: <html>. Другие способы разметки я не встречал.

После перевода файла po, можно скомпилировать проект снова. Для оригинальных страниц, у которых переведено более 80% текста, будут созданы страницы-переводы. Впрочем, принудительно посмотреть незаконченный перевод можно и вручную:
$ po4a-translate -f man -m pppoe.8 -p pppoe.ru.po -l pppoe.ru.8 -a pppoe.ru.8.add -k 0
man ./pppoe.ru.8
Не всегда разметка исходных страниц руководства бывает идеальной, а потому для успешной компиляции проекта бывает нужно отредактировать исходную страницу. Иногда встречаются неэкранированные знаки минуса или точки, иногда - неправильные теги разметки текста, например вместо \fB может встретиться \fb. На этот случай нужно вооружиться groff_man(7) и исправить неправильные участки страницы руководства.

Также, в процессе перевода, может пригодиться знание пакета gettext. Например, мне очень пригодилась команда msgmerge для слияния нескольких po-файлов в один.

Пример этого и других переведённых проектов можно взять из svn-репозитория: https://man-ylsoftware.svn.sourceforge.net/svnroot/man-ylsoftware/

Если кто-то заинтересован в том, чтобы помочь мне в оформлении переводов, можете зарегистрироваться на сайте http://www.transifex.net/projects/p/manpages-ylsoftware-ru/ и попроситься в команду перевода на русский. Укажите в профиле адрес своей электронной почты - я свяжусь с вами и мы поговорим о том, каким образом вы можете помочь проекту.

В рамках проекта планируется следующая деятельность: перевод страниц руководства из различных пакетов, сбор готовых переводов из интернета с последующим конвертированием переводов в формат проекта po4a, актуализация имеющихся переводов, помощь в конвертировании готовых переводов в формат страниц руководства. Проект на сайте transifex.net и svn-репозиторий на sourceforge планирует приобщить к своему дистрибутиву русское сообщество Fedora. Можете предлагать другие способы взаимодействия и прочую посильную помощь. Удачных и лёгких переводов!

Дополнение. Чтобы получить po-файл для одной страницы руководства, можно воспользоваться следующей командой:
$ po4a-gettextize -f man -m apt-cache.8 -p apt-cache.ru.po
Если нужно получить новую версию po-файла, то можно указать уже имеющийся po-файл с переводом старой версии:
$ po4a-gettextize -f man -m apt-cache.8 -l apt-cache.ru.po.old -p apt-cache.ru.po.new
Обновлено: 28 ноября 2010 года.

четверг, 5 ноября 2009 г.

Настройка почтовой системы на основе Postfix, Dovecot, PostfixAdmin

Перед тем, как приступить к настройке почтового сервера, необходимо убедиться в том, что на сервере имеется прямой доступ в Интернет, то есть на одном из интерфейсов имеется так называемый «белый» IP. Также на сервере должна быть доступна служба DNS. Поскольку почтовый сервер очень часто обращается к службе DNS, может потребоваться настроить локальный кэширующий DNS-сервер для снижения нагрузки на сеть и повышения отзывчивости подсистемы DNS.

Настраиваемая почтовая система обладает возможностями по администрированию доменов и почтовых ящиков через веб-интерфейс PostfixAdmin, в качестве основного домена в статье фигурирует домен stupin.homelinux.org, все учётные записи при этом хранятся в базе данных MySQL. Имеется почтовый клиент с веб-интерфейсом SquirrelMail, фильтрация спама средствами PostGrey, фильтрация вирусов средствами ClamSMTPd, отметка подозрительных писем с помощью SpamPd и SpamAssassin.

Не смотря на то, что настройка почтовой системы рассмотрена довольно подробно, данная статья конечно же не претендует на полноту. За кадром остаётся настройка защищённого подключения к веб-серверу, тонкая настройка фильтрации почты с помощью SpamAssassin, Postfix и PostGrey, повышение безопасности почтовой системы посредством запуска отдельных подсистем от имени непривилегированных пользователей и т.п. Статью можно использовать в качестве опорной для построения более развитой почтовой системы.

Настройка Lighttpd

Первым делом устанавливаем веб-сервер lighttpd, php.
# aptitude install lighttpd php5-cgi php5-json
Включаем модуль fastcgi веб-сервера lighttpd:
# lighty-enable-mod fastcgi
Заменяем в конфигурации модуля /etc/lighttpd/conf-enabled/10-fastcgi.conf интерпретатор PHP4 на PHP5:
fastcgi.server = (
  ".php" =>
  (
    (
      "bin-path" => "/usr/bin/php5-cgi",
      "socket" => "/tmp/php.socket",
      "max-procs" => 2,
      "idle-timeout" => 20,
      "bin-environment" =>
      (
        "PHP_FCGI_CHILDREN" => "4",
        "PHP_FCGI_MAX_REQUESTS" => "10000"
      ),
      "bin-copy-environment" =>
      (
        "PATH", "SHELL", "USER"
      ),
      "broken-scriptfilename" => "enable",
      "check-local" => "disable"
    )
  )
)
Перезапускаем веб-сервер:
# /etc/init.d/lighttpd restart
Настройка PostfixAdmin

Качаем последнюю стабильную версию PostfixAdmin со страницы http://sourceforge.net/projects/postfixadmin/files/. Для Debian существует готовый пакет postfixadmin_2.2.1.1_all.deb, его и скачаем:
$ wget "http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.2.1.1/postfixadmin_2.2.1.1_all.deb?use_mirror=sunet"
Установим пакет в систему:
# dpkg -i postfixadmin_2.2.1.1_all.deb
Пакет устанавливает все файлы проекта в каталог /usr/share/postfixadmin, файлы документации - в каталог /usr/share/doc/postfixadmin. Также создаются файлы с настройками самого PostfixAdmin - /etc/postfixadmin/config.inc.php и настройками Apache 2 - /etc/apache2/conf.d/postfixadmin.

Поскольку я собираюсь пользоваться PostfixAdmin на web-сервере Lighttpd, заглянем в файл /etc/apache2/conf.d/postfixadmin:
Alias /postfixadmin /usr/share/postfixadmin
И создадим на его основе настройки для Lighttpd - в файл /etc/lighttpd/lighttpd.conf нужно будет добавить строчки:
alias.url += (
  "/postfixadmin" => "/usr/share/postfixadmin",
)
Дополнительно, защитим каталог на web-сервере от случайных зевак:
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/htdigest"
auth.require = (
  "/posfixadmin" =>
  (
    "method" => "digest",
    "realm" => "PostfixAdmin",
    "require" => "user=morbo"
  )
)
И с помощью утилиты htdigest из пакета apache2-utils задаём пароль для пользователя morbo и рилма PostfixAdmin:
$ htdigest /etc/lighttpd/htdigest "PostfixAdmin" morbo
Настроим Postfix Admin в соответствии с вашей спецификой (например, зададим подходящий пароль к базе данных, настроим домен по умолчанию и т.п.)

Отредактируем файл /usr/share/postfixadmin/config.inc.php и укажем следующее:
# vi config.inc.php
[...]
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://stupin.homelinux.org/postfixadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'SecretPassword!';
$CONF['database_name'] = 'postfix';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';
Просмотрите остаток файла, если вам захочется сделать более тонкие настройки.

Вы можете быстро заменить домен по умолчанию на ваш собственный:
$ replace "change-this-to-your.domain.tld" "stupin.homelinux.org" - /usr/share/postfixadmin/config.inc.php
Создайте базу данных и пользователя в mysql:
$ mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost' identified by 'SecretPassword!';
mysql> flush privileges;
mysql> q
Откройте браузер и перейдите по ссылке http://stupin.homelinux.org/postfix/setup.php или http://ваш-IP/postfixadmin/. Будет предложено запустить процесс настройки. Удостоверьтесь, что все проверки установщика сообщают 'OK'.

Рекомендуется удалить setup.php.

Теперь перейдите по ссылке http://stupin.homelinux.org/postfixadmin/admin. Вы должны получить приглашение. Войдите с использованием почтового ящика администратора, заведённого ранее на странице настройки. Отсюда вы можете добавлять домены, почтовые ящики и т.п. Но Postfix этого не увидит. Нам нужно установить Postfix и настроить его.

Настройка Postfix

Установим Postfix и SASL2 с поддержкой MySQL:
# aptitude install postfix-mysql postfix-tls libsasl2-modules-sql libsasl2-modules
Добавим в файл /etc/postfix/main.cf следующие строки:
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:106
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 106
virtual_transport = virtual
virtual_uid_maps = static:106
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
  reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
ЗАМЕЧАНИЕ: UID и GID равные 106 на вашей системе могут быть другими. Посмотрите на UID и GID пользователя postfix (или vmail) в файле /etc/passwd и укажите их. Например, на моём сервере:
# grep postfix /etc/passwd
postfix:x:102:105::/var/spool/postfix:/bin/false
--> uid: 102; gid: 105
Создайте файл /etc/postfix/mysql_virtual_alias_maps.cf:
user = postfix
password = SecretPassword!
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
Файл mysql_virtual_domains_maps.cf:
user = postfix
password = SecretPassword!
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
Файл mysql_virtual_mailbox_maps.cf:
user = postfix
password = SecretPassword!
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Если вы хотите разрешить ретрансляцию почты через ваш сервер после SMTP AUTH, пропишите в файле /etc/postfix/sasl/smtpd.conf следующие настройки:
pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: SecretPassword!
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'
Создайте структуру каталогов, включая каталог для первого домена. Вы так же можете войти в PostfixAdmin и создать учётную запись 'test' для домена stupin.homelinux.org.
# mkdir -p /var/spool/mail/virtual/stupin.homelinux.org/test
# chmod -R 770 /var/spool/mail/virtual
# chown -R postfix:postfix /var/spool/mail/virtual
Настройка Dovecot

Установим Dovecot с поддержкой MySQL:
# aptitude install dovecot-common dovecot-imapd dovecot-pop3d
Отредактируем файл /etc/dovecot/dovecot-mysql.conf с настройками Dovecot/MySQL, воспользовавшись следующими опциями:
driver = mysql
connect = dbname=postfix user=postfixadmin host=127.0.0.1 password=SecretPassword!
default_pass_scheme = PLAIN
password_query = SELECT password
                 FROM mailbox
                 WHERE username = '%u'
user_query = SELECT maildir,
                    106 AS uid,
                    106 AS gid
             FROM mailbox
             WHERE username = '%u'
Теперь настроим Dovecot на использование MySQL, задав следующие опции в файле /etc/dovecot/dovecot.conf:
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/spool/mail/virtual/%d/%n
mail_access_groups = mail
first_valid_uid = 106
first_valid_gid = 106
protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  mechanisms = digest-md5 plain
  passdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  userdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  user = root
}
Перезапустим Dovecot и Postfix и проверим их.

По завершении вы должны получить возможность добавлять новые домены, почтовые ящики, псевдонимы с помощью PostfixAdmin и получить правильно работающую систему, включая SMTP-аутентификацию. Отметим, что для работы SMTP-аутентификации saslauthd не требуется.

Настройка SquirrelMail

Устанавливаем пакет squirrelmail:
# aptitude install squirrelmail
В файл /etc/lighttpd/lighttpd.conf нужно будет добавить строчки:
alias.url += (
  "/mail" => "/usr/share/squirrelmail"
)
Настройку SquirrelMail можно осуществить с помощью ncurses-утилиты squirrelmail-configure.

Настройка плагина SquirrelMail PosfixAdmin

Для того, чтобы пользователи имели возможность самостоятельно менять свои пароли, можно установить расширение postfixadmin для squirrelmail. Адрес проекта http://squirrelmail-postfixadmin.palepurple.co.uk/

Чтобы скачать исходники проекта, необходимо поставить утилиты subversion:
# aptitude install subversion
Создадим каталог для скачиваемых из svn исходников плагина, скачаем исходники, скопируем необходимое нам, а лишнее удалим:
$ mkdir ~/squirrelmail-postfixadmin
$ cd ~/squirrelmail-postfixadmin
$ svn co -r 35 http://squirrelmail-postfixadmin.palepurple.co.uk/svn
$ mkdir ~/squirrelmail
$ cp ~/squirrelmail-postfixadmin/svn/tags/squirrelmail-postfixadmin-0.4.3/* ~/postfixadmin/
$ rm -R ~/squirrelmail-postfixadmin
Почистим исходники плагина от служебных файлов subversion:
$ find ~/postfixadmin/ -name .svn -type d -exec rm -R \{\} \;
Установим плагин в каталог squirrelmail:
# cp ~/postfixadmin /usr/share/squirrelmail/plugins/
Тонкая настройка Postfix

Во-первых, я задаю имя, которое будет использовать Postfix при отправке почты на другие почтовые серверы (в команде HELO или EHLO) или при приёме почты на 25 порту в приглашении (например, «220 stupin.homelinux.org ESMTP Postfix»):
myhostname = stupin.homelinux.org
myorigin = $myhostname
Во-вторых, укажем сети, имеющие право отправки почты без прохождения авторизации:
mynetworks = 10.16.7.0/24, 127.0.0.1
Далее, мой провайдер поместил все клиентские сети в список динамических IP, так называемый DUL. Из-за этого подавляющее большинство почтовых серверов отказываются принимать от меня почту. Чтобы отправка почты всё-таки работала, мой провайдер позволяет отправлять почту через его почтовый сервер mail.ufanet.ru:
relayhost = [mail.ufanet.ru]
И, наконец, я хочу чтобы Postfix не пытался складывать локальную почту в локальные же файлы mailbox. Вместо этого, он должен обрабатывать такую почту, как и всю остальную, то есть передавать её dovecot'у. Для этого пропишем следующую опцию:
local_transport = virtual
Настройка PostGrey

Установим postgrey:
# aptitude install postgrey

Поменять настройки можно в файле /etc/default/postgrey. Я добавил одну дополнительную опцию, которая помещает отправителя в белый список после 5 удачно пройденных тестов:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --auto-whitelist-clients=5"
Настраиваем postfix на использование сервера политик postgrey. В файле /etc/postfix/main.cf к опции smtpd_recipient_restrictions в конец списка добавляем «check_policy_service inet:127.0.0.1:60000». После этого опция smtpd_recipient_restrictions в моей системе приняла следующий вид:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
  reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname,
  check_policy_service inet:127.0.0.1:60000
Теперь, чтобы настройки вступили в силу, можно перезапустить postgrey и postfix:
# /etc/init.d/postgrey restart
# /etc/init.d/postfix reload
Настройка ClamSMTPD

Устанавливаем clamsmtpd (если на сервере установлен стабильный релиз Debian, то лучше подключить дополнительный репозиторий volatile, в который помещаются обновления антивирусных баз данных и систем фильтрации спама):
# aptitude install clamsmtpd
Обновляем антивирусные базы:
# freshclam -v
Настраиваем порты демона в файле /etc/clamsmtpd.conf (я изменил их следующим образом):
OutAddress: 10026
Listen: 127.0.0.1:10025
Настраиваем postfix на передачу файла в clamsmtp. Во-первых добавим в файле /etc/postfix/main.cf следующие опции:
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings
Во-вторых, в файл /etc/postfix/master.cf добавляем следующее:
scan      unix  -       -       n       -       16      smtp
  -o smtp_send_xforward_command=yes

127.0.0.1:10026 inet  n -       n       -       16      smtpd
  -o content_filter=
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8
Перезапускаем clamsmtpd и postfix:
# /etc/init.d/clamsmtp restart
# /etc/init.d/postfix restart
Настройка SpamPd

Устанавливаем spampd:
# aptitude install spampd
Настраиваем spampd, в файле /etc/default/spampd меняем следующие опции:
LISTENPORT=10026
DESTPORT=10027
Также необходимо поменять настройки входного порта postfix, на котором письмо принимается без дополнительных проверок. В файле /etc/postfix/master.cf меняем строку
127.0.0.1:10026 inet  n -       n       -       16      smtpd
на строку
127.0.0.1:10027 inet  n -       n       -       16      smtpd
Для вступления настроек в силу перезапускаем postfix и spampd:
# /etc/init.d/postfix restart
# /etc/init.d/spampd restart
Пояснение принципов фильтрации писем

Теперь clamsmtpd и spampd работают последовательно. Postfix получая новое письмо на порт 25, передаёт письмо на проверку на порт 10025, где его принимает clamsmtpd. Далее, проверив письмо, clamsmtpd передаёт письмо на порт 10026, где его принимает spampd. Далее, после проверки, spampd возвращает письмо Posfix'у на порт 10027. Postfix, получив письмо на порт 10027, принимает его без дополнительных проверок.

clamsmtpd работает в связке с clamav-daemon, последовательно передавая ему на проверку все секции и вложения письма.

spampd тоже работает в связке с демоном spamassassin, передавая ему на проверку письмо целиком. Важно, что в данном примере настройки, не происходит автоматическое удаление писем, похожих на спам. Вместо этого в начало темы подозрительного письма добавляется текст «*****SPAM***** », а в заголовок письма помещаются метки SpamAssassin, свидетельствующие о количестве набранных спам-баллов и описанием каждого признака спама. Для удаления подозрительных писем необходимо воспользоваться дополнительными компонентами почтовой системы.

Ссылки

  1. Настройка веб-интерфейса Clutch - взята часть про настройку Lighttpd и PHP. Не пропадать же однажды уже написанному добру?!
  2. Squirrelmail - PostfixAdmin plugin
  3. Перевод этой и следующих двух статей я сделал отчасти для того, чтобы потом по ней написать этот мануал:
  4. PostfixAdmin на Debian
  5. ClamAV + clamsmtpd + Postfix
  6. Postfix и Postgrey: Проактивный способ фильтрации спама

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

Музыка MIDI - улучшаем звук

У меня есть вся музыка из Doom, Doom 2, Doom Final: Plutonia Experiment, Doom Final: TNT в формате MIDI. При проигрывании музыки с помощью timidity, запущенной из консоли я обнаружил, что timidity ругается на отсутствие сэмплов некоторых музыкальных инструментов:
$ timidity BUNNY.MID
Requested buffer size 32768, fragment size 8192
ALSA pcm 'default' set buffer size 30104, period size 3760 bytes
Playing /home/stupin/music/Doom/Doom/BUNNY.MID
MIDI file: /home/stupin/music/Doom/Doom/BUNNY.MID
Format: 1  Tracks: 13  Divisions: 120
No instrument mapped to tone bank 0, program 31 - this instrument will not be heard
No instrument mapped to tone bank 0, program 123 - this instrument will not be heard
((c) 1994 by <IRC:#doom:just_joe> Productions.)(MUS2MIDI v0.9 - joakim.erdfelt@swsbbs.com)(prelim DEU Music/Sound project for 'DOOM')(DEU (c) 1993,1994 by Raphael Quinet)(DOOM (c) 1993,1994 by id software)Playing time: ~65 seconds
Notes cut: 0
Notes lost totally: 0
При этом, соответственно, слышны не все инструменты, что портит восприятие музыки. Например в первом эпизоде на третьем уровне вместо музыки фактически слышно один только монотонно повторяющийся синт-бас. Я стал искать музыкальные сэмплы для недостающих инструментов.

Выяснилось, что в Debian есть MIDI-секвенсор fluidsynth, в комплекте с которым идут два банка музыкальных инструментов формате Sound Font 2. Эти банки находятся в пакетах с именами fluid-soundfont-gm и fluid-soundfont-gs. Сам секвенсор мне запустить так и не удалось. Честно говоря мне этого и не особо-то хотелось, моей задачей было услышать полноценную музыку из Doom. Но зато я нашёл каким образом можно прикрутить эти банки к секвенсору timidity. Итак, пройдём весь процесс по шагам.

Сначала установим банки:
# aptitude install fluid-soundfont-gm fluid-soundfont-gs
Вносим исправления в настройки freepats - программы, предоставляющей timidity сэмплы инструментов. В файле /etc/timidity/freepats.cfg добавляем следующие строчки (я добавил в начало):
dir /usr/share/sounds/sf2/
soundfont FluidR3_GM.sf2 order=0
soundfont FluidR3_GS.sf2 order=1
И перезапускаем секвенсор:
# /etc/init.d/timidity restart
Теперь можно запускать timidity для прослушивания музыки из Doom. Кроме появления недостающих инструментов улучшилось общее качество воспроизведения: исчезли щелчки и искажения звука. Единственным недостатком секвенсора можно считать то, что он требует для своей работы изрядной вычислительной мощности процессора. Загрузка моего 2-гигагерцового Athlon доходила до 30-40%.

Кстати, с помощью timidity можно слушать не только MIDI-файлы. timidity хорошо воспроизводит IT-, STM- и XM-файлы. В таком формате была музыка в недрах Unreal и Unreal Tournament, которую я когда-то из них извлёк. Теперь я могу слушать эту музыку и в Linux!

суббота, 17 октября 2009 г.

Музыка в PrBoom

Продолжая тему запуска старых игр от id Software в Linux, хочу написать о PrBoom. PrBoom - это свободный движок игры Doom. У меня в Debian эта игра запускалась со звуком, но почему-то без музыки. Как оказалось, исправить этот недостаток довольно просто.

Во-первых, ставим пакет timidity:
# aptitude install timidity
Во-вторых, вносим в файл /etc/default/timidity следующие изменения:
TIM_ALSASEQ=true
В-третьих, перезапускаем MIDI-секвенсор:
# /etc/init.d/timidity restart
В каталоге /dev/ должно появиться устройство midi:
$ ls -la /dev/midi
crw-rw---- 1 root audio 14, 2 Окт 17 17:29 /dev/midi
Нужно убедиться, что пользователь который будет запускать игру, будет иметь доступ к этому устройству. Для этого пользователя достаточно включить в группу audio и при необходимости завершить сеанс и войти снова.

После всех этих действий prboom всё равно не воспроизводил музыку и я обратился к страницам руководства. После непродолжительного чтения, я узнал что все настройки prboom'а находятся в файле ~/.prboom/prboom.cfg.

Поиск по файлу конфигурации слова music дал следующие две опции: music_card, music_volume.

Опция music_card располагалась под опцией sound_card, но в отличие от неё имела другое значение:
sound_card                   -1
music_card                   0
После того, как я заменил значение опции music_card на -1, музыка заработала.

В игре можно включить использование OpenGL и задать размер экрана (смотрите настройки в меню игры и конфигурационный файл). Спрайты объёмными от этого не станут, но качество картинки станет лучше.

Чтобы поиграть в оригинальный Doom, нужно взять от игры для DOS файл с расширением WAD и указать PrBoom'у использовать его. Например вот так можно запустить первый Doom:
$ prboom -IWAD DOOM.WAD
Игра хоть и старая, но кто однажды стал её фанатом, тот её никогда не забудет. Я умею играть на сложности Ultra Violence пользуясь только лишь одной клавиатурой. Да и тем, кто её никогда не видел, может понравиться, если не рассматривать её как замену более поздним играм, а относиться к ней как какой-нибудь казуальной игре вроде тетриса или зумы.

Ну и напоследок, несколько скриншотов.

FreeDoom:

Doom Ultimate E1M1. Перед входом в первую мясорубку:

Doom Ultimate E1M1. После выхода из мясорубки осталось мало здоровья - или бейся или фоткай:

среда, 14 октября 2009 г.

rtorrent + rutorrent

В последнее время нахожусь в поисках оптимального torrent-клиента. Когда-то я пользовался transmission-daemon в купе с web-интерфейсом clutch, затем пересел на rtorrent, запущенный в сеансе screen. При необходимости управлял им через ssh.

Недавно снова попробовал свежую версию transmission-daemon. Как оказалось, в свежей версии transmission-daemon web-клиент уже встроен вовнутрь демона. Работает без падений - всё отлично, но хочется рассмотреть по возможности побольше вариантов, чтобы выбрать оптимальный.

Недавно я наткнулся на лестные отзывы о web-интерфейсе rutorrent для rtorrent. Сам интерфейс очень похож на web-интерфейс (и на GUI-интерфейс) программы uTorrent.

web-интерфейс будет обслуживаться web-сервером lighttpd, а rtorrent будет запущен в screen-сеансе. Для работы web-интерфейса нам понадобится PHP, а для настройки ограничения доступа - утилита htdigest из пакета apache2-utils. Если вы не хотите её устанавливать, то вместо неё можете воспользоваться следующим сценарием lightdigest.sh.

Поставим необходимое нам:
# aptitude install rtorrent screen lighttpd php5-cgi apache2-utils
Для начала я создал простенький файл конфигурации ~/.rtorrent.rc для rtorrent в домашнем каталоге пользователя, от имени которого будет работать rtorrent:
port_range = 6925-6925
directory = /home/rtorrent
session = /home/rtorrent/.rtorrent-session/
load_start = /home/rtorrent/torrents/*
scgi_port = 127.0.0.1:5000
port_range - опция задаёт диапазон TCP-портов, который будет прослушиваться в ожидании подключения других torrent-клиентов и будет анонсироваться трекерам. В данном случае это всего один TCP-порт 6925. Если его не указать, то при каждом запуске rtorrent будет слушать и анонсировать случайный диапазон портов. Задаю я этот параметр по одной простой причине - чтобы потом проковырять в фаерволле соответствующую дырочку.
  • directory - опция задаёт каталог, в который будет производиться закачка.
  • session - опция задаёт каталог, в который будут помещаться активные торренты. При перезапуске rtorrent эти торренты автоматически будут возобновлены.
  • load_start - задаёт имена торрент-файлов, которые необходимо добавить к текущему сеансу.
  • scgi_port - настраивает прослушивание управляющего TCP-порта. Управление происходит по протоколу XML-RPC.
Теперь настроим lighttpd, добавим в файл /etc/lighttpd/lighttpd.conf следующие настройки:
server.modules += ( "mod_fastcgi" )

fastcgi.server = (
  ".php" =>
  (
    (
      "bin-path" => "/usr/bin/php5-cgi",
      "socket" => "/tmp/php.socket",
      "max-procs" => 2,
      "idle-timeout" => 20,
      "bin-environment" =>
      (
        "PHP_FCGI_CHILDREN" => "1",
        "PHP_FCGI_MAX_REQUESTS" => "10000"
      ),
      "bin-copy-environment" =>
      (
        "PATH",
        "SHELL",
        "USER"
      ),
      "broken-scriptfilename" => "enable"
    )
  )
)

server.modules += ( "mod_scgi" )

scgi.server = (
  "/RPC2" =>
  (
    "127.0.0.1" =>
    (
      "host" => "127.0.0.1",
      "port" => 5000,
      "check-local" => "disable",
      "disable-time" => 0,
    )
  )
)

server.modules += ( "mod_auth" )

auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/htdigest"

auth.require = (
  "/RPC2" =>
  (
    "method" => "digest",
    "realm" => "rTorrent RPC",
    "require" => "user=rtorrent"
  )
)
Этот фрагмент включает и настраивает три плагина lighttpd:
  1. fastcgi - для обслуживания php-сценариев web-интерфейса,
  2. scgi - для проксирования обращений к URL'у "/RPC2" на локальный TCP-сокет 5000,
  3. auth - для ограничения доступа к этому URL'у по имени пользователя и паролю.
С помощью утилиты htdigest создадим файл с паролем для пользователя rtorrent и области "rTorrent RPC":
# htdigest -c /etc/lighttpd/htdigest "rTorrent RPC" rtorrent
Если в файле паролей уже есть какие-то записи, то предыдущую команду выполним без опции "-c", чтобы файл не был перезаписан, а был только лишь дополнен новой записью. Соответственно, если вы уже использовали авторизацию по htdigest, файл паролей может находиться в другом месте, в том куда вы его до этого положили. В таком случае нужно поправить путь к файлу паролей в опции auth.backend.htdigest.userfile, указанной в фрагменте /etc/lighttpd/lighttpd.conf выше.

Теперь пришло время скачать со страницы http://code.google.com/p/rutorrent/downloads/list архив rtorrent с файлами web-интерфейса rutorrent. Остальные перечисленные на этой странице файлы являются плагинами к rutorrent.
$ wget http://rutorrent.googlecode.com/files/rtorrent-2.7.tar.gz
Создадим каталог для размещения файлов из архива:
# cd /var/www
$ mkdir rutorrent
И распакуем архив в него:
# tar xzvf rtorrent-2.7.tar.gz -C /var/www/rutorrent
Видим, что файлы распаковались в каталог /var/www/rutorrent/rtorrent. Мне это не понравилось, я переместил файлы так, как и было изначально мной задумано:
# cd /var/www/rutorrent
# mv rtorrent/* .
# rmdir rtorrent
Теперь дадим приложению права на запись в каталоги torrents и settings:
# chown www-data:www-data torrents settings
Заходим по адресу http://ваш-IP/rutorrent, проходим аутентификацию и изучаем интерфейс:

Примечания:
  1. При работе web-интерфейса выяснилось, что он неплохо умеет ронять rtorrent.
  2. Пищу для дальнейших размышлений на тему улучшения системы даёт сообщение web-интерфейса: "rTorrent скомпилирован с некорректной версией библиотеки xmlrpc-c, без поддержки 8-байтовых целых. Версия библиотеки должна быть >= 1.11. Часть функциональности будет недоступна."
  3. Заметка пока-что оставляет за кадром вопросы автозапуска rtorrent в сеансе screen, возможно в скором времени я доберусь до этого вопроса.
  4. Возможно я пропустил установку и настройку каких-то жизненно важных для работы связки пакетов.
Список использованных материалов:
  1. rutorrent - главная страница
  2. http://libtorrent.rakshasa.no/wiki/RTorrentXMLRPCGuide
  3. Lighttpd - mod_fastcgi - настройки модуля fastcgi один в один совпадают с настройками модуля sgci, поэтому документацию на модуль scgi нужно смотреть тоже здесь.

пятница, 25 сентября 2009 г.

PostfixAdmin на Debian

Перевод статьи: PostfixAdmin on Debian

Postfix Admin - это web-интерфейс для настройки пользователей почтового сервера на основе Postfix и MySQL.

Он позволяет создавать пользователей и псевдонимы в пределах домена.

Этот урок рассматривает установку Postfix Admin, Postfix в связке с MySQL и включенной SMTP-аутентификацией, и Dovecot (для POP3/POP3S/IMAP/IMAPS) в связке с MySQL.

Не смотря на то, что этот урок был проверен на Debian Etch, настройка Postfix/MySQL одинакова и должна правильно работать на большинстве дистрибутивов.

Если вы хотите настроить фильтрацию почты каждого пользователя от спама и вирусов, обратитесь к следующему уроку: http://bliki.rimuhosting.com/space/knowledgebase/linux/mail/postfix+with+amavis+and+mysql

Postfixadmin теперь есть в официальных репозиториях Debian и Ubuntu. Просто воспользуйтесь apt-get для его установки:
# apt-get install postfixadmin
ЗАМЕЧАНИЕ: Пакет не попал в репозитории Ubuntu. Просто скачайте файл со страницы http://sourceforge.net/project/showfiles.php?group_id=191583&package_id=225300 и выполните:
# dpkg -i postfixadmin_2.2.0_all.deb
Postfixadmin будет установлен в каталог /usr/share/postfixadmin/, также будут установлен файл конфигурации /etc/postfixadmin/config.inc.php, а в конфигурацию apache будет добавлен дополнительный псевдоним посредством файла /etc/apache2/conf.d/postfixadmin:
Alias /postfixadmin /usr/share/postfixadmin
Если вы решите воспользоваться установкой из архива с исходными текстами, это всё можно сделать вручную.

Настроим Postfix Admin в соответствии с вашей спецификой (например, зададим подходящий пароль к базе данных, настроим домен по умолчанию и т.п.)

Отредактируем файл /usr/share/postfixadmin/config.inc.php и укажем следующее:
# vi config.inc.php
[...]
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://ваш-домен.ru/postfixadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'SecretPassword!';
$CONF['database_name'] = 'postfix';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';
Просмотрите остаток файла, если вам захочется сделать более тонкие настройки.

Вы можете быстро заменить домен по умолчанию на ваш собственный:
# replace "change-this-to-your.domain.tld" "ваш-домен.ru" -- /usr/share/postfixadmin/config.inc.php
Создайте базу данных и пользователя в mysql:
$ mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost' identified by 'SecretPassword!';
mysql> flush privileges;
mysql> q
Откройте браузер и перейдите по ссылке http://ваш-домен.ru/postfixadmin/ или http://ваш-IP/postfixadmin/. Будет предложено запустить процесс настройки. Удостоверьтесь, что все проверки установщика сообщают 'OK'.

Рекомендуется удалить setup.php.

Теперь перейдите по ссылке http://ваш-домен.ru/postfixadmin/admin. Вы должны получить приглашение. Войдите с использованием почтового ящика администратора, заведённого ранее на странице настройки. Отсюда вы можете добавлять домены, почтовые ящики и т.п. Но Postfix этого не увидит. Нам нужно установить Postfix и настроить его.

Установим Postfix и SASL2 с поддержкой MySQL
# apt-get install postfix-mysql postfix-tls libsasl2-modules-sql libsasl2-modules
Добавим в файл /etc/postfix/main.cf следующие строки:
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:106
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 106
virtual_transport = virtual
virtual_uid_maps = static:106
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
  reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
ЗАМЕЧАНИЕ: UID и GID равные 106 на вашей системе могут быть другими. Посмотрите на UID и GID пользователя postfix (или vmail) в файле /etc/passwd и укажите их. Например, на моём сервере:
# grep postfix /etc/passwd
postfix:x:102:105::/var/spool/postfix:/bin/false
--> uid: 102; gid: 105

Создайте следующие файлы в каталоге /etc/postfix/:
mysql_virtual_alias_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
mysql_virtual_domains_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
mysql_virtual_mailbox_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Если вы хотите разрешить ретрансляцию почты через ваш сервер после SMTP AUTH, пропишите в файле /etc/postfix/sasl/smtpd.conf следующие настройки:
pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: SecretPassword!
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'
Создайте структуру каталогов, включая каталог для первого домена. Вы так же можете войти в PostfixAdmin и создать учётную запись 'test' для домена ваш-домен.ru.
# mkdir -p /home/vmail/yourdomain.com/test
# chmod -R 770 /home/vmail
# chown -R postfix:postfix /home/vmail/
Установим Dovecot с поддержкой MySQL
# apt-get install dovecot-common dovecot-imapd dovecot-pop3d
Отредактируем файл /etc/dovecot/dovecot-mysql.conf с настройками Dovecot/MySQL, воспользовавшись следующими опциями:
driver = mysql
connect = dbname=postfix user=postfixadmin host=localhost password=SecretPassword!
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir,
                    106 AS uid,
                    106 AS gid
             FROM mailbox
             WHERE username = '%u'
Теперь настроим Dovecot на использование MySQL, задав следующие опции в файле /etc/dovecot/dovecot.conf:
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n
mail_access_groups = mail
first_valid_uid = 106
first_valid_gid = 106
protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  mechanisms = digest-md5 plain
  passdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  userdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  user = root
}
Перезапустим Dovecot и Postfix и проверим их.

По завершении вы должны получить возможность добавлять новые домены, почтовые ящики, псевдонимы с помощью PostfixAdmin и получить правильно работающую систему, включая SMTP-аутентификацию. Отметим, что для работы SMTP-аутентификации saslauthd не требуется.

Примечание переводчика:
  1. В репозитории Debian Lenny и выше на момент перевода готовый пакет PostfixAdmin обнаружен не был.
  2. После редактирования файла /etc/postfixadmin/config.inc.php нужно перейти не по ссылке http://ваш-домен.ru/postfix/, а по ссылке http://ваш-домен.ru/postfix/setup.php
  3. Чтобы http://ваш-домен.ru/postfix/setup.php не выдавал ошибки, нужно поставить пакет php5-imap и включить использование модуля imap в PHP.

пятница, 18 сентября 2009 г.

Как настроить клиент последовательной консоли

Перевод статьи: How-To set up a serial console client

В двух предыдущих статьях я остановился на настройке последовательной консоли в Ubuntu и Debian.

В этом уроке мы покажем как подключиться к этой последовательной консоли с помощью другого компьютера и программы minicom.

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

1. Перво-наперво...

Нам нужно удостовериться, что два компьютера соединены с помощью так называемого нуль-модемного кабеля. Другие типы последовательных кабелей работать не будут!

2. Установка Minicom

Для minicom имеются готовые пакеты в Debian и Ubuntu, так что нам нужно лишь выполнить команду:
# apt-get install minicom
3. Настройка minicom

В этом уроке последовательный порт используется для подключения к последовательной консоли на ttyS0. Вы можете получить список обнаруженных ядром устройств с помощью команды:
$ dmesg | grep ttyS
[ 12.282348] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 12.282928] 00:0c: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Теперь запустим minicom от имени пользователя root:
$ sudo minicom
Нажмите Ctrl-A O чтобы попасть в настройки последовательного порта и нажмите Enter, введите A и что устройство указывает на /dev/ttyS0, затем нажмите Enter, чтобы подтвердить.

Нажмите E и удостоверьтесь, что здесь стоит значение 115200, нажмите Enter, чтобы подтвердить. Снова нажмите Enter, чтобы вернуться к предыдущему экрану и, наконец, перейдите к пункту настройки "Save setup as dfl", нажмиет Enter чтобы подтвердить, Esc чтобы вернуться назад к первому экрану и нажмите Ctrl-A Q чтобы выйти.

Теперь перезапустите:
$ sudo minicom
И вы должны подключиться!

Как настроить консоль на последовательном порту в Ubuntu

Перевод статьи: How-To set up a serial console on Ubuntu

Этот урок проведёт вас через этапы, необходимые для настройки консоли на последовательном порту в Ubuntu Linux.

В отличие от других дистрибутивов, Ubuntu использует upstart вместо sysvinit и поэтому есть некоторые отличия этого урока от большинства уроков, которые вы можете найти в Интернете, описывающих настройку последовательной консоли.

Последовательная консоль становится необходимой, если она запущена на "безголовом" сервере (то есть не имеющим клавиатуры и экрана) или если вы не можете подключиться к серверу из-за неполадок в сети.

В этом уроке мы настроим последовательную консоль на сервере, компьютере к которому мы хотим получить доступ. Настройка клиента последовательной консоли описана в другой статье.

1. Проверка последовательных устройств

Чтобы найти устройства, доступные на компьютере, вы можете запустить:
$ dmesg | grep tty
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:0c: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Из выведенного можно определить, что имеется один последовательный интерфейс (/dev/ttyS0). Возможно на вашем компьютере будет более одного интерфейса. В этом уроке будем считать, что мы используем первое устройство (ttyS0). Если вы используете второе устройство, вам нужно заменить ttyS0 на ttyS1.

2. Настройка последовательной консоли на сервере

На сервере мы настроим:
  • Последовательную консоль на ttyS0
  • Отправку загрузочных сообщений на последовательную консоль
  • Заставим Grub выводить сообщения на последовательную консоль
2.1. Последовательная консоль

Для настройки последовательной консоли нам потребуется создать новый файл /etc/event.d/ttyS0, чтобы порождать getty на последовательном устройстве. getty позаботится о выводе приглашения для ввода имени пользователя и пароля.

Отредактируем /etc/event.d/ttyS0 и добавим:
# ttyS0 - getty
#
# Служба сопровождает getty на ttyS0 начиная с момента
# запуска системы и до её остановки.
start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /sbin/getty -L 115200 ttyS0 vt102
Чтобы разрешить вход пользователю root (если вы включили учётную запись пользователя root на вашем компьютере) через последовательную консоль, вам нужно отредактировать файл /etc/securetty и добавить:
ttyS0
2.2. Заставим grub выводить сообщения в ttyS0

grub можно настроить на вывод сообщений в последовательную консоль. Отредактируйте меню grub и добавьте:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
В разделе до различных ядер. Это приведёт к тому, что grub будет отображаться на последовательной консоли и вы сможете управлять grub через последовательную консоль или загружаться с использованием другого ядра.

Если используется ttyS1, замените --unit=0 на --unit=1.

Также, чтобы сообщения о загрузке выводились на последовательную консоль, вам нужно добавить к строке вашего ядра следующее:
console=ttyS0,115200n8 console=tty0
Тогда строка ядра будет выглядеть следующим образом:
kernel /boot/vmlinuz-2.6.24-16-generic root=UUID=uuuuuu-iii3-dddd-uuuu-iiiiiddddd ro quiet splash console=ttyS0,115200n8 console=tty0
Теперь, при следующей перезагрузке вы сможете подключиться прямо к вашему компьютеру через последовательную консоль!

Как настроить консоль на последовательном порту в Debian

Перевод статьи: How-To set up a serial console on Debian

Этот урок проведёт вас через этапы, необходимые для настройки консоли на последовательном порту в Debian Linux.

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

Последовательная консоль становится необходимой, если она запущена на "безголовом" сервере (то есть не имеющим клавиатуры и экрана) или если вы не можете подключиться к серверу из-за неполадок в сети.

В этом уроке мы настроим последовательную консоль на сервере, компьютере к которому мы хотим получить доступ. Настройка клиента последовательной консоли описана в другой статье.

1. Проверка последовательных устройств

Чтобы найти устройства, доступные на компьютере, вы можете запустить:
$ dmesg | grep tty
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:0a: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
Из выведенного можно определить, что имеется два последовательных интерфейса (/dev/ttyS0 и /dev/ttyS1). В этом уроке будем считать, что мы используем первое устройство (ttyS0). Если вы используете второе устройство, вам нужно заменить ttyS0 на ttyS1.

2. Настройка последовательной консоли на сервере

На сервере мы настроим:
  • Последовательную консоль на ttyS0
  • Отправку загрузочных сообщений на последовательную консоль
  • Заставим Grub выводить сообщения на последовательную консоль
2.1. Последовательная консоль

Для настройки последовательной консоли нам потребуется отредактировать файл /etc/inittab, чтобы порождать getty на последовательном устройстве. getty позаботится о выводе приглашения для ввода имени пользователя и пароля.

Отредактируем /etc/inittab и добавим:
s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102
прямо за блоком:
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
Теперь запустим:
# init q
Чтобы заставить sysvinit перечитать его настройки и породить getty на /dev/ttyS0 .

Чтобы разрешить вход пользователю root через последовательную консоль, вам нужно отредактировать файл /etc/securetty и проверить, что в нём имеется:
ttyS0
2.2. Заставим grub выводить сообщения в ttyS0

grub можно настроить на вывод сообщений в последовательную консоль. Отредактируйте меню grub и добавьте:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console
В разделе до различных ядер. Это приведёт к тому, что grub будет отображаться на последовательной консоли и вы сможете управлять grub через последовательную консоль или загружаться с использованием другого ядра.

Если используется ttyS1, замените --unit=0 на --unit=1.

Также, чтобы сообщения о загрузке выводились на последовательную консоль, вам нужно добавить к строке вашего ядра следующее:
console=ttyS0,115200n8 console=tty0
Тогда строка ядра будет выглядеть следующим образом:
kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/sda1 ro console=ttyS0,115200n8 console=tty0
Теперь, при следующей перезагрузке вы сможете подключиться прямо к вашему компьютеру через последовательную консоль!

Установка Debian Etch из работающей системы, основанной на Debian

Перевод статьи: How To: Installing Debian Etch From a running Debian based system

Этот урок иллюстрирует каким образом вы можете установить Debian Etch и в общем любой дистрибутив, основанный на Debian из окружения chroot. Воспользовавшись этим способом вам не потребуется ни скачивать установочные диски, ни записывать их.

Это хороший способ понять, как работает система debian.

1. Введение

Долгое время с тех пор как я запустил debian на своей системе, я каким-то образом потерял её и вынужден был использовать 5G, которые остались на моём жёстком диске, для установки Debian Etch.

Я захотел установить её прямо из окружения Ubuntu Dapper. В прошлом использовать её было проще, поскольку можно было воспользоваться base-config, который проводил вас через процесс установки. Но недавно (2 месяца назад), вышел Debian Installer Etch beta 2, отрывок из новости о котором от 15 марта 2006 приведён ниже:
15 марта 2006

Команда Debian Installer счастлива представить второй предварительный релиз установщика для Debian GNU/Linux Etch.

Улучшения в этом выпуске установщика включают:

* base-config был отправлен на пенсию: установка теперь полностью выполняется до перезагрузки. Наконец, весь процесс установки пакетов Debian происходит на фоне дружественной полосы прогресса.
* ....
Что ж, установщик debian теперь работает с установочного компакт-диска и base-config был удалён из репозитория, что означает что я должен выполнить всю работу base-config'а вручную. Например настройка locale, console-data, часового пояса, сети и fstab.

2. Подготовка вашей системы

Первая вещь, которую вам нужно сделать, это подготовить раздел, на котором будет размещаться ваша новая система. Ваша файловая система может быть более или менее сложной (иметь отдельные разделы /boot, /usr, /var ...). В моём случае у меня было очень мало места, я создал раздел / на диске sda11 с типом файловой системы ext3 и раздел для каталога /home (поскольку я уже использую систему с Ubuntu Dapper), который находится на разделе /dev/sda5 и его тип файловой системы - reiserfs. Разделом для подкачки был тот, который использовался запущенной системой, имеющий имя sda9.

И так, приступаем, нам нужно отформатировать /, смонтировать / в нашу файловую систему и подготовить будущую файловую систему с помощью debootstrap, который является инструментом для развёртывания базовой системы Debian.

Приступим, откроем терминал и введём:
root@laptop:/# mkfs.ext3 /dev/sda11
root@laptop:/# mkdir /mnt/debian
root@laptop:/# mount /dev/sda11 /mnt/debian/
Файловая система готова и мы смонтировали её в /mnt/debian. Теперь нам нужно установить базовую систему с помощью debootstrap:
root@laptop:/# debootstrap etch /mnt/debian/ ftp://ftp.de.debian.org/debian/
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional base dependencies: libdb4.2 libgnutls12 libreadline5 libsigc
++-2.0-0c2aopenbsd-inetd readline-common
...
...
I: Configuring netbase...
I: Configuring openbsd-inetd...
I: Base system installed successfully.
Готово! теперь мы сменим корневой каталог с помощью chroot (этот инструмент поставляется в пакете coreutils), chroot запускает команду или интерактивную оболочку в указанном корневом каталоге, чтобы проинформировать нашу новую систему о том что это за система, нам нужно смонтировать файловую систему /proc:
root@laptop:/# mount -t proc none /mnt/debian/proc
root@laptop:/# chroot /mnt/debian/
Будьте осторожны в настройке.

3. Установка вспомогательных пакетов и настройка новой системы

Теперь нам нужно установить некоторые дополнительные пакеты (например, ядро :D), настроить часовой пояс, разделы, имя узла, создать главного пользователя, определить новый пароль для пользователя root...
root@laptop:/# apt-get install locales console-data console-common
root@laptop:/# dpkg-reconfigure locales console-data
Введите подходящее для вашей системы значение. Установите ядро:
root@laptop:/# apt-get install initrd-tools
root@laptop:/# apt-get install linux-headers-2.6-686 linux-image-2.6.15-1-686
Заголовки Linux не нужны большинству пользователей, но поскольку я собираюсь скомпилировать модуль ядра для использования моей беспроводной сетевой карты, мне заголовки ядра нужны.

Вам может потребоваться установить полезные пакеты, вот хороший набор:
root@laptop:/# apt-get install usbutils pciutils bzip2 sysfsutils wireless-tools dhcp3-client resolvconf cpufreqd cpufrequtils acpid acpi
Теперь мы перейдём к настройке системы. Начнём с файла /etc/hosts, отредактировав и записав следующее:
# /etc/hosts
127.0.0.1 localhost
Зададим имя узла в файле /etc/hostname и добавим имя вашего узла. Вы можете захотеть настроить /etc/network/interfaces, чтобы сетевые интерфейсы настраивались автоматически, например:
iface lo inet loopback
iface eth0 inet dhcp
  wireless-essid XXXXXX
auto eth0
Мы покончили с сетью, теперь настроим часовой пояс:
# ln -sf /usr/share/zoneinfo/Zone/Town /etc/localtime
и с файловой системой, отредактируем файл /etc/fstab и добавим:
proc /proc proc defaults 0 0
/dev/sda11 / ext3 defaults,errors=remount-ro 0 1
/dev/sda5 /home reiserfs defaults 0 2
/dev/sda9 none swap sw 0 0
/dev/hda /media/cdrom0 iso9660 ro,user,noauto 0 0
Замените sdaX на подходящие для вашей системы значения.

Важное замечание: Вам нужно задать пароль пользователя root по умолчанию, или вы не сможете войти. Введите:
root@laptop:/# passwd
и определите ваш новый пароль.

4. Установка загрузчика (GRUB)

В моём случае я использую загрузчик из моей запущенной системы. Отредактируем /boot/grub/menu.lst и добавим в конец файла:
title Debian Etch, kernel 2.6.15-1-686 (on /dev/sda11)
root (hd0,10)
kernel /boot/vmlinuz-2.6.15-1-686 root=/dev/sda11 ro quiet splash
initrd /boot/initrd.img-2.6.15-1-686
savedefault
boot
Здесь вам тоже потребуется заменить sdaX на подходящие для вашей системы значения.

Теперь вы можете выйти из вашего изменённого корневого каталога и перезагрузиться в вашу новую систему. Вам всё ещё нужно установить и настроить Xorg.
root@laptop:/# exit
root@laptop:~# umount /mnt/debian/proc
root@laptop:~# umount /mnt/debian
root@laptop:~# reboot
5. Установка и настройка Xorg

Во время перезагрузки вашей системы вы должны наблюдать за появлением ошибок или предупреждений, они могут помешать системе приносить пользу :).

Теперь установим x-сервер и x-клиент:
root@laptop:~#apt-get install xserver-common xserver-xorg
root@laptop:~# apt-get install x-window-system-core x-window-system
root@laptop:~# apt-get install x-window-system-core x-window-system
плюс те пакеты, которые вы хотите.

Откройте /etc/X11/xorg.conf и проверьте, что драйвер соответствует вашей видеокарте, проверьте раскладки клавиатуры и попытайтесь запустить X.
root@laptop:~# X
Если что-то не так, google будет вашим лучшим другом :).

Чтобы X работал правильно, вам нужно создать для себя обычную учётную запись. На моём разделе /home идентификатор пользователя uid и идентификатор группы gid равны 1000, поэтому мне нужно создать группу и пользователя с теми же идентификаторами:
root@laptop:~#addgroup --gid 1000 myuser
root@laptop:~# adduser --id 1000 --gid 1000 myuser
Запустим gdm, и войдём под вашей учётной записью обычного пользователя ;).

Теперь вам всё ещё нужно установить другие пакеты (xmms, mplayer, gaim...), но ваша система работает.

Счастливого пути.

Почтовые уведомления от cron-apt о доступных обновлениях пакетов

Перевод статьи: How-To: email notification upon available package updates with cron-apt

cron-apt - это инструмент, который запускается планировщиком задач cron через регулярные интервалы времени. Он проверяет обновления пакетов и, на выбор, выполняет некоторые действия.

cron-apt по умолчанию скачивает пакеты, но не устанавливает их.

Этот урок рассматривает установку cron-apt для отправки писем на указанный адрес при появлении возможности установки обновлений.

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

Новые настольные дистрибутивы Linux включают программу, уведомляющую о доступности свежих обновлений визуально.

В неграфическом режиме, на серверах работающих в режиме 24/7, нужно отслеживать их вручную и запускать:
# apt-get update
# apt-get dist-upgrade
Эта простая задача может стать весьма обременительной, если вы администрируете большое количество систем.

cron-apt проверяет обновления за вас и, на выбор, устанавливает обновления или отправляет письмо на указанный почтовый адрес.

Я не рекомендую устанавливать обновления автоматически, поскольку я предпочитаю видеть происходящее и в случае если что-то пойдёт не так, я смогу вмешаться.

В этом случае почтовые уведомления позволяют вам применять обновления своевременно.

1. Установка

На Ubuntu и Debian, cron-apt можно установить введя:
# apt-get install cron-apt
2. Настройка

Настройка cron-apt совершенно очевидна. Доступно большое количество возможностей, однако эта статья ограничивается описанием отправки уведомлений.

Главный настроечный файл - это /etc/cron-apt/config. Откройте и отредактируйте этот файл и удостоверьтесь, что переменная MAILTO настроена на тот почтовый адрес, на который вы хотите получать отчёты, а переменную MAILON установите в значение upgrade:
MAILTO="user@example.com"
MAILON="upgrade"
Также вы можете заменить значение MAILON на always, чтобы получать письма с отчётами при каждом запуске cron-apt.

3. Определение расписания запуска cron-apt

Поскольку cron-apt является заданием для cron, вы можете определить время запуска, отредактировав файл /etc/cron.d/cron-apt.

Настройка по умолчанию запускает cron-apt каждый день в 4 часа ночи.

Как настроить кэш репозитория с помощью apt-cacher

Перевод статьи: How To Set up a repository cache with apt-cacher

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

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

В этом случае имеется один компьютер, который называется repository-cache (кэш репозитория), этот компьютер будет работать в качестве кэша репозитория, в то время как остальные компьютеры в вашей сети будут пользоваться им, как обычным репозиторием.

1. Приступим

Как обычно, вам нужно установить необходимые пакеты на первом компьютере. Поэтому введите в терминале:
$ sudo apt-get install apt-cacher
Когда команда будет выполнена, пора перейти к файлу настройки /etc/apt-cacher/apt-cacher.conf

2. Настройка Apt-Cacher

2.1. apt-cacher.conf

И так, откроем главный файл конфигурации apt-cacher'а: /etc/apt-cacher/apt-cacher.conf и начнём редактировать его в соответствии с вашими настройками.

По умолчанию apt-cacher ожидает подключений на порту 3142. Вы можете поменять это значение на то, которое вам нужно.

allowed_hosts: по умолчанию все перечисленные здесь узлы имеют право использовать кэш репозитория. Вы можете изменить это значение, если вы хотите предоставить доступ только определённым узлам. В моём случае, я хочу разрешить доступ моей локальной сети 192.168.1.0/24 и локальному узлу (localhost - 127.0.0.1 и 127.0.1.1 на системах с ubuntu), поэтому я меняю значение следующим образом:
allowed_hosts=192.168.1.0/24, 127.0.1.1
Поскольку 127.0.0.1 разрешён всегда, не обязательно добавлять адрес 127.0.0.1.

generate_reports: Эта директива заставляет apt-cacher создавать ежедневный отчёт по эффективности вашего кэша. По умолчанию это 1, если вы хотите отключить его, установите его в 0.

path_map: Это любопытная директива. Здесь вы можете определить различные псевдонимы для различных узлов репозиториев. На моём компьютере с ubuntu edgy, моя директива path_map выглядит следующим образом:
path_map = debuntu repository.debuntu.org; ubuntu archive.ubuntu.com/ubuntu; ubuntu-updates archive.ubuntu.com/ubuntu; ubuntu-security security.ubuntu.com/ubuntu
Позвольте мне немного пояснить. Здесь я создал отображения в следующие имена:
  • debuntu в узел repository.debuntu.org
  • ubuntuand ubuntu-updates в узел archive.ubuntu.com/ubuntu
  • и ubuntu-security в узел security.ubuntu.com
Теперь, чтобы получить доступ к определённому репозиторию, нам требуется просто добавить псевдоним к нашему серверу с кешем репозиториев, например: компьютер_с_кэшем_репозитория:порт/псевдоним

Например, мы можем получить доступ к репозиторию debuntu через http://repository-cache:3142/debuntu и к репозиторию ubuntu secutiry через http://repository-cache:3142/ubuntu-security.

2.2. Включение apt-cacher'а

Чтобы запустить apt-cacher, его нужно включить из файла /etc/default/apt-cacher. Откроем файл /etc/default/apt-cacher и установим AUTOSTART в 1:
AUTOSTART=1
Теперь перезапустим apt-cacher:
$ sudo /etc/init.d/apt-cacher restart
Теперь apt-cacher запущен, время исправить файлы всех наших клиентов /etc/apt/sources.list на каждом узле в сети, где мы хотим использовать компьютер с кэшем репозитория.

3. Настройка файла sources.list клиентов и серверов

Настало время настроить на клиентских узлах файлы источников apt: /etc/apt/sources.list. Важно использовать кэш репозитория ткаже и на самом сервере, таким образом любые обновления, выполненные сервером, будут заполнять кэш.

Исходный /etc/apt/sources.list:
#репозиторий debuntu
deb http://repository.debuntu.org edgy multiverse
deb-src http://repository.debuntu.org edgy multiverse

#главный репозиторий ubuntu
deb http://archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse

#репозиторий обновлений ubuntu
deb http://archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse

#репозиторий обновлений безопасности ubuntu
deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
Чтобы использовать наш кэш репозитория, эти записи необходимо заменить на:
#репозиторий debuntu
deb http://repository-cache:3142/debuntu edgy multiverse
deb-src http://repository-cache:3142/debuntu edgy multiverse

#главный репозиторий ubuntu
deb http://repository-cache:3142/ubuntu edgy main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu edgy main restricted universe multiverse

#репозиторий обновлений ubuntu
deb http://repository-cache:3142/ubuntu-updates edgy-updates main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu-updates edgy-updates main restricted universe multiverse

#репозиторий обновлений безопасности ubuntu
deb http://repository-cache:3142/ubuntu-security edgy-security main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu-security edgy-security main restricted universe multiverse
Классно, теперь чтобы каждый каждый узел получал пакеты .deb из нашего репозитория, нужно запустить:
$ sudo apt-get update
на каждом узле.

4. Импорт существующих пакетов из /var/cache/apt/archives/ в репозиторий apt-cacher

Может случиться, что ваш сервер уже имеет большое количество пакетов, находящихся в локальном кэше репозитория: /var/cache/apt/archives/. apt-cacher содержит инструмент, позволяющий имортировать эти файлы в репозиторий apt-cacher'а.

Это большое количество полезных сценариев можно найти в каталоге /usr/share/apt-cacher/. Интересующий нас называется apt-cacher-import.pl. Для импорта файлов .deb из каталога /var/cache/apt/archives в репозиторий apt-cacher запустите:
$ sudo /usr/share/apt-cacher/apt-cacher-import.pl /var/cache/apt/archives
Его нужно запускать от имени пользователя root или файлы .deb могут не скопироваться в кэш репозитория.

Теперь каталог /var/cache/apt-cacher/packages/ должен пополниться целой кучей пакетов.

5. Получение отчётов об использовании вашего кэша репозитория

Если вы оставили значение директивы generate_reports равным 1, apt-cacher будет составлять отчёты по использованию кэша каждый день.

Вы можете получить к ним доступ по адресу: http://repository-cache:3142/report

Если вам нужно перегенерировать отчёт, запустите:
$ sudo /usr/share/apt-cacher/apt-cacher-report.pl
6. Заключение

apt-cacher - это простой и эффективный пакет, который одновременно экономит ваше время и пропускную способность канала при использовании нескольких компьютеров, работающих на одинаковом дистрибутиве, как это бывает в домашней сети или в компании.

четверг, 17 сентября 2009 г.

Postfix и Spamassassin: Как фильтровать спам

Перевод статьи: Postfix and Spamassassin: How to filter spam

Postfix - это популярный агент передачи почты (mail transport agent - MTA), используемый на многих системах Unix/Linux. В наше время сети переполнены спамом, но к счастью, существует способ отфильтровать их с помощью такой программы, как spamassassin.

Эта статья не рассматривает процесс установки postfix. Для этого вы можете обратиться к статье "Как запустить postfix с виртуальными доменами".

1. Начало

На этот момент у вас должен иметься работающий SMTP-сервер под управлением postfix. Потребуется пара пакетов, которые нужно установить: spamassassin и его клиент spamc.
$ sudo apt-get install spamassassin spamc
Пакет spamassassin содержит демон, который может быть вызван пользовательской программой, например procmail... но также может быть встроен в агент передачи почты, такой как postfix.

2. Использование spamassassin как самостоятельного демона

В этой части урока, мы запустим spamassassin под его собственным пользователем (по умолчанию в debian sarge - это root), поменяем некоторые настройки и заставим postfix использовать spamassassin в качестве фильтра содержимого на выходе очереди. Это означает, что содержимое проверяется фильтрами spamassassin после того, как postfix решил его доставить.

2.1. Настройка spamassassin

И так, теперь вы установили spamassassin из репозитория debian. С настройками по умолчанию spamassassin отключен, но при включении будет запускаться от имени пользователя root. Чтобы избежать этого, мы заведём особого пользователя и группу для spamassassin. Выполните следующие команды от имени пользователя root:
# groupadd -g 5001 spamd
# useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
# mkdir /var/lib/spamassassin
# chown spamd:spamd /var/lib/spamassassin
Теперь нам нужно поменять некоторые настройки в файле /etc/default/spamassassin и удостовериться, что у вас получились следующие значения:
ENABLED=1
SAHOME="/var/lib/spamassassin/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s ${SAHOME}spamd.log"
PIDFILE="${SAHOME}spamd.pid"
Таким образом мы настроили запуск демона spamd от пользователя spamd, создали его собственный домашний каталог (/var/lib/spamassassin/) и заставили его ввести журнал в файле /var/lib/spamassassin/spamd.log

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

Теперь нам нужно задать spamassassin некоторые правила. Настройки по умолчанию вполне подходящие, однако вы можете захотеть слегка подправить их. Давайте отредактируем файл /etc/spamassassin/local.cf и приведём его к следующему виду:
rewrite_header Subject [***** SPAM _SCORE_ *****]
required_score 2.0
# Чтобы использовать _SCORE_ нам нужно установить report_safe в 0
# Если эта опция установлена в 0, у поступающего спама к заголовками будут добавлены
# записи "X-Spam-", но изменений в тело не вносится.
report_safe 0
# Включить систему Бэйс
use_bayes 1
use_bayes_rules 1
# Включить автообучение Бэйс
bayes_auto_learn 1
# Включить или выключить проверки сети
skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0
Здесь мы указали spamassassin стандартные настройки spamd для перезаписи темы письма на [***** SPAM _SCORE_ *****], где _SCORE_ - это количество баллов, назначаемых spamassassin после различных тестов, только если действительное значение баллов выше или равно 2.0. Так, письма с баллами ниже 2 изменены не будут.

Чтобы позволить использование _SCORE_ в директиве rewrite_header, вы должны установить report_safe в 0.

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

В последнем разделе мы отключаем сотрудничающие сети, такие как pyzor, razor2 и dcc. Эти сотрудничающие сети ведут актуальный каталог известных контрольных сумм для писем, которые были определены как спам. Они могут быть интересны, но я не использую их здесь, поскольку я считаю, что spamassassin справляется со спамом достаточно хорошо, используя только эти правила.

Теперь запустим spamd следующей командой:
# /etc/init.d/spamassassin start
Мы почти закончили, нам осталось настроить postfix таким образом, чтобы он передавал все письма, которые нужно доставить в локальные почтовые ящики, в spamassassin.

3. Заставляем Postfix вызывать Spamassassin

Теперь нам нужно сообщить postfix о необходимости использовать spamassassin. В нашем случае spamassassin будет вызываться только единожды, когда postfix завершит обработку письма.

Чтобы сообщить postfix использовать spamassassin, мы отредактируем файл /etc/postfix/master.cf и заменим строку:
smtp inet n - - - - smtpd
на:
smtp inet n - - - - smtpd
  -o content_filter=spamassassin
и затем в конец файла master.cf, добавим:
spamassassin unix - n n - - pipe
  user=spamd argv=/usr/bin/spamc -f -e
  /usr/sbin/sendmail -oi -f ${sender} ${recipient}
и наконец, наш фильтр спама настроен, нам осталось только перезагрузить настройки postfix и всё должно быть готово.
# /etc/init.d/postfix reload
4. Заключение

Это один из возможных способов настройки, который позволяет фильтровать спам с помощью spamassassin и postfix.

Существуют другие способы сделать то же самое (на которых я остановлюсь в другой раз), например воспользоваться amavis, который использует spamassassin без необходимости использовать демон spamassassin (spamd).

Представленный вариант по прежнему отправляет все письма их получателям (хотя кто-то вроде меня предпочитает их отклонять и выбрасывать письма, помеченные как спам). Можно настроить правило в своём почтовом или веб-клиенте, фильтруя все письма содержащие тему "[***** SPAM" и перемещая их в нужное место в клиенте, так что вы сможете легко отделить их от вашей ценной почты, но в конце концов, если они здесь, то вам незачем удалять их, потому что в спаме иногда попадаются действительно важные письма.

В конце концов, знаменитые почтовые провайдеры, такие как yahoo, google, hotmail ... поступают так, пусть и у вас будут каталоги "Спам" и "Письма".

Надеюсь, что кому-то помог.

Postfix и Postgrey: Проактивный способ фильтрации спама

Перевод статьи: Postfix and Postgrey: A proactive approach to spam filtering

Серый список - это ещё один способ избежать переполнения вашего почтового ящика спамом. Известная программа для борьбы со спамом - это spamassassin, который фильтрует письма. Серый список не пытается заменить такие программы, он работает как мощный проактивный барьер, который уменьшает общее количество спама, получаемое вашим почтовым сервером.

1. Введение

Серый список - это хороший способ борьбы со спамом, основная идея которого состоит в том, что почтовые серверы спамеров не соответствуют спецификации стандартов RFC. Главная мысль состоит в том, что почтовый сервер должен пытаться доставить письмо позже, если его не удалось доставить сразу. Отправляя одновременно много писем, спамеры не могут тратить так много ресурсов на повторную отправку писем, если письма не могут быть доставлены сразу. Поэтому если письмо не может быть доставлено с первого раза, они не пытаются отправить его снова.

Основываясь на этой идее, серый список просто отклоняет любое письмо из недоверенного домена, выдавая код ответа 450, который означает "Я не могу ответить на ваш запрос прямо сейчас, пожалуйста, попробуйте позже".

Поскольку почтовый сервер спамера обычно не соответствует RFC, он не будет повторять попытки и поэтому вы не получите спам.

2. Postgrey

2.1. Введение

Postgrey - это сервер политики postfix, реализующий серый список.

Он действительно легко интегрируется в postfix и действительно эффективен.

Postgrey хранит записи-триплеты: IP_КЛИЕНТА / ОТПРАВИТЕЛЬ / АДРЕСАТ. Если этот триплет появился впервые или он впервые появился менее 5 минут назад, запись помещается в серый список, а письмо отбрасывается с сообщением о временной ошибке. Если тот же триплет появится через 5 минут и до истечения 35 дней, то письмо будет принято.
Отметим, что 5 минут и 35 дней - это значения по умолчанию. Позже я объясню, как их можно поменять.
2.2. Установка

Для Postgrey существуют готовые пакеты в основной поставке Debian/Ubuntu, их очень легко установить. Вам просто нужно запустить:
$ sudo apt-get install postgrey
На системах подобных Debian, postgrey работает "из коробки". По умолчанию он привязывается к интерфейсу локальной петли (127.0.0.1) на порт 60000. Поэтому, служба postgrey не доступна снаружи.

Теперь, нам нужно сообщить postfix, что он должен использовать сервер политики postgrey.

3. Настройка postfix

Как было сказано ранее, интегрировать postgrey в postfix действительно просто (вам потребуется postfix версии 2.1 или выше). Все необходимые настройки вносятся в /etc/postfix/main.cf. Откройте /etc/postfix/main.cf и добавьте check_policy_service inet:127.0.0.1:60000 в конец smtpd_recipient_restrictions. У вас должно получиться что-то вроде этого:
smtpd_recipient_restrictions = permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination,
  check_policy_service inet:127.0.0.1:60000
Отметим, что ваши настройки могут быть другими.
Перезагрузим postfix:
$ sudo /etc/init.d/postfix reload
и как только вы это сделаете, вы получите работающую политику серого списка и почтовый сервер postfix начнёт временно отклонять поступающие письма. Вы увидите:
Nov 23 21:42:10 mymailserver postfix/smtpd[4256]: NOQUEUE: reject: RCPT from 
spammerrelay.com[xxx.xxx.xxx.xxx]: 450 <recipient@spammed.com>: Recipient
address rejected: Greylisted for 300 seconds (see http://isg.ee.ethz.ch/tools
/postgrey/help/spammed.com.html); from=<sender@spammer.com>
to=<recipient@spammed.com> proto=ESMTP helo=<spammerrelay.com>
Начиная с этого момента общее количество спама, достигшее вашего почтового ящика кардинально уменьшится.

Теперь, тем кто хочет подстроить postgrey, настало время заглянуть в него немного глубже.

4. Подстройка Postgrey

4.1. Файлы настройки Postgrey

Есть два главных файла в каталоге /etc/postgrey: whitelist_clients и whitelist_recipients.

В файле whitelist_clients (белый список клиентов), вы можете определить список почтовых серверов, которые вы не хотите подвергать фильтрации по серому списку. Например потому, что вы доверяете этим узлам, или потому что это узел, который имеет проблемы с серым списком.

Адреса клиентов должны быть указаны одним из следующих способов:
  • domain.addr : полностью определённое доменное имя
  • WWW.XXX.YYY.ZZZ : IP-адрес
  • /regex/ : регулярное выражение
В файле whitelist_recipients (белый список адресатов), вы можете указать список адресатов, на которых не распространяется действие серого списка.

Адреса получателей можно указать одним из следующих способов:
  • domain.addr : полностью определённое доменное имя
  • имя@ : каждое "имя" пользователя для любого домена будет обрабатываться как расширенный адрес, например имя+нечто@.*
  • name@domain : письма для name@domain как расширенный адрес
  • /regex/ : регулярное выражение
4.2. Опции демона postgrey

Ранее я упомянул о том, что postgrey подвергает письмо фильтрации по серому списку на 5 минут, если его триплет IP_КЛИЕНТА / ОТПРАВИТЕЛЬ / ПОЛУЧАТЕЛЬ встретился первый раз или если последний раз триплет встречался больше, чем 35 дней назад.

Так вот, эти настройки могут быть изменены при запуске демона postgrey. На системах подобных Debian, эти настройки находятся в /etc/default/postgrey.

По умолчанию этот файл содержит:
POSTGREY_OPTS="--inet=127.0.0.1:60000"
Теперь представим, что вы хотите блокировать письма по серому списку на 2 минуты, и позволить известному триплету проходить через серый список, если он удачно преодолел политику серого списка менее чем 20 дней назад. Тогда вам нужно воспользоваться следующими настройками:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20"
Также, postgrey предлагает приятную возможность, которая позволяет помещать в белый список те триплеты, для которых более 5 раз (значение по умолчанию) были успешно приняты письма после прохождения политики серого списка и если клиент последний раз встретился до истечения срока --max-age.

Значение по умолчанию можно изменить с помощью опции --auto-whitelist-clients. Установив его в 0, вы отключите эту возможность.

Если вы захотите заменить это значение указанными выше, измените файл /etc/default/postgrey и укажите в опции --auto-whitelist-clients необходимое значение, например:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20 --auto-whitelist-clients=10"
5. Получение отчётов от postgrey

Postgrey отправляет статистику с помощью утилиты postgreyreport. С помощью postgreyreport вы сможете получить отчёт о триплетах, которые не прошли серый список (означает, что разница между первым и последним разом, когда они встретились, меньше --delay=N и поэтому они могут быть спамом).

Для получения отчёта вы можете воспользоваться следующей командной строкой:
# cat /var/log/mail.log | postgreyreport \
  --nosingle_line --check_sender=mx,a --show_tries \
  --separate_by_subnet=":===============================================================================================\n"
Она выведет нечто вроде следующего:
:===============================================================================================
unknown XXX.XXX.XXX.XXX
1 spammer1@spammer1.com user1@host1.com
1 spammer2@spammer2.com user2@host2.com
1 spammer3@spammer3.com user3@host3.com
:===============================================================================================
unknown YYY.YYY.YYY.YYY
1 spammer4@spammer4.com user4@domain1.com
:===============================================================================================
unknown ZZZ.ZZZ.ZZZ.ZZZ
1 spammer5@spammer5.com user1@host1.com
1 spammer6@spammer6.com user1@host1.com
1 spammer7@spammer7.com user2@host2.com
:===============================================================================================
6. Заключение

Postgrey действительно просто установить и вы получаете очень эффективно работающую систему сразу после её включения. Обратной стороной медали является то, что первое письмо от конкретного отправителя дойдёт с задержкой по меньшей мере на 5 минут (или на значение, указанное вами в настройках --delay).

Если это является для вас проблемой, вы вольны добавить в белый список /etc/postgrey/whitelist_clients доверенные домены отправителей.

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