Вот практически и подошла к финалу моя сборочка LFS’ки, осталось только офисный пакет прикрутить. Но я как посмотрел сколько libreoffice компилируется и ужаснулся. Возможно на днях займусь этим. Однако последний шаг, необходимый для миграции пройден — Firefox больше не падает. До этого в dmesg сыпались такие ошибки:
nouveau 0000:00:0d.0: bus: MMIO write of 00540001 FAULT at 00b000
А за ними сыпалась лиса.
Получение исходных текстов Firefox для GNU/Linux
Скачать Firefox можно из официального репозитория. Там есть как бинарники, так и исходные тексты, в моём случае это выглядело так:
$ wget https://ftp.mozilla.org/pub/firefox/releases/48.0/source/firefox-48.0.source.tar.xz
Затем их необходимо распаковать:
$ tar -xvf firefox-48.0.source.tar.xz
Компиляция Firefox в Linux
Переходим в папку с исходными текстами:
$ cd firefox-48.0
Процесс сборки достаточно прост, но я бы настоятельно рекомендовал получше изучить вывод команды:
./configure --help
После детального просмотра всех доступных опций создаём файл mozconfig в корневой папке с исходниками. У меня получился он примерно такого содержания:
# У меня не установлен dbus
ac_add_options --disable-dbus
# И dbus-glib
ac_add_options --disable-necko-wifi
# GStreamer тоже я не ставил, НЕ НУЖЕН ;-)
#ac_add_options --enable-gstreamer=1.0
# И alsa мне хватает за глаза
ac_add_options --disable-pulseaudio
# GConf мне тоже не нужен
ac_add_options --disable-gconf
# В качестве тулкита используется gtk2
ac_add_options --enable-default-toolkit=cairo-gtk2-x11
# По умолчанию из готовых бинарников убираются специальные символы
# необходимые для дебага. Первую сборку я бы рекомендовал сделать с ними
# отключив эту функцию. При нормальной работе можно будет закомментировать
# эту строку
ac_add_options --disable-strip
ac_add_options --disable-install-strip
# Указывается префикс и приложение для компиляции
ac_add_options --prefix=/usr
ac_add_options --enable-application=browser
# Отключение всевозможных НЕ НУЖНО
ac_add_options --disable-crashreporter
ac_add_options --disable-updater
ac_add_options --disable-update-channel
ac_add_options --disable-update-packaging
ac_add_options --disable-tests
ac_add_options --disable-gnomeui
ac_add_options --disable-mobile-optimize
ac_add_options --disable-webapp-runtime
ac_add_options --disable-webrtc
ac_add_options --disable-websms-backend
ac_add_options --disable-webspeech
ac_add_options --disable-webspeechtestbackend
ac_add_options --disable-calendar
ac_add_options --disable-gamepad
ac_add_options --disable-b2g-bt
ac_add_options --disable-b2g-camera
ac_add_options --disable-b2g-ril
# Отключение добавления компилятором специальных символов, необходимых дебаггеру.
# Если всё работает хорошо - можно будет расскомментировать
# эти строчки.
#ac_add_options --disable-debug
#ac_add_options --disable-debug-js-modules
#ac_add_options --disable-debug-symbols
# Включаем разной степени НУЖНО
ac_add_options --enable-optimize
ac_add_options --enable-gio
ac_add_options --enable-official-branding
ac_add_options --enable-safe-browsing
ac_add_options --enable-url-classifier
# Указываем библиотеки и программы, которые установлены в системе.
# Это уменьшает время, необходимое для компиляции и конечный объём бинарников.
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman
ac_add_options --enable-system-hunspell
ac_add_options --enable-system-sqlite
ac_add_options --enable-readline
ac_add_options --with-pthreads
ac_add_options --with-system-bz2
ac_add_options --with-system-jpeg
ac_add_options --with-system-zlib
ac_add_options --with-system-libevent
ac_add_options --with-system-libvpx
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
ac_add_options --with-system-icu
# Cairo необходимо указывать с осторожностью. Ибо это может привести к
# падениям браузера.
#ac_add_options --enable-system-cairo
Затем необходимо выйти из папки с исходниками и создать отдельную директорию для компиляции:
$ mkdir ../build
$ cd ../build
Очень важный шаг, который нельзя пропускать при сборке Firefox
Необходимо добавить к глобальным переменным CFLAGS и CXXFLAGS опции компилятора, без которых полученная сборка будет периодически падать:
$ export CFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"
$ export CXXFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"
Осталось дать создать рабочее окружение для сборки в папке, согласно нашим параметрам, указанным в файле mozconfig:
$ ./configure
Начать компиляцию Firefox 48.0 в Linux:
$ make
И установить браузер:
# make install
Ручная активация многопроцессорного режима в Firefox 48.0
Заходим на страницу about:support Firefox и находим такую строчку:
Многопроцессные окна 1/1
Значит, многопроцессорный режим включен, если же вместо 1/1 виднеется 0/1, то следует перейти на страницу настройки about:config в Firefox. Затем изменить значение browser.tabs.remote.autostart на true. Кроме того, можно принудительно включить многопроцессорный режим в Firefox 48.0, создав логическую переменную browser.tabs.remote.force-enable со значением true на странице about:config. Осталось только изменить количество процессов для вкладок с помощью переменной dom.ipc.processCount.
Странички стали шустрее грузиться, но памяти стало кушать больше =) У всего есть плюсы и минусы.
Сравнение производительности браузера в Debian и собственной сборки на базе LFS
Цифры говорят лучше всяких слов. Для сравнения я использовал тот же сайт, что и в случае патчей BFS+BFQ для ядра Linux.
Результат для Debian (таки после обновления на свеженькую версию Firefox значительно просели результаты, по сравнению с всё теми же патчами):
Результат для LFS:
Да, действительно, разные версии браузера. В итоге полученный результат очень субъективен. Но хоть какой-то для ориентира он есть. Кстати, Firefox 47.1 без многопроцессорного режима получала 2570 баллов.
Стоит отметить и то, что у меня дискретная видеокарточка, использующая свободные драйвера, и не поддерживает аппаратное ускорение. Поэтому графика может медленно рисоваться в тестах из-за этого.
Заключение
Таки не менял используемые в лисе шрифты по умолчанию, поэтому они выглядят местами не очень. Но я исправился, правда уже тест производительности браузера заново не проходил, ленив я, что тут поделать.
Осталось только установить Adobe Flash Player и можно смотреть фильмецы онлайн =) Ну а я на днях пошаманю с хомяком и буду использовать LFS в качестве основной системы.