Автоматическая настройка Mozilla

автор: Александр Дейтер
дата последнего исправления: 05.08.2004

Оргинал: mozilla.ru
Все мы сталкиваемся с необходимостью настройки клиентского программного обеспечения. Обычно это самая неинтересная и нудная работа, которую нам приходиться регулярно выполнять. Поэтому всегда хочется найти способ избежать ручной работы и позволить программным продуктам самим себя настраивать. Эта статья посвящена автоматической настройке Mozilla.

Принятые соглашения

Все нижеописанные действия применимы относительно следующих соглашений:
  1. Пользователи читают почту посредством протокола IMAP4, используя безопасную аутенфикацию (CRAM-MD5, NTLM).
  2. Прочитанные, отправленные удаленные сообщения и черновики хранятся на сервере. Это позволяет пользователям получить доступ к своей почте с любого рабочего места.
  3. Хранить часть сообщений локально могут только те пользователи, которые входят в определенную группу. Необходимость хранения сообщений на рабочей станции может быть вызвана большим объемом почты, либо другими причинами.
  4. Пользователи могут отправлять сообщения посредством протокола SMTP, только пройдя проверку подлинности, используя безопасную аутенфикацию (CRAM-MD5, NTLM).
  5. Пользователи не могут менять большую часть настроек своих учетных записей.
  6. Папки Отправленные, Шаблоны, Черновики и Trash должны существовать в IMPAP ящике каждого пользователя и пользователь должен быть на них подписан. Проще всего их создавать и подписывать на них пользователя сразу при создании ящика.

Принятые обозначения

  1. Команды shell: $ ls -l
  2. Пути и имена файлов: C:\file.txt
  3. Директивы конфигурационных файлов: SetHandler perl-script

Сервера

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

Программные пакеты

Программные пакеты, которые будут задействованы в процессе настройки:
  1. Локализованная сборка Mozilla. Рабочие версии 1.5 и 1.6.
  2. Apache, доступный в коллекции портов FreeBSD (www/apache13). Рабочая версия 1.3.31.
  3. Perl, доступный в коллекции портов FreeBSD (lang/perl5). Рабочая версия 5.6.1.
  4. Mod_perl, доступный в коллекции портов FreeBSD (www/mod_perl). Рабочая версия 1.28.
  5. Модуль Apache::Reload , доступный в коллекции портов FreeBSD (www/p5-Apache-Reload). Рабочая версия 0.07.
  6. OpenLDAP,  доступный в коллекции портов FreeBSD (net/openldap22-server). Рабочая версия 2.2.14.

Переменные

MOZILLA_HOME - каталог, куда установлен Mozilla, например, c:\Program Files\mozilla.org\Mozilla.
MOZILLA_DEBUG - переменная окружения, влияющая на вывод диагностических сообщений.

Центральный файл настройки Mozilla

Он находится в MOZILLA_HOME и представляет собой javascript encoded файл (byteshift/rotary). Создаётся javascript encoded файл в два этапа. Для начала создадим обычный текстовый файл mozweb32.js . В нём мы опишем поставщика настройки и местонахождение настроек поставщика:

lockPref("general.config.vendor", "mozweb32");
lockPref("autoadmin.global_config_url", "http://mozconfig.komi.mts.ru/mozilla.config");

Для того, чтобы перевести его в byteshift/rotary формат, воспользуемся скриптом moz-byteshift.pl :

$ ./moz-byteshift.pl -s 13 < mozweb32.js > mozweb32.cfg

Полученный mozweb32.cfg нужно скопировать в MOZILLA_HOME. Чтобы этот
конфигурационный файл использовался при работе Mozilla, его необходимо описать в
конце файла MOZILLA_HOME\defaults\pref\all.js:

pref("general.config.filename", "mozweb32.cfg");
pref("general.config.vendor", "mozweb32");

Чтобы не делать этого на всех рабочих станциях, можно автоматизировать сам процесс установки. Я ставлю Mozilla во время автоматической сетевой установки Windows, при помощи VBS скрипта mozilla.vbs . Помимо установки Mozilla, FlashPlayer и Shockwave, этот скрипт копирует mozweb32.cfg в MOZILLA_HOME и описывает его в MOZILLA_HOME\defaults\pref\all.js. Для неинтерактивной установки Mozilla
необходимо распаковать установочный пакет и поправить файл config.ini . Вот мой config.ini.diff . Потом из полученных файлов можно сделать самораспаковывающийся архив, указав, что после распаковки нужно выполнить mozilla.vbs. Вот мой комментарий для WinRAR.

Настроенный таким образом, Mozilla при каждом старте любого из своих компонент будет обращаться к http://mozconfig.komi.mts.ru/mozilla.config в надежде найти там свою конфигурацию.

Конфигурация службы каталогов

Для конфигурации Mozilla можно и должно использовать информацию, которая уже хранится в службе каталогов. Например, есть сотрудник службы автоматизации:

dn: cn=Дейтер Александр Валериевич,ou=Служба автоматизации,ou=People,dc=komi,dc=mts,dc=ru
cn: Дейтер Александр Валериевич
facsimileTelephoneNumber: (8212)12-63-78
facsimileTelephoneNumber: 4567
gecos: Alex Deiter
gidNumber: 12345
givenName: Александр
homeDirectory: /home/users/login
initials: Валериевич
jpegPhoto: FF  D8  FF  E0  00  10  4A  46  49  46  00  01  01  01  00  44...
l: Сыктывкар
loginShell: /bin/csh
mail: login@komi.mts.ru
mailHost: server.komi.mts.ru
mobile: (912)123-45-67
o: Филиал ОАО "Мобильные ТелеСистемы" в г.Сыктывкаре, РК.
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: sambaSamAccount
objectClass: top
ou: Служба автоматизации
ou: People
postalAddress: Советская 72
postalCode: 167000
sn: Дейтер
st: Республика Коми
streetAddress: Советская 72
telephoneNumber: (8212)12-34-56
telephoneNumber: 8678
title: технический специалист
uid: login
uidNumber: 6789
userPassword: {SSHA}...
...

Этой информации более чем достаточно для настройки учётной записи почты, телеконференций и адресной книги. Необходимо лишь обеспечить доступ на чтение для атрибутов: uid, cn, gecos, mail, mailHost, o.

Скрипт формирования настроек Mozilla

Он реализован в виде модуля perl и исполняется на стороне web сервера. Его надо отредактировать, изменив минимум шесть переменных:
  1. $confserver - имя или ip адрес Вашего web сервера, например, $confserver="mozconfig.komi.mts.ru" .
  2. $ldapserver - имя или ip адрес Вашего ldap сервера, например, $ldapserver="ldap.komi.mts.ru" .
  3. $newsserver - имя или ip адрес Вашего news сервера, например, $newsserver="news.komi.mts.ru" .
  4. $basedn - устанавливает searchbase для поиска атрибутов пользователей в дереве каталогов, например,  $basedn="ou=People,dc=komi,dc=mts,dc=ru" .
  5. $newsers - задает posix группу пользователей, которые читают news конференции. Т.е. если пользователь login входит в группу $newsers, ему будет настраиваться учетная запись news конференций.
  6. $lfolders - задает posix группу пользователей, которым необходимо настраивать учетную запись Local folders, для хранения части почтовых сообщения локально.
Все остальные измененения по вкусу и необходимости. Для того, чтобы использовать несколько web/ldap серверов, можно сделать несколько A записей в DNS, например:

ldap
IN
A
1.1.1.1
ldap
IN
A
2.2.2.2
mozconfig
IN
A
3.3.3.3
mozconfig
IN
A
4.4.4.4

Конфигурация web сервера

Необходимо добавить в httpd.conf следующее:

<PERL>
        use lib qw(/var/www/lib);
</PERL>

PerlInitHandler Apache::Reload
PerlSetVar ReloadAll Off
PerlModule MozConfig

<Location /mozilla.config>
        SetHandler      perl-script
        PerlHandler     MozConfig
</Location>

Пояснения к конфигурационному файлу:
  1. /var/www/lib - каталог, где apache будет искать модули perl. В этом каталоге должен находиться модуль MozConfig.
  2. Apache::Reload - модуль, который заставляет apache перезагружать модули, модифицированые после старта сервера. Без него нам придется перезапускать apache при каждом изменении содержимого perl модулей.
  3. MozConfig - perl модуль, который будет формировать установки для Mozilla.
  4. PerlHandler MozConfig назначает обработчик для URL /mozilla.config.

Отладка

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

Пример работы

После запуска Mozilla проверяем правильность настройки. Меню правка, настройки, вкладка прокси серверы (пример proxy.js):

настройка proxy сервера

Проверяем работоспособность адресной книги:

поиск в адресной книге
 
Проверяем работоспособность почтового клиента:

учетная запись imap и nntp

Поскольку наш пользователь входит в группу $newsers, ему настроилась учетная запись news конференций. Учетная запись Local Folders у него отсутствует, потому что он не входит в группу $lfolders.

Убеждаемся в том, что пользователь не может менять настройки своей учетной записи:

настройки учетной записи

Ошибки

В процессе написания и последующей эксплуатации были замеченные следующие ошибки:
  1. Оригинальные сборки Mozilla с http://www.mozilla.org разных версий могут  подвисать на 10-15 секунд при выполнении ldap запроса. Самодельные сборки и русские сборки Mozilla с http://www.mozilla.ru такого дефекта не имеют.
  2. При отсутствии папок или отсутствии подписки на IMAP папки Отправленные, Шаблоны, Черновики и Trash, некоторые версии Mozilla могут работать с ошибками.
  3. Чтобы Адресная книга в Mozilla отображала атрибут streetAddress, необходимо поправить схему ldap сервера.
  4. Адресная книга в Mozilla не отображает атрибуты, у которых несколько значений. Например, если у сотрудника компании несколько телефонных номеров, в карточке будет видно только первый номер телефона.

Заключение

Описанная методика успешно опробована на 250 рабочих станциях в течении полугода работы.

Благодарности

Арсламбеков Марат Мирасович написал функцию utf8, которая позволяет использовать UTF-8 атрибуты службы каталогов для настройки параметров учетной записи.

Список литературы

  1. Mozilla AutoConfig by Jehan Procaccia
  2. Understanding client configuration by developer.netscape.com