# Збірка Firefox з початкового коду в Linux / Fedora 43 Нарешті, знайшов час підстригти лисиці хвоста. Зокрема тому, що віднедавна відкрив для себе збірку i2pdbrowser: на базі консервативного і мабуть, останнього адекватного релізу ESR 115 - без "соціалізації" та заокруглення Мозілою колись цікавого (в першу чергу для гіків) браузеру: => my-personal-i2pdbrowser-fork-for-privacy-oriented-web.gmi Мій форк i2pdbrowser для приватно-орієнтованого Веб По суті, білд вище - просто задає свою політику для готових офіційних бінарників цієї версії. В ній нормально відображається сучасний Веб; це не якийсь там Dillo чи NetSurf а повноцінний браузер. Чому мене не влаштували архівні бінарники? * Я користуюсь багатьма браузерами одночасно для різних мереж (Інтернет, Yggdrasil, Mycelium, Tor, I2P, тощо) і через слабке залізо не користуюсь Flatpak - мені треба якось змінити системний ідентифікатор програми для ізоляції профілів, не використовуючи контейнери; * В мене давно крались плани покопирсатись у вихідному коді FF і точково адаптувати його під себе. Раніше, такими нюансами була не можливість вимкнення сповіщень про оновлення, які я випиляв тільки даунгрейдом з підтримкою потрібної опції в about:config; * Також, моїй параної буде спокійніше, враховуючи що я бачу на поточному 149.0 купу заблокованих (завдяки самопалу psocks) спроб телеметрії на домени Mozilla. Хочу бути впевненим, що браузер відповідає задекларованим комітам і не намагається "дбайливо" тягнути мою історію переглядів на свої сервери, під виглядом "синхронізації профілю" чи "Mozilla VPN". ## Збірка Офіційна інструкція: => https://firefox-source-docs.mozilla.org/setup/linux_build.html Building Firefox On Linux Розмір репозиторію складає ~5 GB, також на (Fedora 43) довстановив: ``` bash sudo dnf install perl clang-devel llvm-devel ``` * ймовірно, скрипт інсталяції ту команду запропонує автоматично * `clang-devel llvm-devel` не потрібні, якщо ви збиратиметесь з артефактів Вся "офіційна" процедура нового встановлення зводиться до чотирьох команд: ``` bash 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 зкурвився. Офіційний гайд я тут ігнорую і збираюсь так: ``` bash git clone https://github.com/mozilla-firefox/firefox.git cd firefox ``` * `git clone` - можливо потребує `--recursive` (не перевіряв, бо просто перехожу в клонований раніше репозиторій) Тепер потрібно перемкнутись на тег або гілку: => build-firefox-from-source-on-fedora-linux/FIREFOX_ESR_115-tags.png Вибір тега на GitHub (скріншот) ``` bash git checkout ВАШ_ВИБІР ``` * особисто вирішив спробувати тег FIREFOX_115_34_0esr_RELEASE, бо (на момент допису) він оновився лише два тижні тому - можливо наявні критичні виправлення безпеки і я не бачу для себе очевидних причин фрізитись саме на FIREFOX_115_20_0esr_RELEASE; думаю, що ESR 115.20 в i2pdbrowser використовується лише тому, що розробники просто зробили для неї ініціальний пресет і втратили інтерес до супроводу. Після перемикання гілки (це займе деякий час) я створив файл `mozconfig` наступного вмісту: ``` mozconfig ac_add_options --with-libclang-path=/usr/lib64 ac_add_options --without-wasm-sandboxed-libraries ``` Зробив даунгрейд Rust: ``` bash rustup install 1.70.0 rustup default 1.70.0 rustc --version ``` * можливо й новіші працюють, не перевіряв * переключитись назад можна командою `rustup default stable` => install-latest-rust-version-on-linux.gmi Встановлення останньої версії Rust в Linux Також, збірка буде вимагати ~ Python 3.11: ``` bash sudo dnf install python3.11-devel ``` і додаткові аргументи середовища: ``` bash 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 У разі зміни конфігурації і перед повторним білдом, варто почистити кеш: ``` bash rm -rf ~/.mozbuild rm -rf obj-* ``` Все інше, якщо збірка вдалась - вже підганяємо під своє середовище робочого столу або збираємо пакет rmp/deb. ## Дивіться також => run-same-firefox-version-using-custom-profile.gmi Окремі профілі Firefox на базі спільного релізу => left-oriented-close-tab-button-in-firefox.gmi Ліво-стороння орієнтація кнопки "закрити вкладку" в Firefox => goodbye-flatpak.gmi Видаляю Flatpak зі свого комп'ютера