Бесплатные решения Mozilla Foundation под Windows для электронной почты и интернета уже давно используются в нашей организации — функциональные, удобные и относительно стабильные.
И всё бы ничего — но рано или поздно встает вопрос об автоматизации обновления этих продуктов.
Пробороздив просторы интернета, удалось узнать, что существует несколько интересных способов обновлений.
Один из них — создание собственного сервера обновлений — в общем всем хороший способ, но с ходу не получилось с ним разобраться (если у кого-то есть опыт — делитесь!). Доступно по ссылке.
Я же расскажу про другой способ.
Итак, предполагаем что в наличии у нас WIN-домен (групповые политики нам в данном случае не нужны) и обновлять мы собрались на машинах в домене. Для определенности выберем Firefox (в случае с Thunderbird все идентично).
Изначально нам нужно зайти на сайт обновлений и скачать последний архив обновлений, например, для версии 3.6 скачать можно здесь. На сайте есть два вида обновлений — инкрементальные и полные. Мы будем использовать полные, т.к. инкрементальные подразумевают, что у нас стоит предыдущая версия программы (что в общем случае не так).
Далее, что нам предстоит сделать — это переименовать этот файл в update.mar, создать папку \\pdc\netlogon\packages\firefox, где pdc — наш контроллер домена. Также нужно будет создать пользователя installuser с полномочиями администратор домена.
К сожалению, у моего способа есть существенный минус — пароль этого пользователя будет храниться в открытом виде в коде .js файла.
Содержимое папки \\pdc\netlogon\packages\firefox будет таким:
update.bat
psexec.exe
updater.exe
updater.ini
update.mar
psexec.reg
Итак, по порядку
update.bat:
psexec.exe — тот самый psexec. Взять можете на официальном сайте.
updater.exe — берете в папке с Firefox (я использовал версию 1.8.1)
updater.ini — маленький конфиг для updater.exe:
update.mar — тот самый файл обновлений.
psexec.reg:
Далее положим в netlogon файлик setup_firefox_36.js:
И самое последнее, что осталось сделать, это прописать в скрипте входа в систему для пользователей строку:
start wscript \\pdc\netlogon\setup_firefox_36.js
И всё бы ничего — но рано или поздно встает вопрос об автоматизации обновления этих продуктов.
Пробороздив просторы интернета, удалось узнать, что существует несколько интересных способов обновлений.
Один из них — создание собственного сервера обновлений — в общем всем хороший способ, но с ходу не получилось с ним разобраться (если у кого-то есть опыт — делитесь!). Доступно по ссылке.
Я же расскажу про другой способ.
Итак, предполагаем что в наличии у нас WIN-домен (групповые политики нам в данном случае не нужны) и обновлять мы собрались на машинах в домене. Для определенности выберем Firefox (в случае с Thunderbird все идентично).
Изначально нам нужно зайти на сайт обновлений и скачать последний архив обновлений, например, для версии 3.6 скачать можно здесь. На сайте есть два вида обновлений — инкрементальные и полные. Мы будем использовать полные, т.к. инкрементальные подразумевают, что у нас стоит предыдущая версия программы (что в общем случае не так).
Далее, что нам предстоит сделать — это переименовать этот файл в update.mar, создать папку \\pdc\netlogon\packages\firefox, где pdc — наш контроллер домена. Также нужно будет создать пользователя installuser с полномочиями администратор домена.
К сожалению, у моего способа есть существенный минус — пароль этого пользователя будет храниться в открытом виде в коде .js файла.
Содержимое папки \\pdc\netlogon\packages\firefox будет таким:
update.bat
psexec.exe
updater.exe
updater.ini
update.mar
psexec.reg
Итак, по порядку
update.bat:
mkdir "%PROGRAMFILES%\Mozilla Firefox" >>nul 2>&1
cd "%PROGRAMFILES%\Mozilla Firefox"
%1\firefox-update\updater.exe %1\firefox-update 0
psexec.exe — тот самый psexec. Взять можете на официальном сайте.
updater.exe — берете в папке с Firefox (я использовал версию 1.8.1)
updater.ini — маленький конфиг для updater.exe:
; This file is in the UTF-8 encoding
[Strings]
Title=Обновление Firefox
Info=Идет обновление Firefox...
[PostUpdateWin]
ExeRelPath=uninstall\helper.exe
ExeArg=/PostUpdate
update.mar — тот самый файл обновлений.
psexec.reg:
REGEDIT4
[HKEY_CURRENT_USER\Software\SysInternals]
[HKEY_CURRENT_USER\Software\SysInternals\PsExec]
"EulaAccepted"=dword:00000001
Далее положим в netlogon файлик setup_firefox_36.js:
var WshShell = WScript.CreateObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
// получаем имя компьютера, имя пользователя,
// расположение временной папки и папки Firefox
var WshProcEnv = WshShell.Environment("PROCESS");
var strTEMP = WshProcEnv("TEMP");
var un = WshProcEnv("USERNAME");
var compname = WshProcEnv("COMPUTERNAME");
var pf = WshProcEnv("PROGRAMFILES");
var firefox_path = pf+"\\Mozilla Firefox";
// переменные, содержащие IP контроллера домена
// и имя домена
var pdc = "192.168.1.200";
var domain = "OUR_DOMAIN";
// шаблон версии браузера - если тек. версия подпадает
// под этот шаблон, то обновления не будет - чтобы не обновлять
// браузер при каждом входе в систему
var version = /3\.6\./;
// описываем пользователей и компьютеры
// для которые обновления НЕ БУДЕТ
users = new Array();
// users.push('katsy');
comps = new Array();
// comps.push('bdc');
// для описанных компьютеров и пользователей - выход
for (i = 0; i < users.length; i++)
if (users[i].toLowerCase() == un.toLowerCase())
WScript.Quit();
for (i = 0; i < comps.length; i++)
if (comps[i].toLowerCase() == compname.toLowerCase())
WScript.Quit();
// запускаем в режиме отлова ошибок
try
{
// читаем файл application.ini
// если его нет, то значит версия <3
var re = new RegExp("^Version=(.*)$","i");
ForReading = 1;
if (FSO.FileExists(firefox_path+"\\application.ini"))
{
f = FSO.OpenTextFile(firefox_path+"\\application.ini", ForReading);
while (!f.AtEndOfStream)
{
str = f.ReadLine();
if (re.exec(str))
{
if (version.exec(RegExp.$1))
WScript.Quit();
}
}
f.Close();
}
}
catch(e) {}
// создаем папку firefox-update, затем импортируем EULA от psexec - без этого psexec работать не будет
// затем копируем файлы и производим привилегированный запуск
try
{
FSO.CreateFolder(strTEMP+"\\firefox-update")
}
catch(e) {}
// for EULA-accept import
WshShell.Run("regedit -s \\\\"+pdc+"\\netlogon\\packages\\firefox\\psexec.reg",0,true);
WshShell.Run("cmd /C copy /Y \\\\"+pdc+"\\netlogon\\packages\\firefox\\psexec.exe "+strTEMP+"\\firefox-update",0,true);
WshShell.Run("cmd /C copy /Y \\\\"+pdc+"\\netlogon\\packages\\firefox\\updater.* "+strTEMP+"\\firefox-update",0,true);
WshShell.Run("cmd /C copy /Y \\\\"+pdc+"\\netlogon\\packages\\firefox\\update.* "+strTEMP+"\\firefox-update",0,true);
// строчку можно раскомментировать, если обновление нужно сделать только там, где Mozilla FireFox уже есть
// if (FSO.FolderExists(firefox_path))
{
WshShell.CurrentDirectory = strTEMP+"\\firefox-update";
WshShell.Run("psexec.exe -u "+domain+"\\installuser -p ПАРОЛЬ cmd /C "+strTEMP+"\\firefox-update\\update.bat "+strTEMP,0,false);
}
И самое последнее, что осталось сделать, это прописать в скрипте входа в систему для пользователей строку:
start wscript \\pdc\netlogon\setup_firefox_36.js