Gentoo — мощный и гибкий дистрибутив Linux. Благодаря инновационному менеджеру пакетов Portage он позволяет вам полностью собрать вашу компьютерную систему до самых основных частей.
Это связано с тем, что Gentoo по умолчанию требует от вас компилировать всех пакетов, которые вы хотите установить. Этот подход позволяет вам изменять настройки времени компиляции. Сюда входят настройки для различных технологий, которые были бы невозможны в двоичном дистрибутиве.
Читайте также: Как исправить сломанные пакеты в Linux
Что такое управление исходными пакетами?
Управление пакетами на основе исходного кода — это оригинальный способ распространения сторонних программ в Linux. Это система, в которой у сопровождающего есть список из рецепты для получения и создания программ.
Эти рецепты могут содержать как исходный код программы, так и инструкции по ег
Contents
Что такое управление исходными пакетами?
грузить эти рецепты у своего дистрибьютора через менеджер пакетов. После этого ваш компьютер загрузит исходный код программы и создайте его для вас в режиме реального времени .![5 советов по ускорению компиляции 04 дистрибутива Ebuild](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-04-ebuild-distribution.png)
Хотя это может показаться старомодным, такой подход имеет ряд преимуществ:
- Распространение только рецепта пакета требует меньше данных, чем распространение двоичных копий. Это, в свою очередь, уменьшает количество ресурсов, необходимых для размещения зеркала репозитория.
- Компиляция пакета из его исходного кода открывает доступ к программам, которые обеспечивают работу вашей операционной системы. Это может быть особенно полезно, если вы хотите узнать, как работает ваш компьютер и как можно расширить его функции.
- Наконец, компиляция пакета из его исходного кода дает вам возможность настраивать и изменять поведение ваших программ. Вы можете легко включать или удалять функции, которые вам не нужны.
Несмотря на это, этот подход имеет ряд недостатков. Например, компиляция и установка таких пакетов, как Firefox и Chromium, занимает несколько часов. Это потому, что это программы с миллионами строк кода и сотнями зависимостей.
![5 советов по ускорению компиляции 05. Пример скомпилированной программы](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-05-example-compiled-program.jpg)
Зная это, цель этой статьи — представить пять приемов, которые вы можете использовать для улучшения времени компиляции при использовании Gentoo.
Читайте также: Как собрать пакет из исходного кода в Linux
1. Оптимизация MAKEOPTS
Один из самых простых способов ускорить компиляцию в Gentoo — оптимизировать файл make.conf. Это основной файл конфигурации, который Portage использует для определения параметров компиляции вашего компьютера. Таким образом, он содержит множество переменных, которые определяют архитектуру и настройки вашей системы.
Вы можете найти файл make.conf в «/etc/portag». Вы также можете распечатать содержимое файла с помощью следующей команды:
cat /etc/portage/make.conf
![5 советов по ускорению компиляции 06, пример Make Conf](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-06-example-make-conf.png)
Единственное, что вам нужно изменить для оптимизации Portage, — это MAKEOPTS. Это настройка, которая отвечает за флаги оптимизации вашей системы. Рассмотрим следующий пример:
[...] MAKEOPTS="-j1 -l1" [...]
В этом случае с MAKEOPTS можно использовать два флага:
- Флаг
-j
указывает количество заданий компиляции, которые вы хотите выделить вашему процессору. Хорошее эмпирическое правило при установке этого значения — предоставить ему половину количества ядер, которые есть у вашего Процессор . Например, если у вас четырехъядерный процессор, вы можете установить это значение на-j2
. - Флаг
-l
, с другой стороны, устанавливает желаемую среднюю нагрузку для вашей системы. Средняя нагрузка — это совокупное количество задач, которые ЦП выполняет за определенный период времени. Например, если вы хотите ускорить компиляцию в вашей системе, вы можете установить для этого значения значение-l2
.
Читайте также: 5 полезных пакетов Emacs для повышения производительности
2. Воспользуйтесь преимуществами CCache
Еще один способ ускорить компиляцию — использовать 1. Оптимизация MAKEOPTS> . Это сторонняя программа, которая позволяет сохранять общие скомпилированные файлы во временное пространство на вашем компьютере.
![5 советов по ускорению компиляции веб-сайта 07 Ccache](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-07-ccache-website.png)
Оттуда ваш компилятор сможет использовать эти сохраненные файлы вместо того, чтобы перекомпилировать их снова. Это может быть особенно полезно, если вы постоянно пересобираете программы или компилируете большой пакет.
Вы можете установить CCache через Portage:
sudo emerge --ask dev-util/ccache
![5 советов по ускорению компиляции 08 установки Ccache](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-08-ccache-install.png)
Следующее, что вам нужно сделать, — это настроить параметры CCache. Для этого вам необходимо создать файл ccache.conf:
sudo mkdir /var/cache/ccache/ && touch /var/cache/ccache/ccache.conf
Здесь вы можете использовать настройки конфигурации CCache по умолчанию, чтобы начать работу:
max_size = 20.0G umask = 002 hash_dir = false compiler_check = %compiler% -v cache_dir_levels = 3
Последнее, что вам нужно сделать, это указать Portage использовать CCache при компиляции пакетов. Для этого вы можете включить в ваш make.conf следующие строки:
FEATURES="ccache" CCACHE_DIR="/var/cache/ccache"
Читайте также: 3 способа использовать старый компьютер с Linux
3. Попробуйте DistCC
Подобно CCache, DistCC — это сторонняя программа, которая может помочь ускорить компиляцию. В отличие от CCache, DistCC делает это путем распределения задач компиляции на другие компьютеры в вашей сети. Это может быть особенно полезно, если у вас дома несколько неиспользуемых компьютеров.
![5 советов по ускорению компиляции 09 сайта Distcc](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-09-distcc-website.png)
Это работает так: DistCC разделен на две программы: distccd и distcc.
- distccd — это утилита, работающая на вычислительном сервере. Это простая программа, которая прослушивает входящие запросы DistCC от клиентов и принимает от них задачи. После завершения компиляции скомпилированный объект отправляется обратно клиенту для упаковки.
- distcc — это клиентская программа, которая подключается к distccd. Это программа, которая работает с Portage, позволяя легко планировать и распределять задачи компиляции в сети.
С другой стороны,
Создать неб
2. Воспользуйтесь преимуществами CCache
того вам необходимо установить программу distcc как на ваш сервер, так и на клиентский компьютер:sudo emerge --ask sys-devel/distcc
Настройка сервера DistCC
Далее вам необходимо настроить сервер на прием соединений DistCC. Это можно сделать, создав файл конфигурации distcc в «/etc/conf.d/»:
sudo touch /etc/conf.d/distccd
После этого вы можете включить следующую строку кода в свой файл distccd:
DISTCCD_OPTS="--port 3632 --log-level notice --log-file /var/log/distccd.log -N 10 --allow 192.168.254.101"
- Флаг
port
указывает порт, на котором distccd будет прослушивать входящие соединения. 3632 — порт по умолчанию для DistCC. log-level
иlog-file
сообщают DistCC о необходимости вести файл журнала для задач, которые он выполняет.- Флаг
N
указывает на «хорошее качество» distccd. Это переменная, которая сообщает DistCC, насколько он может использовать процессор сервера для задач компиляции. Это значение находится в диапазоне от 0 до 20, где 0 – наименее приятный, а 20 – самый лучший. - Наконец, флаг
allow
указывает DistCC прослушивать входящие соединения только с определенных адресов. Например, строка выше сообщает DistCC прослушивать входящие соединения только от одного клиента.
![5 советов по ускорению компиляции конфигурации Distcc 11](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-11-distcc-config.png)
Следующее, что вам нужно сделать, это создать файл журнала distccd:
sudo touch /var/log/distccd.log sudo chown distcc:root /var/log/distccd.log
Теперь вы можете разрешить серверу distccd принимать входящие соединения DistCC:
sudo rc-update add distccd default sudo rc-service distccd start
Настройка клиента DistCC
В отличие от distccd, настройка клиента DistCC невероятно проста. Сначала вам нужно сообщить клиенту, где искать сервер distccd:
sudo /usr/bin/distcc-config --set-hosts "localhost 192.168.254.102"
![5 советов по ускорению компиляции конфигурации клиента Distcc 12](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-12-distcc-client-config.png)
Это позволит DistCC использовать как локальный компьютер, так и сервер для компиляции программ. После этого остается только настроить make.conf для использования DistCC.
Как и в случае с CCache, вам необходимо использовать переменную FEATURES, чтобы сообщить Portage, что вы использу
3. Попробуйте DistCC
имер, это файл make.conf с клиентского компьютера:MAKEOPTS="-j4 -l4" FEATURES="distcc"
Читайте также: Что такое аппаратное ускорение и почему оно имеет значение
4. Используйте BuildPKG
Еще один способ ускорить компиляцию в Gentoo — создать сервер распространения двоичных файлов. При этом вы используете отдельную машину, на которой пакеты собираются и распространяются в двоичной форме.
В отличие от DistCC, для распространения двоичных файлов требуется только одна машина для компиляции. Полученная программа затем распространяется на несколько компьютеров, где они могут установить ее в обычном режиме.
![5 советов по ускорению компиляции дистрибутива Buildpkg 13](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-13-buildpkg-distribution.png)
Такой способ может оказаться полезным, если вы уже используете Gentoo на нескольких подобных машинах. Это связано с тем, что двоичные файлы сокращают время, необходимое для создания и обслуживания одного клиента.
Чтобы начать, вам нужно всего лишь добавить следующую строку в make.conf вашего сервера сборки:
FEATURES="buildpkg"
![5 советов по ускорению компиляции конфигурации сервера сборки 14 Buildpkg](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-14-buildpkg-build-server-config.png)
Это, в свою очередь, заставит Portage автоматически создавать двоичный пакет для каждой программы, которую вы устанавливаете на свой сервер.
Оттуда вам нужно создать способ совместного использования этих двоичных файлов на компьютерах в вашей сети. Для этого вы можете установить простой веб-сервер HTTP:
sudo emerge --ask www-servers/lighttpd
Затем сообщите Lighttpd, чтобы он обслуживал пакеты вашего сервер
Настройка сервера DistCC
«/etc/lighttpd/lighttpd.conf»:server.modules += ( "mod_alias" ) alias.url = ( "/packages" => "/var/cache/binpkgs" )
Установка бинарных пакетов в Gentoo
После этого установка бинарных пакетов с вашего сервера распространения станет простым двухэтапным процессом. Сначала вам нужно сообщить Portage адрес вашего сервера распространения:
PORTAGE_BINHOST="http://192.168.254.110/packages"
![5 советов по ускорению компиляции конфигурации клиента Buildpkg 15](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-15-buildpkg-client-config.png)
Оттуда я использовал Portage для установки бинарных пакетов:
sudo emerge --ask -K www-client/firefox
Здесь опция -K
заставит Portage искать только двоичные файлы того пакета, который вы хотите установить.
При этом он проверит наличие на сервере копий программы Firefox. Если Portage не сможет их найти, установка завершится неудачей. В конечном итоге это означает, что на сервере уже должен быть двоичный файл программы, прежде чем его запросят клиенты.
Читайте также: Как собрать новый компьютер для Linux
5. Оптимизируйте свой компилятор в Gentoo
Наконец, вы также можете установить параметры GNU C-компилятор (GCC), чтобы оптимизировать скорость.
![5 советов по ускорению компиляции. 16 примеров компиляции.](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-16-example-compile.png)
Однако, в отличие от MAKEOPTS, эти параметры будут зависеть от вашего компьютера. Сюда входит процессор, а также имеющийся у вас жесткий диск и память.
Далее вам необходимо поместить эти параметры в переменную COMMON_FLAGS
. Например:
COMMON_FLAGS="-march=native -O1 -pipe"
При этом вы можете настроить три параметра для оптимизации GCC:
- Опция
march
указывает GCC скомпилировать программу в нужном вам процессоре. В большинстве случаев вы указываете GCC создать программу для вашего локального процессора. Для этого вы можете указать значение «native», и GCC выполнит сборку для процессора, на котором он работает в данный момент. - Пара
Настройка клиента DistCC
ень оптимизации, который вы хотите для своих программ. Это диапазон от 0 до 3. Чем выше установленное значение, тем быстрее будет работать программа. Однако это увеличит время, необходимое для его компиляции. - Опция
pipe
— это переключатель, который можно установить для ускорения процесса компиляции. Это достигается за счет хранения объектов в оперативной памяти, а не во временных файлах. Таким образом, это потребует много памяти, и использование этого с ограниченной оперативной памятью приведет к сбою GCC.
![5 советов по ускорению компиляции 17 вариантов оптимизации](https://saintist.ru/wp-content/uploads/2024/05/5-tips-speed-compile-17-optimization-options.png)
Читайте также: 5 лучших дистрибутивов Linux для разработчиков и программистов
Часто задаваемые вопросы
1. У меня нет переменных MAKEOPTS или FEATURES в моем make.conf. Моя установка Gentoo сломана?
Нет! Отсутствие переменных MAKEOPTS и FEATURES в файле make.conf по умолчанию является нормальным явлением. Вы можете просто добавить переменные и их значения в ваш make.conf, и Portage распознает их и немедленно применит.
2. Можно ли включить CCache только для тех пакетов, которые мне нужны?
Да! Вы легко включаете CCache только для определенных пакетов. Для этого вам нужно сначала удалить значение «ccache» в переменной FEATURES.
Оттуда вам нужно отредактировать файл «/etc/portage/package.env». Это файл, в котором вы можете включить функции Portage для каждого пакета. Учит
4. Используйте BuildPKG
который использует CCache для некоторых программ:www-client/firefox ccache.conf sys-devel/gcc ccache.conf sys-devel/clang ccache.conf
При этом я включил CCache для Firefox, GCC и Clang. Это означает, что Portage сохранит только объектные файлы этих программ и связанных с ними зависимостей.
3. Есть ли проблемы с запуском сервера распространения Gentoo?
Одна из основных проблем обслуживания сервера распространения заключается в том, что вы несете ответственность за поддержание бинарных пакетов в актуальном состоянии. Это означает, что прежде чем вы сможете обновить какие-либо клиенты, вам необходимо сначала обновить сервер распространения, а затем удалить старые двоичные файлы в ваших клиентах.
Другая проблема с запуском сервера распространения заключается в том, что вы теряете гибкость USE-флагов для своих клиентских компьютеров. Это означает, что вам необходимо включить флаги, которые вам не нужны, на всех ваших машинах.
Изображение предоставлено: Unsplash