2009-11-03

Thunderbird autoconfig

Давно как-то сделал в своей конторе автоконфигурацию почтового клиента путем чтения конфига с web-сервака. Очень удобная фича, не надо каждому новому пользаку настраивать thunderbird для работы с почтой. К тому же можно на лету изменять какие необходимые параметры, и они поменяются у всех! Шикарно! Вот настала пора сделать это снова, начинаем путь "per rectum ad astra", как говорили в компьютерре :-D

Цель - сделать msi пакет, готовый для установки в домене. Ставишь пакет - имеешь почтовый клиент, который настраивается под каждого конкретного пользователя сам. Чудеса! Как это работает - thunderbird ломится по ntlm на указанный url, на серваке скрипт выцепляет имя пользователя, лезет в active directory, смотрит мыло и другие полезные сведения, (как например, если пользователь залочен - не давать ему конфиг), формирует конфиг и отдает thunderbird. Плюсы очевидны.
Минусы:
  • если сервак недоступен, то thunderbird вешает систему почти намертво
  • если сервак доступен - то процесс автоконфигурации занимает ощутимое время
Зависит от скорости выполнения скрипта и качества соединения. В филиале в Челябинске (а сервак с конфигом в Петербурге) по vpn конфиг сливается довольно долгое время, запуск thunderbird'а длится где-то секунд 5-6.

Ах да, идея и немножко скрипта позаимствовано у автора сей статьи

Остальные домыслы и конфигурация честно нарыта с помощью гугля.

Итаг, начнем.

Я делаю пакет с помощью халявной wininstall le. Значитцо прогоняем мастер, делаем слепок системы. Далее ставим thunderbird. Ставим необходимые расширения и темы. Как их ставить в профиль самой программы - хз. Нашел один способ, им и воспользовался:
# В cmd chdir'имся в папку thunderbird'a
# И вводим следующее
# Thunderbird при этим не должен быть запущен ранее, насколько я понял
C:\Program Files\Mozilla Thunderbird>thunderbird.exe -install-global-extension "path_to_extension"

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

Далее надо настроить автоконфиг:
# Топаем в C:\Program Files\Mozilla Thunderbird\greprefs
# Эти строки надо изменить/добавить в all.js
pref("general.config.obscure_value",0); // Не спрашивайте меня что это значит, сам не помню
pref("general.config.filename","thunderbird.cfg");
pref("network.automatic-ntlm-auth.allow-proxies", true);
pref("network.automatic-ntlm-auth.trusted-uris", "IP нашего web-сервера");
# Больше ничего там не менял
# Топаем в C:\Program Files\Mozilla Thunderbird
# Создаём файлик thunderbird.cfg с таким содержанием
lockPref("general.config.vendor","mozweb32");
# Необязательно писать mozilla.js - это просто имя файла на серваке, там живет скрипт с автоконфигом
lockPref("autoadmin.global_config_url","http://IP нашего web-сервера/mozilla.js");
lockPref("autoadmin.append_emailaddr",false);

Ну всё, вроде, пакуем пакет. С помощью того же wininstall делаем "after" snapshot, я еще в консоле wininstall'a кастрирую пакет немного, чтобы виндовые файлы всякие пакет не трогал, и делаю ему compress.

Далее на web-сервере делаем виртуалхост
<VirtualHost *:80>
        ServerAdmin webmaster@xxxx.ru
        ServerName thunderconfig.xxxx.ru
        DocumentRoot    /usr/local/www/thunderbird/
        ErrorLog /var/log/www/thunderbird.xxxx.ru-error.log
        CustomLog /var/log/www/thunderbird.xxxx.ru-access.log combined
        ScriptAlias     /thunderbird/   /usr/local/www/thunderbird/
        AddHandler cgi-script mozilla.config printenv test
                <Directory "/usr/local/www/thunderbird/">
                        AllowOverride None
                        SetHandler cgi-script
                        Options ExecCGI
                        AuthType NTLM
                        AuthName "ThunderBird Autoconfig Server"
                        NTLMAuth on
                        NTLMAuthoritative on
                        NTLMBasicAuth off
                        NTLMBasicRealm XXXX
                        NTLMDomain XXXX.RU
                        NTLMServer boss1
                        Require valid-user
                        Order allow,deny
                        Allow from all
                </Directory>
</VirtualHost>

И да, надо mod_ntlm2 ставить. И так же mod_perl, ибо скрипт на перле. А для скрипта на перле еще ldap :-D

Скрипт выкладывать не буду, а то засрут еще какие-нибудь аццкеи perl программеры. Кому надо - обращайтесь в почту...