Бесплатные решения 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
