gemlog/public/uk/build-firefox-from-source-on-fedora-linux.gmi

111 lines
No EOL
7.8 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Збірка 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 зі свого комп'ютера