К сожалению, в репозиториях различных дистрибутивов GNU/Linux содержатся не совсем свежие версии популярных программ. Эта статья поможет вам скомпилировать из исходного кода последние релизы таких программных продуктов, как:
- Браузер Mozilla Firefox;
- Почтовый клиент Mozilla Thunderbird;
- IM-мессенджер Instantbird.
Логотипы Mozilla Firefox, Mozilla Thunderbird и Instantbird (слева направо)
Затем установить их и использовать в своей системе. Все эти приложения объединяет то, что они используют движок Gecko, а их интерфейс построен с использованием кросс-платформенного языка разметки XUL. Firefox и Thunderbird разрабатываются компанией Mozilla Corporation, а Instantbird является некоммерческим проектом, основанным несколькими французскими энтузиастами. Помимо XULRunner, который позволяет использовать для построения интерфейса язык разметки XUL, Instantbird использует libpurpule из проекта Pidgin. Библотека libpurpule позволяет мессенджеру работать со всеми популярными на данный момент протоколами и службами обмена мгновенными сообщениями.
Содержание:
1. Подготовка окружения для сборки
2. Сборка Mozilla Firefox
3. Сборка Mozilla Thunderbird
4. Сборка Instantbird
5. Полезные ссылки и ресурсы
1. Подготовка окружения для сборки
Для сборки я буду использовать Linux Mint 15 KDE 64-bit, но вы можете собирать данные программы в любом удобном для вас дистрибутиве GNU/Linux, в который следует установить следующие пакеты:
1 |
sudo apt-get install zip unzip mercurial g++ make autoconf2.13 yasm libgtk2.0-dev libglib2.0-dev libdbus-1-dev libdbus-glib-1-dev libasound2-dev libcurl4-openssl-dev libiw-dev libxt-dev mesa-common-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev |
Если вы собираетесь скомпилировать помимо продуктов Mozilla, ещё и Instantbird, то в систему необходимо установить такие пакеты, как:
sudo apt-get install libavahi-glib-dev libavahi-client-dev
Последние установленные deb-пакеты в Linux Mint 15 KDE
Данные команды подходят для большинства популярных deb-based дистрибутивов, для rpm-based следует найти и установить аналогичные пакеты с помощью системного установщика, используемого в вашем дистрибутиве.
Для сборки тяжеловесных программных продуктов от Mozilla необходимо очень много оперативной памяти или swap’а. Если вы будете собирать дебажную версию Firefox’а или Thunderbird’а, не забудьте проверить, достаточно ли памяти в вашей системе для компиляции и линковки этих программ. Для успешной сборки дебажных бинарников и библиотек необходимо примерно 2GB RAM + 5GB SWAP. Для релизных бинарников и библиотек вполне хватит 2GB RAM + 2GB SWAP.
Если этап линковки вылетел с ошибкой:
collect2: error: ld terminated with signal 9
Необходимо расширить объем доступной памяти.
В дистрибутивах GNU/Linux вы всегда можете воспользоваться вашим свободным пространством на жестком диске для расширения памяти, создав там файл подкачки и подключив его в систему. Эту процедуру можно сделать с помощью следующих команд:
1 2 3 4 |
cd ~ dd if=/dev/zero of=swapfile.img bs=1M count=5120 mkswap swapfile.img sudo swapon swapfile.img |
Проверить результат подключения файла можно с помощью команды:
free -m
Отключить использование файла подкачки «swapfile.img» можно с помощью команды:
sudo swapoff swapfile.img
2. Сборка Mozilla Firefox
Для начала, получим исходники последней версии браузера (на момент написания статьи последняя версия 25.0), перейдя по следующей ссылке. Затем распакуем загруженный архив в директорию «/tmp» и перейдем в папку с исходниками:
1 2 |
tar -xjvf ~/Downloads/firefox-25.0.source.tar.bz2 -C /tmp cd /tmp/mozilla-release/ |
Теперь создадим конфигурационный файл, на основе опций в котором и будет строиться наш браузер. Для этого можно просто создать файл «.mozconfig» в директории «/tmp/mozilla-release/» и наполнить его следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
mk_add_options PYTHON=/usr/bin/python2 mk_add_options MODULE_OPTIMIZE_FLAGS="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options MOZ_OPTIMIZE_FLAGS="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options OPTIMIZER="-march=native -O2 -mmmx -Os -msse -msse2 -mssse3" mk_add_options INTERP_OPTIMIZER="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options MOZ_MAKE_FLAGS="-j4" ac_add_options --host=x86_64-linux-gnu ac_add_options --prefix=/opt/Mozilla/Firefox ac_add_options --enable-application=browser ac_add_options --disable-crashreporter ac_add_options --disable-installer ac_add_options --disable-updater ac_add_options --disable-debug ac_add_options --disable-debug-symbols ac_add_options --disable-tests ac_add_options --enable-optimize="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" ac_add_options --enable-strip ac_add_options --enable-install-strip 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-jemalloc ac_add_options --enable-dbus ac_add_options --enable-ogg ac_add_options --enable-wave ac_add_options --enable-methodjit ac_add_options --enable-tracejit ac_add_options --with-pthreads |
Или же просто скачать этот файл и положить в нужный каталог, выполнив следующую группу команд:
1 2 |
cd ~/Downloads && wget https://bitbucket.org/exlmotodev/storage/raw/671b954fa8a3bb93008903e237b651086e44bb4f/Mozconfigs/Firefox_buildconfig cp ~/Downloads/Firefox_buildconfig /tmp/mozilla-release/.mozconfig && cd - |
Небольшое пояснение включенных в конфиге некоторых опций.
Флаги
-march=native -O2 -Os -mmmx -msse -msse2 -mssse3, использующиеся в нескольких опциях, выполняют оптимизацию под использующийся процессор. При желании их можно отключить, оставив только
-march=native -O2 -Os; тогда скомпилированная программа заработает на большем количестве процессоров (на очень старых Pentium’ах или AMD, к примеру).
Опция
MOZ_MAKE_FLAGS="-j4" позволяет воспользоваться преимуществами многопоточной сборки. Благодаря чему время компиляции снижается в несколько раз. Аргумент «X» в конструкции «-jX» обычно вычисляется с помощью формулы «X = количество ядер в процессоре + 1». Для более быстрой компиляции и, соответственно, более жёсткой нагрузки на процессор, следует использовать «X = количество ядер в процессоре + 2». Если вы используете одноядерный процессор, можете закомментировать или удалить эту строку.
--host=x86_64-linux-gnu определяет целевую платформу для сборки.
Опция --prefix=/opt/Mozilla/Firefox определяет путь для установки скомпилированной программы и её ресурсов. При выполнении команды make install в этот каталог скопируются все необходимые для работы программы файлы. Вы можете закомментировать эту строку, если хотите, чтобы программа установилась в стандартный в большинстве дистрибутивов каталог для пользовательских программ — «/usr».
--disable-debug,
--disable-debug-symbols,
--enable-strip и
--enable-install-strip полностью исключают возможность отладки исполняемого бинарника. Если вам необходимо собрать именно отладочную версию программы, отключите опции *strip*, и включите опции *debug*.
Примечание. Для сборки отладочной версии необходим большой объем дискового пространства и памяти.
--enable-official-branding включает позиционирование браузера как Mozilla Firefox с официальным логотипом. Без включения этой опции будет использован свободный логотип и бренд Aurora.
--enable-jemalloc позволяет использовать высокопроизводительный менеджер распределения памяти, благодаря которому использование программой RAM сокращается в несколько раз.
Опция --with-pthreads разрешает программе использовать многопоточность.
Для сборки в директории с исходниками следует выполнить команду:
python2 mach build
После которой последует предложение:
1 2 3 4 5 6 7 8 9 10 11 |
mach and the build system store shared state in a common directory on the filesystem. The following directory will be created: /home/exl/.mozbuild If you would like to use a different directory, hit CTRL+c and set the MOZBUILD_STATE_PATH environment variable to the directory you would like to use and re-run mach. For this change to take effect forever, you'll likely want to export this environment variable from your shell's init scripts. 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |
Если необходимо, изменяем каталог «/home/exl/.mozbuild», изменив переменную окружения MOZBUILD_STATE_PATH и вновь выполняем:
python2 mach build
После чего и начнёт выполняться процесс сборки. Компиляция и линковка браузера Mozilla Firefox занимает весьма много времени, продолжительность этапа сборки напрямую зависит от производительности вашего процессора и памяти.
Для сборки программных продуктов от Mozilla используется mach, обычный способ «./configure && make && make install» не работает. Благодаря системе сборки mach можно наблюдать за процессом компиляции с помощью статус-строки, в которой отображается, какой компонент программы собирается в данный момент. Помимо статус-строки, напротив каждого компилируемого файла отображается общее время, потраченное на компиляцию или линковку.
После успешной компиляции необходимо установить браузер Mozilla Firefox, в директорию, указанную в конфиге. Для запуска процесса установки следует выполнить команду:
sudo python2 mach install
Затем, при необходимости, можно добавить путь до симлинка «/opt/Mozilla/Firefox/bin/firefox» в ваше окружение:
1 2 3 |
cd ~ echo -e '\nexport PATH=/opt/Mozilla/Firefox/bin:$PATH' >> .bashrc source .bashrc |
После этого можно будет запустить скомпилированный Firefox, просто выполнив в терминале команду:
firefox
Собранный браузер Mozilla Firefox 25 в Linux Mint 15 KDE 64-bit (кликабельно)
Помимо обычной установки, с помощью mach можно собрать установочный пакет, выполнив для этого в каталоге с исходниками:
sudo python2 mach package
После выполнения этой команды создастся переносимый пакет «firefox-VER.en-US.linux-ARCH.tar.bz2», который можно будет использовать в различных системах GNU/Linux. Этот пакет можно найти в сборочном каталоге «obj-ARCH/dist», находящимся в директории с исходным кодом. «ARCH» — в данном случае, архитектура процессора + хост. Для Linux Mint 15 KDE 64-bit, например, полный путь до пакета будет следующим: «/tmp/mozilla-release/obj-x86_64-unknown-linux-gnu/dist/firefox-25.0.en-US.linux-x86_64.tar.bz2».
Когда браузер Mozilla Firefox собран и установлен, можно перейти к удалению ненужного теперь исходного кода:
sudo rm -Rf /tmp/mozilla-release/
3. Сборка Mozilla Thunderbird
Получаем исходный код последней версии почтового клиента (на момент написания статьи это версия 24.1.0) по следующей ссылке, распаковываем его в директорию «/tmp» и переходим в каталог с исходниками:
1 2 |
tar -xjvf ~/Downloads/thunderbird-24.1.0.source.tar.bz2 -C /tmp cd /tmp/comm-esr24/ |
Для конфигурирования в директории с исходниками необходимо создать специальный конфиг «.mozconfig», в который прописать необходимые опции. Список опций, которые я использую для сборки программы в среде KDE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
mk_add_options PYTHON=/usr/bin/python2 mk_add_options MODULE_OPTIMIZE_FLAGS="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options MOZ_OPTIMIZE_FLAGS="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options OPTIMIZER="-march=native -O2 -mmmx -Os -msse -msse2 -mssse3" mk_add_options INTERP_OPTIMIZER="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options MOZ_MAKE_FLAGS="-j4" ac_add_options --host=x86_64-linux-gnu ac_add_options --prefix=/opt/Mozilla/Thunderbird ac_add_options --enable-application=mail ac_add_options --disable-crashreporter ac_add_options --disable-installer ac_add_options --disable-updater ac_add_options --disable-debug ac_add_options --disable-debug-symbols ac_add_options --disable-tests ac_add_options --enable-optimize="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" ac_add_options --enable-strip ac_add_options --enable-install-strip 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-jemalloc ac_add_options --enable-dbus ac_add_options --enable-ogg ac_add_options --enable-wave ac_add_options --enable-methodjit ac_add_options --enable-tracejit ac_add_options --enable-calendar ac_add_options --with-pthreads |
Опции нужно поместить в файл «.mozconfig». Это можно сделать вручную или воспользоваться следующей группой команд:
1 2 |
cd ~/Downloads && wget https://bitbucket.org/exlmotodev/storage/raw/671b954fa8a3bb93008903e237b651086e44bb4f/Mozconfigs/Thunderbird_buildconfig cp ~/Downloads/Thunderbird_buildconfig /tmp/comm-esr24/.mozconfig && cd - |
Описание некоторых опций в конфиге можно посмотреть здесь, а ниже я напишу про те, которые замещают или дополняют существующие:
Опция --enable-application=mail говорит о том, что из исходников будет собираться почтовый клиент.
--prefix=/opt/Mozilla/Thunderbird определяет каталог, в который будет устанавливаться программа. Вы можете удалить эту опцию, тогда каталог для установки будет стандартным — «/usr».
--enable-calendar включает в сборку специальный календарь.
Для компиляции Mozilla Thunderbird в каталоге с исходным кодом следует выполнить команду:
python2 mozilla/mach build
Компиляция выполняется с помощью системы сборки mach и занимает примерно 2-3 часа, в зависимости от производительности вашего процессора и объёма установленной оперативной памяти.
Процесс компиляции Mozilla Thunderbird системой сборки mach в терминале Konsole
Если при компиляции возникнет ошибка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
We know it took a while, but your build finally finished successfully! Error running mach: ['build'] The error occurred in code that was called by the mach command. This is either a bug in the called code itself or in the way that mach is calling it. You should consider filing a bug for this issue. If filing a bug, please include the full output of mach, including this error message. The details of the failure are as follows: Exception: Binary expected at /tmp/comm-esr24/obj-x86_64-unknown-linux-gnu/dist/bin/thunderbird does not exist. File "/tmp/comm-esr24/mozilla/python/mozbuild/mozbuild/mach_commands.py", line 353, in build app_path = self.get_binary_path('app') File "/tmp/comm-esr24/mozilla/python/mozbuild/mozbuild/base.py", line 279, in get_binary_path raise Exception('Binary expected at %s does not exist.' % path) |
Тот тут написано, что её можно смело игнорировать, так как все необходимые программные файлы были уже успешно созданы.
После успешной компиляции необходимо установить почтовый клиент в систему, используя команду:
sudo python2 mozilla/mach install
Она скопирует необходимые для работы программы файлы в директорию, определённую в конфигурационном файле.
Собранный Mozilla Thunderbird 24 в Gentoo Linux Awesome 64-bit (кликабельно)
Теперь можно добавить в переменную окружения «${PATH}» путь до симлинка на исполняемый файл этого почтового клиента:
1 2 3 |
cd ~ echo -e 'export PATH=/opt/Mozilla/Thunderbird/bin:$PATH' >> .bashrc source .bashrc |
Если вам необходим переносимый пакет для установки в другие GNU/Linux дистрибутивы, воспользуйтесь для его создания командой:
sudo python2 mozilla/mach package
После выполнения которой пакет «thunderbird-24.1.0.en-US.linux-x86_64.tar.bz2» можно будет забрать из каталога «/tmp/comm-esr24/obj-ARCH/mozilla/dist/», где «ARCH» в нашем случае — «x86_64-unknown-linux-gnu».
Когда почтовый клиент Mozilla Thunderbird полностью установлен и настроен, можно удалить исходники командой:
sudo rm -rf /tmp/comm-esr24/
4. Сборка Instantbird
Instantbird не разрабатывается компанией Mozilla Corporation, а небольшой группой французских разработчиков. Благодаря тому, что этот мессенджер использует библиотеку libpurple, в нём присутствует поддержка огромного количества протоколов и сервисов обмена мгновенными сообщениями. Для сборки последней версии Instantbird (на момент написания статьи последняя версия — 1.4) следует загрузить исходный код, доступный по этой ссылке, распаковать его и перейти в директорию с исходниками:
1 2 |
tar -xzvf ~/Downloads/instantbird-1.4.src.tgz -C /tmp cd /tmp/instantbird-1.4-src/ |
Система сборки в Instantbird основана на обычных Makefile’ах и может использовать как конфиг «mozconfig», так и «.mozconfig». Для конфигурирования программы Instantbird можно воспользоваться конфигом «mozconfig», вид которого должен быть приблизительно таким:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
mk_add_options PYTHON=/usr/bin/python2 mk_add_options MODULE_OPTIMIZE_FLAGS="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options MOZ_OPTIMIZE_FLAGS="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options OPTIMIZER="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options INTERP_OPTIMIZER="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" mk_add_options MOZ_MAKE_FLAGS="-j4" ac_add_options --host=x86_64-linux-gnu ac_add_options --prefix=/opt/Mozilla/Instantbird ac_add_options --enable-application=instantbird ac_add_options --disable-crashreporter ac_add_options --disable-installer ac_add_options --disable-updater ac_add_options --disable-debug ac_add_options --disable-debug-symbols ac_add_options --disable-tests ac_add_options --enable-optimize="-march=native -O2 -Os -mmmx -msse -msse2 -mssse3" ac_add_options --enable-strip ac_add_options --enable-install-strip ac_add_options --enable-gio ac_add_options --enable-jemalloc ac_add_options --enable-dbus ac_add_options --enable-ogg ac_add_options --enable-wave ac_add_options --enable-methodjit ac_add_options --enable-tracejit ac_add_options --with-pthreads |
Опция
--enable-application=instantbird указывает на то, что из исходников будет собираться клиент обмена мгновенными сообщениями Instantbird.
Описание некоторых остальных опций можно найти здесь.
Добавить опции в конфиг «mozconfig» можно как и вручную, так и воспользовавшись следующими командами:
1 2 |
cd ~/Downloads && wget https://bitbucket.org/exlmotodev/storage/raw/671b954fa8a3bb93008903e237b651086e44bb4f/Mozconfigs/Instantbird_buildconfig cp ~/Downloads/Instantbird_buildconfig /tmp/instantbird-1.4-src/mozconfig && cd - |
В отличии от программных продуктов Mozilla, Instantbird не использует систему сборки mach. Поэтому для компиляции программы в каталоге с исходным кодом следует выполнить команду:
make -f client.mk build
Компиляция IM-мессенджера займёт приблизительно 1.5-2 часа.
Если во время компиляции появится ошибка:
1 2 3 4 5 |
... File "/usr/lib/python2.7/_sysconfigdata.py", line 6, in <module> from _sysconfigdata_nd import * ImportError: No module named _sysconfigdata_nd ... |
Её следует исправить, выполнив следующие команды:
1 2 3 |
cd /usr/lib/python2.7 sudo ln -s plat-x86_64-linux-gnu/_sysconfigdata_nd.py . cd - |
Этот баг встречается во многих дистрибутивах, основанных на Ubuntu.
Когда Instantbird успешно скомпилируется, его нужно установить в директорию, прописанную в файле «mozconfig». Это можно сделать командой:
sudo make -f client.mk install
Затем, при желании, можно добавить в переменную окружения «${PATH}» путь до исполняемого файла программы:
1 2 3 |
cd ~ echo -e 'export PATH=/opt/Mozilla/Instantbird/bin:$PATH' >> .bashrc source .bashrc |
Собранный мессенджер Instantbird 1.4 в Linux Mint 15 KDE 64-bit (кликабельно)
Для того, чтобы сделать переносимый пакет, следует зайти в сборочный каталог «/tmp/instantbird-1.4-src/obj-ARCH/», где «ARCH» — архитектура процессора + хост. А затем выполнить соответствующую команду для сборки пакета. Например, в Linux Mint 15 KDE 64-bit команды будут следующими:
1 2 |
/tmp/instantbird-1.4-src/obj-x86_64-unknown-linux-gnu sudo make package |
Когда последняя команда выполнится, пакет «instantbird-1.4.en-US.linux-x86_64.tar.bz2» можно будет забрать из директории «/tmp/instantbird-1.4-src/obj-x86_64-unknown-linux-gnu/mozilla/dist/».
После успешной компиляции и установки, следует подчистить каталог «/tmp», удалив исходники командой:
sudo rm -rf /tmp/instantbird-1.4-src/
5. Полезные ссылки и ресурсы
Наиболее полную информацию о сборке различных программных продуктов Mozilla Corporation для различных операционных систем можно найти официальном сайте разработчиков Firefox — developer.mozilla.org (MDN).
Отмечу наиболее полезные статьи оттуда:
Документация по системе сборки mach
Простая инструкция по сборке Mozilla Firefox
Сборка Mozilla Firefox в операционной системе GNU/Linux
Сборка Mozilla Firefox в операционной системе Windows
Общая инструкция по сборе Mozilla Firefox для различных операционных систем
Простой мануал по сборке Mozilla Thunderbird
Сборка Mozilla Thunderbird в операционных системах GNU/Linux и MacOS
Для клиента по обмену мгновенными сообщениями Instantbird, существует специальный ресурс, выполненный в формате wiki-энциклопедии:
Wiki-мануал по компиляции Instantbird
Какой геморой.
sudo rm -rf /tmp/instantbird-1.4-src/
команда не работает, говорит путь не найден
Вряд ли этот мануал 2014 года ещё актуален для сборки этих приложений в 2018 году. Да и Instantbird судя по всему прекратил развиваться в 2014 году.