Эта тема — объединение информации из этой темы и вот этой статьи с поправкой на новые версии Firefox. В частности, не работают указанные ранее варианты с папками localized и nonlocalized.
Предлагаю начать, и да простят меня модераторы за злоупотребление жирным шрифтом.
1. Скачайте дистрибутив и поместите в папку Repack под простым именем, например Firefox-901.exe
2. Скачайте служебные файлы 7zSD.sfx и app.tag и поместите их в папку Repack\extra
3. Пропишите 7-Zip в Path:

Выделить код

Код:

set path=%path%;c:\Program Files\7-Zip

4. Распакуйте дистрибутив в папку build_win:

Выделить код

Код:

7z x -obuild_win Firefox-901.exe

5. Добавляем расширения:
5.1. Чтобы расширения добавлялись к каждому создаваемому профилю, поместите их в папку build_win\core\distribution\extensions\
5.2. Некоторые расширения хранят свои настройки в виде отдельных файлов в папке профиля. Создайте папку build_win\core\defaults\profile\ и положите их туда. Пример: build_win\core\defaults\profile\adblockplus\patterns.ini
6. Добавляем закладки, настройки, поисковые движки, пароли и т.д
Важно понимать, что структура папки build_win\core\defaults\profile\ полностью соответствует структуре папки профиля. Соблюдайте структуру, и все будет работать.
6.1. Формат закладок зависит от настроек вашего браузера — они хранятся либо в виде HTML, либо в виде SQLITE. Таким образом, у нас два варианта:
6.1.1. build_win\core\defaults\profile\bookmarks.html
6.1.2. build_win\core\defaults\profile\places.sqlite
6.2. Пользовательские настройки хранятся в файле prefs.js:
build_win\core\defaults\profile\prefs.js
ВНИМАНИЕ! В файле должны храниться только созданные пользователем настройки! Всяких extensions.installCache и прочих install-event-fired быть не должно! Эти настройки будут созданы браузером автоматически!
Если вы не знаете, что оставить, откройте файл настроек расширения (лежит в *.xpi\defaults\preferences\*.js) и посмотрите имена этих настроек. Значения же оставляйте те, что в вашем файле.
6.3. Поисковые движки:
6.3.1. Толерантный способ: просто кидайте их в папку build_win\core\defaults\profile\searchplugins
6.3.2. Хардкорный способ: если вы хотите, чтобы ваши движки считались стандартными, запихните их в папку build_win\core\searchplugins Так вы сможете восстанавливать их кнопкой «Восстановить набор по умолчанию».
6.4. Все остальное добавляется по тому же принципу.
7. Собираем дистрибутив!
7.1. Переходим в папку build_win:

Выделить код

Код:

cd build_win

7.2. Собираем архив:

Выделить код

Код:

7z a -r -t7z app.7z -mx -m0=BCJ2 -m1=LZMA:d24 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3

7.3. Приклеиваем к архиву распаковщик и заголовок:

Выделить код

Код:

copy /B ..\extra\7zSD.sfx+..\extra\app.tag+app.7z ..\Firefox-901_Repacked.exe

8. Кайфуем!

Разумеется, без командных файлов никуда:
Распаковка:

Выделить код

Код:

set path=%path%;c:\Program Files\7-Zip
7z x -obuild_win Firefox-901.exe

Сборка:

Выделить код

Код:

set path=%path%;c:\Program Files\7-Zip
cd build_win
7z a -r -t7z app.7z -mx -m0=BCJ2 -m1=LZMA:d24 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3
copy /B ..\extra\7zSD.sfx+..\extra\app.tag+app.7z ..\Firefox-901_Repacked.exe
Водкотерапевт пишет

ВНИМАНИЕ! В файле должны храниться только созданные пользователем настройки!

И измененные пользователем настройки. В т.ч. настройки самого браузера. Т.е. если возникнет задача не только встроить расширения в дистрибутив, но просто сделать сборку с уже заранее определенными нужным образом настройками, то что-нибудь типа keyword.URL = http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q= там вполне может быть.

И еще пара нюансов:

Водкотерапевт пишет

5. Добавляем расширения:
5.1. Чтобы расширения добавлялись к каждому создаваемому профилю, поместите их в папку build_win\core\distribution\extensions\

При этом имя файла расширения должно быть в виде id_расширения.xpi (например, status4evar@caligonstudios.com.xpi). ID расширения можно узнать, например, из информации в about:support.
Если расширение требует распаковки при установке (тэг <em:unpack>true</em:unpack> в файле install.rdf расширения), то расширение должно быть распаковано в папку build_win\core\distribution\extensions\id_расширения. Если положить просто файл, расширение распаковано не будет, даже несмотря на наличие em:unpack=true в install.rdf. Нераспаковка расширения в этом случае может привести к неработоспособности расширения - обязательная распаковка нужна при наличии в расширении некоторых типов файлов.
Опять про настройки.
1. При наличии в значениях настроек юникодных символов (символов русского алфавита в т.ч.), файл настроек должен быть в кодировке UTF-8 - иначе настройки будут созданы, но без значений.
2. Значения настроек, указанных в defaults\profile\prefs.js, будут при создании профиля использоваться как дефолтные - т.е. если упомянутая в предыдущем постинге keyword.URL при установке из обычного дистрибутива имеет значение по умолчанию в виде пустой строки, то после указания в prefs.js значения http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q= в новом профиле значение по умоланию будет равно этому http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=; при сбросе значения настройки она опять станет равным всё этому же URL.
3. Ну и, наконец, одна небольшая проблема: если понадобится в сборке распространять значения настроек расширений, отличные от дефолтных, то как это нормально сделать - я способа не нашел. Указание измененных значений в defaults\profile\prefs.js никакого эффекта не имеет. Есть вариант указывать эти значения в user.js - то тогда эти значения будут заново применяться при каждом старте браузера. Возможно, способ есть, надо подумать.

hydrolizer пишет

2. Значения настроек, указанных в defaults\profile\prefs.js, будут при создании профиля использоваться как дефолтные - т.е. если упомянутая в предыдущем постинге keyword.URL при установке из обычного дистрибутива имеет значение по умолчанию в виде пустой строки, то после указания в prefs.js значения http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q= в новом профиле значение по умоланию будет равно этому http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=; при сбросе значения настройки она опять станет равным всё этому же URL.

Скверно. Это значит, что при обновлении расширения его настройки будут заменены на дефолтные, идущие в комплекте, правильно?

hydrolizer пишет

3. Ну и, наконец, одна небольшая проблема: если понадобится в сборке распространять значения настроек расширений, отличные от дефолтных, то как это нормально сделать - я способа не нашел. Указание измененных значений в defaults\profile\prefs.js никакого эффекта не имеет. Есть вариант указывать эти значения в user.js - то тогда эти значения будут заново применяться при каждом старте браузера. Возможно, способ есть, надо подумать.

С учетом предыдущего проблема получается таки большая. Буду экспериментировать.