Збірка Firefox з початкового коду в Linux / Fedora 43
Нарешті, знайшов час підстригти лисиці хвоста. Зокрема тому, що віднедавна відкрив для себе збірку i2pdbrowser: на базі консервативного і мабуть, останнього адекватного релізу ESR 115 - без "соціалізації" та заокруглення Мозілою колись цікавого (в першу чергу для гіків) браузеру:
Мій форк i2pdbrowser для приватно-орієнтованого Веб
По суті, білд вище - просто задає свою політику для готових офіційних бінарників цієї версії. В ній нормально відображається сучасний Веб; це не якийсь там Dillo чи NetSurf а повноцінний браузер.
Чому мене не влаштували архівні бінарники?
- Я користуюсь багатьма браузерами одночасно для різних мереж (Інтернет, Yggdrasil, Mycelium, Tor, I2P, тощо) і через слабке залізо не користуюсь Flatpak - мені треба якось змінити системний ідентифікатор програми для ізоляції профілів, не використовуючи контейнери;
- В мене давно крались плани покопирсатись у вихідному коді FF і точково адаптувати його під себе. Раніше, такими нюансами була не можливість вимкнення сповіщень про оновлення, які я випиляв тільки даунгрейдом з підтримкою потрібної опції в about:config;
- Також, моїй параної буде спокійніше, враховуючи що я бачу на поточному 149.0 купу заблокованих (завдяки самопалу psocks) спроб телеметрії на домени Mozilla. Хочу бути впевненим, що браузер відповідає задекларованим комітам і не намагається "дбайливо" тягнути мою історію переглядів на свої сервери, під виглядом "синхронізації профілю" чи "Mozilla VPN".
Збірка
Офіційна інструкція:
Розмір репозиторію складає ~5 GB, також на (Fedora 43) довстановив:
sudo dnf install perl clang-devel llvm-devel
- ймовірно, скрипт інсталяції ту команду запропонує автоматично
- `clang-devel llvm-devel` не потрібні, якщо ви збиратиметесь з артефактів
Вся "офіційна" процедура нового встановлення зводиться до чотирьох команд:
curl -LO https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/main/python/mozboot/bin/bootstrap.py python3 bootstrap.py ./mach build ./mach run
- при наступних збірках, команда `python3 bootstrap.py` замінюється на `./mach bootstrap`
- також, перед повторними білдами, варто підтягнути оновлення з `git pull`
- збірка з артефактами "Firefox for Desktop Artifact Mode [default]" триває швидко - через підвантаження бінарних наборів
ESR 115
Зауважу, що на Fedora 43 мені так і не вдалося розв'язати всі застарілі залежності. Можливо, тут варто спробувати статичний білд на віртуалці або з використанням контейнерів. Планую доповнити згодом, а поки - лишаю нотатки для ESR 115 як є.
В гілці master буде відповідно остання версія Nightly з усіма навісами. Тому я буду збирати собі ESR 115 за образом і подобою i2pdbrowser, бо точно не знаю з якої точно версії Firefox зкурвився.
Офіційний гайд я тут ігнорую і збираюсь так:
git clone https://github.com/mozilla-firefox/firefox.git cd firefox
- `git clone` - можливо потребує `--recursive` (не перевіряв, бо просто перехожу в клонований раніше репозиторій)
Тепер потрібно перемкнутись на тег або гілку:

git checkout ВАШ_ВИБІР
- особисто вирішив спробувати тег FIREFOX_115_34_0esr_RELEASE, бо (на момент допису) він оновився лише два тижні тому - можливо наявні критичні виправлення безпеки і я не бачу для себе очевидних причин фрізитись саме на FIREFOX_115_20_0esr_RELEASE; думаю, що ESR 115.20 в i2pdbrowser використовується лише тому, що розробники просто зробили для неї ініціальний пресет і втратили інтерес до супроводу.
Після перемикання гілки (це займе деякий час) я створив файл `mozconfig` наступного вмісту:
ac_add_options --with-libclang-path=/usr/lib64 ac_add_options --without-wasm-sandboxed-libraries
Зробив даунгрейд Rust:
rustup install 1.70.0 rustup default 1.70.0 rustc --version
- можливо й новіші працюють, не перевіряв
- переключитись назад можна командою `rustup default stable`
Встановлення останньої версії Rust в Linux
Також, збірка буде вимагати ~ Python 3.11:
sudo dnf install python3.11-devel
і додаткові аргументи середовища:
python3.11 ./mach bootstrap --no-system-changes LDFLAGS="-Wl,--allow-shlib-undefined" HOST_LDFLAGS="-Wl,--allow-shlib-undefined" python3.11 ./mach build python3.11 ./mach run
- на етапі `bootstrap` я обираю "Firefox for Desktop"
- аргумент `--no-system-changes` потрібен, щоб не ставити watchman
У разі зміни конфігурації і перед повторним білдом, варто почистити кеш:
rm -rf ~/.mozbuild rm -rf obj-*
Все інше, якщо збірка вдалась - вже підганяємо під своє середовище робочого столу або збираємо пакет rmp/deb.
Дивіться також
Окремі профілі Firefox на базі спільного релізу
Ліво-стороння орієнтація кнопки "закрити вкладку" в Firefox
Видаляю Flatpak зі свого комп'ютера
/uk/