Iceweasel-UXP buildelése

Akinek tele van a töke a Mozillával és azzal az iránnyal, amerre a Firefox megy, de nem akarja a platformot elhagyni, azoknak lehet esetleg hasznos ez a poszt.

Több alternatív Firefox fork is van, ami a régi irányt célozza, de igazából mind a PaleMoon körül csoportosulnak, viszont az nagyon régi Firefoxra (28) épül. Az Iceweasel-UXP ezzel szemben az 52-esre (az utolsó ESR, mielőtt kidobták volna a XUL-t, az NPAPI-t, az ALSA-t és a GTK2-őt). Az Iceweasel-UXP-t a Hyperbola jegyzi, akik ugyan szoktak bináris csomagot is adni, de itt ugye az volna a lényeg, hogy úgy rakjuk össze, hogy nekünk legyen jó. Egyébként az összes PaleMoon körül csoportosuló böngészőnek az az alapvető célja, hogy XUL alapú böngészőt építsenek (innen a név: Unified XUL Platform), mert a WebExtension nem csak, hogy rugalmatlanabb és erőforrásigényesebb, de ráadásul súlyos privacy problémákat is jelenthet. (#1, #2, #3)

Akkor buildeljük le. Ehhez első lépésben magát az UXP-t kell lerántanunk a PaleMoon-tól:

git clone https://github.com/MoonchildProductions/UXP

ha a legfrissebb forrásokat akarjuk, vagy, ha stable release-t, akkor pl.:

wget https://github.com/MoonchildProductions/UXP/archive/PM28.7.1_Release.tar.gz
tar xzf PM28.7.1_Release.tar.gz
rm PM28.7.1_Release.tar.gz
mv UXP-PM28.7.1_Release UXP

Ha megvagyunk be kell mászni az UXP/application könyvtárba

cd UXP/application/

aztán

git clone https://git.hyperbola.info:50100/software/iceweasel-uxp.git

ha a legfrissebb forrás kell az Iceweasel-ből, vagy, ha stable release, akkor pl.:

wget https://repo.hyperbola.info:50000/other/iceweasel-uxp/iceweasel-uxp-2.7.tar.gz
tar xzf iceweasel-uxp-2.7.tar.gz
rm iceweasel-uxp-2.7.tar.gz
mv iceweasel-uxp-2.7 iceweasel-uxp

Ha ez megvan, akkor át kell állítani a vendort és a productot, mert különben össze fog ütközni a gépre telepített Firefox-szal, vagy a régebbi (38-as) Iceweasellel:

sed -i 's/Vendor=Mozilla/Vendor=Hyperbola/g' iceweasel-uxp/app/application.ini
sed -i 's/Name=Firefox/Name=Iceweasel-UXP/g' iceweasel-uxp/app/application.ini

Másszunk vissza egy szintet az UXP könyvtárba

cd ..

majd nekiállhatunk összerakni a .mozconfig-ot.

--------

Update: Illetve, amennyiben nem x86 - pontosabban: nem SSE2-képes - platformon vagyunk, futtassuk le a következő két parancsot is:

sed -i 's/-msse2//g' build/autoconf/compiler-opts.m4
sed -i 's/-mfpmath=sse//g' build/autoconf/compiler-opts.m4

--------

Először kapcsoljuk le a felülírásokért való reklamációt:

echo 'mk_add_options AUTOCLOBBER=1' >> .mozconfig

Aztán, aki akarja, beállíthatja, hogy több magon dolgozzon majd a builder:

echo 'mk_add_options MOZ_MAKE_FLAGS="-j7"' >> .mozconfig

(Aki eddig nem találkozott ezzel: make -j# esetén # mondja meg a felhasználható magok számát; itt pl. 7 magon fog dolgozni.)

Kapcsoljuk be, hogy az Iceweasel-UXP-t buildelje:

echo 'ac_add_options --enable-application=iceweasel-uxp' >> .mozconfig

Utána állítsuk át GTK2-re, hogy a gyengébb/régebbi gépek (pl. RPi 1, PoweMac G4) is boldoguljanak a böngészővel és ne haljon meg az egész rendszer, ha elindítjuk:

echo 'ac_add_options --enable-default-toolkit=cairo-gtk2' >> .mozconfig

Kapcsoljuk le a PulseAudio-t és engedélyezzük az ALSA-t, ne kínozza a gépet, meg a fülünket:

echo 'ac_add_options --enable-alsa' >> .mozconfig
echo 'ac_add_options --disable-pulseaudio' >> .mozconfig

Update: Az ALSA természetesen csak a Linuxra vonatkozik. (A pulse tiltása nem!) Még nem tudom pontosan milyen opciók vannak hangügyben FreeBSD-re, stay tuned for more update...

Utána jöhet a binárisok strippelése, optimalizálása:

echo 'ac_add_options --enable-optimize=-O2' >> .mozconfig
echo 'ac_add_options --enable-strip' >> .mozconfig
echo 'ac_add_options --disable-debug' >> .mozconfig
echo 'ac_add_options --enable-release' >> .mozconfig

Azt egyébként maga a csapat is elismeri, hogy bloated a program (naná, Firefox), de dolgoznak az ügyön.

Kapcsoljuk le a syncinget, mert a Hyperbolának nincs sync-servere és így elpusztulna a végén a packaging.

echo 'ac_add_options --disable-sync' >> .mozconfig

Végül kapcsoljuk ki a Firefox hazaköszöngetős vackait:

echo 'ac_add_options --disable-verify-mar' >> .mozconfig
echo 'ac_add_options --disable-updater' >> .mozconfig
echo 'ac_add_options --disable-crashreporter' >> .mozconfig
echo 'ac_add_options --disable-maintenance-service' >> .mozconfig
echo 'ac_add_options --disable-tests' >> .mozconfig
echo 'ac_add_options --disable-ipdl-tests' >> .mozconfig

A telemetriát még nem takarították ki belőle, de ezen is dolgoznak. Addig marad az about:config-ban történő kikapcsolgatás.

Miután minden megvan, build és package:

./mach build
./mach package

Ez sokáig is eltarthat (FX-8350, 7 mag => cca. 20 perec), de utána megjelenik egy obj-* könyvtár (pl. itt obj-x86_64-pc-linux-gnu), azon belül dist és azon belül lesz egy iceweasel-uxp-*.tar.bz2 csomag. Ezt lehet kicsomagolni, ahova akarjuk (pl. /opt/) és meg is vagyunk.

Még takarítás gyanánt lehet gyalulni

cd ..
rm -rf ./UXP

de ha valaki a git repository-kból szedte le, akkor akár meg is tarthatja, legközelebb már csak updatelni kell.

Még annyit, hogy a Hyperbola karbantart egy adag XUL bővítményt (pl. uBlock Origin-Libre, NoScript Classic, Greasemonkey, stb.), de a Legacy Collector viszont komplett gyűjteménnyel bír, még a különféle verziókból is. (Pl. Firebugot innen lehet újítani.)
(Amúgy jó lenne, ha ezt a site-ot minél többen letükröznék...)

Nos, asszem ennyi. Remélem lesz, aki hasznát veszi.

(Update: FreeBSD alatt ne felejtsük el felpakolni a zip, gmake, gconf, yasm toolokat.)

(Update #2: A jelek szerint minimum GCC 6 kell a forgatáshoz és legalább 4 GB RAM.)

Hozzászólások

Nagyon köszi, hogy rámutattál erre a lehetőségre.., majd BSD-re összpontosítva kipróbálom, - lassan muszáj lesz frissítenem, - ha gondom lesz, kérdezek.. :)

Közben én nekiálltam FreeBSD-re leforgatni. Az ALSA-t lecseréltem --enable-sndio-ra, de arra azt köpte vissza, hogy no such option, pedig van sndio FreeBSD-re és fel is van rakva. Az OSS-nek nyomát sem látom a forrásokban, szerintem nem támogatja. Esetleg alsaemuval lehet FreeBSD alatt okoskodni valamit? OpenBSD alatt elméletileg OOB a sndio, mert ott mondani sem kell neki, a script magától csinálja.

Egyelőre csak tiltottam a pulse-ot és nem állítottam be más hangszervert. Most vagy fallbackelt valamire, vagy nem lesz sound, de igazából még nem tudom, mert a latest release elpusztul buildelés közben, úgyhogy most latest git forrásokkal próbálom újra. Ha azzal is ugyanaz a baj, akkor reportolom, mint bugot. Ha többet tudok, írok.

Update:
Így is eltaknyol. Ha pedig a reklamált parancsot lefuttatom, akkor ezt kapom: az UXP/obj-x86_64-unknown-freebsd11.2/dist/include/mozilla/throw_gcc.h reklamálja a snprintf() hiányát, meg, hogy húzzam be a <cstdio>-t, amit nem igazán értek, mert amióta az eszemet tudom, az a <stdio.h>-ban van, de egyébként a FreeBSD manual is ezt mondja. Mindenesetre egy

#ifdef __FreeBSD__
#include <cstdio>
#endif

beszúrása orvosolta a problémát. A build ekkor olyan 30-40 percnél tartott ill. annyi idő után hasalt el. Javítás után folytatta, ahol abbahagyta és már megint 30 perce megy és tovább nyúlik...a jövő héten majd mondom mi lett az eredmény. :P

Update #2:
Így is felfordult, nem le. Az érintett parancs eredménye meg ez. A jelek szerint pont az okozta, amivel a másikat javítottam körbetaknyoltam. Öröm és boldogság. És bugreport.

Update #3:
Aki érintett, ebben a két topicban követheti az eseményeket:
https://forums.hyperbola.info/viewtopic.php?id=272
https://forums.hyperbola.info/viewtopic.php?id=273