Как стать автором
Обновить

Firefox и RamDisk. Автоматизация, бэкап и автообновление

Время на прочтение6 мин
Количество просмотров10K
После написания топика об использовании Google Chrome на рамдиске, я получил несколько просьб сделать то же самое и для Firefox.

Итак… Спустя неделю тестов, выкладываю готовый рецепт по использованию Фокса на рамдиске.

Установка


Нам опять же потребуются:
nnCron, nnBackup (обязательно зарегистрировать!), WinRAR, Gavotte Ramdisk, Wget, побольше оперативки.

Всё это добро устанавливаем, и создаём рамдиск R:\.

Подготовка


Для начала, Фокс надо закрыть :)
В адресной строке проводника пишем: %AppData%\Mozilla\Firefox\Profiles, жмём Enter и открываем папку со своим профилем.
Копируем из папки с профилем все файлы в D:\Backup\Firefox\Profile.
Открываем файл %AppData%\Mozilla\Firefox\profiles.ini, удаляем оттуда всё, и вставляем такой текст:
[General]
StartWithLastProfile=1

[Profile0]
Name=Default User
IsRelative=0
Path=R:\Firefox\Profile
Default=1

(хотя можно и не вставлять, скрипт это сделает сам через некоторое время)

Всё, профиль успешно перенесён.

Немного настроек в файле user.js:

// Кэш и память
user_pref("browser.cache.disk.enable", true); // дисковый кэш нам нужен..
user_pref("browser.cache.disk.capacity", 65535); // ..и ограничим мы его 64 мегабайтами. можно больше, если оперативки не жалко :)
user_pref("browser.cache.memory.enable", false); // кэш в памяти теряет смысл
user_pref("browser.cache.offline.enable", false); // не знаю, зачем это вообще нужно :)
user_pref("browser.turbo.enabled", false); // у кого включено - отключаем. параметр загружает часть Фокса в память для быстрого запуска. у нас теперь и так всё быстро и в памяти
user_pref("config.trim_on_minimize", false); // тоже не надо. параметр скидывает Фокс из памяти в своп. на висте и 7 всеравно не работает

// Обновления
user_pref("app.update.auto", true); //
user_pref("app.update.enabled", false); // эти параметры
user_pref("app.update.mode", 1); // отключают обновление браузера,
user_pref("app.update.silent", true); // и включают
user_pref("browser.search.update", true); // незаметное обновление
user_pref("extensions.update.enabled", true); // плагинов
user_pref("extensions.update.notifyUser", false); //


Что ещё? Кто знает, какие параметры ещё можно изменить, пишите в комментариях.

Скрипты


Теперь беремся за nnCron. В кроне ничего сложного делать не придётся. Надо всего-лишь скопировать плагин ini.spf в папку с плагинами C:\Program Files\nnCron\plugins, и подключить его через меню в трее: Параметры > Плагины > Добавить.
Ну и самое главное — установить скрипты.

Запуск


Запускаем первый скрипт — Loading_Firefox_into_RamDisk. На рамдиске будет создана рабочая копия Фокса, оттуда можно наделать ярлыков на рабочий стол и в панель быстрого запуска.
Этот скрипт будет также загружать Firefox на рамдиск при входе в систему. Вначале загрузится всё, кроме кэша и исполняемого файла firefox.exe. Я сделал так для того, чтобы не запустить Фокс, пока все файлы до конца не скопировались.
Затем скопируется firefox.exe, после чего можно запустить браузер, кэш будет дозагружаться уже параллельно сёрфингу.

#( Loading_Firefox_into_RamDisk
AsLoggedUser
SingleInstance
WatchLogon: "*"
Action:
SWHide
StartIn: "C:\Program Files\nnBackup\"
START-APPW: nnbackup.exe sync -i D:\BackUp\Firefox -o R:\Firefox -s -c -x firefox.exe -dx Cache
FILE-WRITE: "%AppData%\Mozilla\Firefox\profiles.ini" "[General]%crlf%StartWithLastProfile=1%crlf%%crlf%[Profile0]%crlf%Name=Default User%crlf%IsRelative=0%crlf%Path=R:\Firefox\Profile%crlf%Default=1"
S" R:\Firefox\Profile\compatibility.ini" INI-FILENAME
S" Compatibility" INI-SECTION
S" LastPlatformDir" S" R:\Firefox\App" INI-SET-VALUE
S" LastAppDir" S" R:\Firefox\App" INI-SET-VALUE
START-APP: nnbackup.exe sync -i D:\BackUp\Firefox\App -o R:\Firefox\App -c -m firefox.exe
START-APP: nnbackup.exe sync -i D:\BackUp\Firefox\Profile\Cache -o R:\Firefox\Profile\Cache -c
)#


Бэкап


Бэкап у нас инкрементальный, поэтому очень быстрый :) С рамдиска Фокс будет бэкапиться при закрытии и каждый час. Тут всё элементарно: бэкапим профиль без кэша, затем кэш (профиль ценнее! :))

#( BackUp_Firefox
AsLoggedUser
SingleInstance
WatchProcStop: "firefox.exe"
Rule: PROC-EXIST: "firefox.exe" NOT
Action:
SWHide IdlePriority
AsService
StartIn: "C:\Program Files\nnBackup\"
FILE-WRITE: "%AppData%\Mozilla\Firefox\profiles.ini" "[General]%crlf%StartWithLastProfile=1%crlf%%crlf%[Profile0]%crlf%Name=Default User%crlf%IsRelative=0%crlf%Path=R:\Firefox\Profile%crlf%Default=1"
S" R:\Firefox\Profile\compatibility.ini" INI-FILENAME
S" Compatibility" INI-SECTION
S" LastPlatformDir" S" R:\Firefox\App" INI-SET-VALUE
S" LastAppDir" S" R:\Firefox\App" INI-SET-VALUE
START-APPW: nnbackup.exe sync -i R:\Firefox -o D:\BackUp\Firefox -s -ad -c -dx Cache
START-APP: nnbackup.exe sync -i R:\Firefox\Profile\Cache -o D:\BackUp\Firefox\Profile\Cache -ad -da -c
)#

#( BackUp_Firefox_One_Hour
AsLoggedUser
SingleInstance
Time: 0 * * * * *
Action: BackUp_Firefox RUN
)#


Обновление


Обновляться Firefox будет два раза в неделю, а файлы для обновления скрипт будет добывать из ночных сборок.
Можно использовать такие папки:

latest-electrolysis/
latest-firefox-3.0.x-l10n/
latest-firefox-3.0.x/
latest-firefox-3.5.x-l10n/
latest-firefox-3.5.x/
latest-mozilla-1.9.1-l10n/
latest-mozilla-1.9.1/
latest-mozilla-1.9.2-l10n/
latest-mozilla-1.9.2/
latest-mozilla-central-l10n/
latest-mozilla-central/
latest-mozilla1.9.0-l10n/
latest-mozilla1.9.0/
latest-places/
latest-tracemonkey/
latest-trunk/


Скрипт должен подхватить ссылку из любой из этих папок.

Перед скриптом задаётся локальная переменная foxlink, в ней вы укажете полный путь к одной из вышеперечисленных папок.
Вот здесь щёлкаете правой кнопкой на нужной сборке, копируете линк, и вставляете его в переменную foxlink. Целиком, вместе со слэшем "/" в конце (наверное, так будет чуточку удобнее и вам и мне).
Кому нужна русская версия Фокса, берите линк папки, имя которой заканчивается на -l10n.
Впрочем, ниже на примере итак всё видно.

Ещё одна переменная -dspeed. Это ограничитель скорости загрузки, в килоБАЙТах. Сделано для того чтобы автоапдейт не мешал сёрфить/работать :)

SET foxlink=http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-1.9.1-l10n/
SET dspeed=256k

#( Update_Firefox
AsLoggedUser
SingleInstance
Time: 0 20 * * 3,7 *
Action:
SWHide IdlePriority
AsService
StartIn: "C:\Program Files\Wget\"
DIR-DELETE: "R:\Updates\Firefox"

START-APPW: wget.exe %foxlink% -P R:\Updates\Firefox\ -c --limit-rate=%dspeed% --wait=2m --tries=60
FILE-EXIST: "R:\Updates\Firefox\index.html" NOT
IF
LOG: "D:\BackUp\update.log" ">> Ошибка. Страница загрузки Firefox не найдена [%FT-CUR FT>DD.MM.YYYY/hh:mm:ss%]"
EXIT
THEN

RE-MATCH: "%FILE: R:\Updates\Firefox\index.html%" "/firefox-\d\.\d(\.\d(\d)*)*(\l\d)*pre\.(en-US)|(ru)\.win32\.zip/i"
IF
START-APPW: wget.exe %foxlink%%$0% -P R:\Updates\Firefox\ -c --limit-rate=%dspeed% --wait=2m --tries=60
FILE-EXIST: "R:\Updates\Firefox\%$0%" NOT
IF
DIR-DELETE: "R:\Updates\Firefox"
LOG: "D:\BackUp\update.log" ">> Ошибка загрузки %$0% [%FT-CUR FT>DD.MM.YYYY/hh:mm:ss%]"
EXIT
THEN

START-APPW: WinRAR.exe t R:\Updates\Firefox\%$0% -r -y
ExitCodeProc 0 <>
IF
LOG: "D:\BackUp\update.log" ">> Ошибка в архиве %$0% [%FT-CUR FT>DD.MM.YYYY/hh:mm:ss%]"
EXIT
THEN

START-APPW: WinRAR.exe x R:\Updates\Firefox\%$0% R:\Updates\Firefox\ -y
ExitCodeProc 0 <>
IF
LOG: "D:\BackUp\update.log" ">> Ошибка распаковки %$0% [%FT-CUR FT>DD.MM.YYYY/hh:mm:ss%]"
EXIT
THEN
PAUSE: 10000

START-APPW: nnbackup.exe sync -i R:\Updates\Firefox\firefox -o D:\BackUp\Firefox\App -s -ad -c

BEGIN PAUSE: 250 PROC-EXIST: "firefox.exe" NOT UNTIL

FILE-DELETE: "R:\Firefox\App\firefox.exe"
START-APPW: nnbackup.exe sync -i R:\Updates\Firefox\firefox -o R:\Firefox\App -s -ad -c -x firefox.exe
START-APPW: nnbackup.exe -i R:\Updates\Firefox\firefox\firefox.exe -o R:\Firefox\App -c
LOG: "D:\BackUp\update.log" "Успешное обновление %$0% [%FT-CUR FT>DD.MM.YYYY/hh:mm:ss%]"
DIR-DELETE: "R:\Updates\Firefox"
ELSE
DIR-DELETE: "R:\Updates\Firefox"
LOG: "D:\BackUp\update.log" ">> Ошибка. Ссылка на Firefox не найдена [%FT-CUR FT>DD.MM.YYYY/hh:mm:ss%]"
THEN
)#


Принцип обновления таков: парсится страница на предмет нужной ссылки, скачивается архив, проверяется-распаковывается, обновляются файлы в бэкапе.
Если Firefox запущен, то скрипт ждёт, пока Фокс не закроется, и затем уже обновляет файлы на рамдиске.

Hint: Немного понажимав кнопочки, можно с легкостью переделать этот скрипт для обновления Thunderbird.

Вцелом, всё работает достаточно стабильно, однако если будут возникать сложности со скриптами — пишите в комментариях, я постараюсь их исправить.

UPD: товарищ попросил разместить ссылку на вариант под линукс: Разгон Firefox при помощи TmpFS
Теги:
Хабы:
+22
Комментарии38

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн