Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Сборка из исходников: ./configure && make на Arch

Сразу к делу: сборка из исходников на Arch сводится к трём командам: ./configure --prefix=/usr, make -j$(nproc) и sudo make install. Но прежде чем запускать их, подумай: на Arch правильный путь не ставить программу вручную, а обернуть сборку в PKGBUILD, чтобы pacman управлял файлами. Ручная сборка оправдана, когда программы нет ни в официальных репозиториях, ни в AUR.

Когда нужна сборка из исходников

Официальные репозитории Arch покрывают большинство программ. AUR закрывает почти всё остальное. Сборка из исходников вручную нужна в трёх случаях.

Программы нет ни в репо, ни в AUR. Редкие утилиты, внутренние инструменты, свежие версии, которые ещё не упакованы. Если программа распространяется только как исходники, собирать придётся самому.

Бета-версии и git-снапшоты. Иногда нужна конкретная ветка или коммит, а в AUR лежит только стабильный релиз. Клонируешь репозиторий и собираешь из свежего кода.

Свои патчи и флаги. Хочешь собрать программу с нестандартными опциями компилятора или применить собственный патч. Пример такой сборки, ядра Linux, разобран в статье «Сборка своего ядра за 5 шагов».

Во всех остальных случаях сначала поищи в репозиториях и AUR. Сборка вручную остаётся последним вариантом, а не первым.

Как устроена сборка из исходников

Классическая сборка проходит три стадии: конфигурация, сборка и установка.

Конфигурация. Скрипт ./configure проверяет систему: какие библиотеки установлены, какой компилятор доступен, какие функции поддерживаются. По результатам он генерирует Makefile, файл с инструкциями для сборки.

Сборка. Команда make читает Makefile и компилирует исходники в исполняемые файлы и библиотеки.

Установка. Команда make install копирует собранные файлы в системные каталоги: бинарники в /usr/bin, библиотеки в /usr/lib, документацию в /usr/share.

Эти три стадии стандартны для программ на C и C++. Для других языков схема похожая, но инструменты другие: у Python это setup.py или pyproject.toml, у Rust cargo build --release.

Каждая стадия может упасть. Конфигурация ругается на отсутствующие зависимости, сборка на ошибки компиляции, установка на права доступа. Разбирайся по очереди, начиная с первой ошибки в выводе.

Что делает ./configure и зачем нужен autogen.sh

Скрипт ./configure создаёт autoconf, инструмент из системы autotools. Разработчик пишет файлы configure.ac и Makefile.am, а autoconf превращает их в готовый скрипт configure. Поэтому в архивах с исходниками configure обычно уже лежит.

Но не всегда. Если в исходниках нет ./configure, а есть только configure.ac, сначала запусти:

./autogen.sh

или

./bootstrap

Эти скрипты запускают autoconf и automake и создают configure на месте. После этого сборка идёт как обычно.

Зачем нужен –prefix

./configure принимает флаг --prefix, каталог установки. По умолчанию это /usr/local. На Arch это неправильный выбор, и вот почему.

В дистрибутивах вроде Ubuntu /usr/local служит отдельным пространством для программ, собранных вручную. На Arch всё ставится в /usr: pacman кладёт бинарники в /usr/bin, библиотеки в /usr/lib. Каталог /usr/local на Arch пустует, а в PATH уже прописан /usr/bin.

Поэтому на Arch собирай так:

./configure --prefix=/usr

Если поставить с дефолтным префиксом, программа окажется в /usr/local/bin, и её придётся вызывать полным путём или править PATH. Зачем усложнять.

Кроме --prefix у ./configure есть и другие полезные флаги. ./configure --help покажет полный список. Часто встречаются --with-... и --enable-...: они включают или выключают отдельные функции. Например, ./configure --prefix=/usr --disable-docs отключит сборку документации.

Как собрать программу

После конфигурации запускай сборку:

make -j$(nproc)

Флаг -j включает параллельную сборку: несколько файлов компилируются одновременно. $(nproc) подставляет число ядер процессора. На машине с восемью ядрами сборка ускоряется в разы.

Если сборка упала с ошибкой, смотри последние строки вывода. Чаще всего не хватает библиотеки разработчика. В Arch заголовочные файлы лежат в том же пакете, что и сама библиотека, в отличие от Debian с его -dev пакетами. Найди нужный пакет через pacman -Ss, поставь и повтори make.

Если менял исходники или флаги, перед повторной сборкой очисти старые объектные файлы:

make clean

Иначе компилятор может не пересобрать часть кода, и результат окажется смесью старого и нового.

Как установить собранное

Когда сборка завершилась без ошибок:

sudo make install

Команда копирует файлы в системные каталоги. Всё, программа установлена.

Если собираешь в каталог, куда есть доступ без root, sudo не нужен. Но в /usr без прав не попасть, поэтому на Arch команда почти всегда идёт с sudo.

Но есть нюанс: make install не сообщает pacman о новых файлах. Менеджер пакетов не знает, что ты поставил. Подробнее об этом ниже.

Что такое DESTDIR

Если собираешь не для установки, а для упаковки, используй DESTDIR:

make install DESTDIR=/tmp/pkg

Файлы окажутся в /tmp/pkg/usr/bin и так далее, а не в системе. Так делают, когда собирают пакет для другого дистрибутива или проверяют содержимое установки.

Чем сборка на Arch отличается от makepkg

Вот главное, что нужно понять про Arch. Ручная сборка с make install работает, но это путь в никуда: pacman не отслеживает файлы, обновления не приходят, удаление превращается в квест. Правильный способ собрать пакет через makepkg.

makepkg читает PKGBUILD, скрипт с описанием сборки: откуда брать исходники, какие зависимости нужны, куда ставить. Он собирает программу в чистом окружении и упаковывает результат в архив. Дальше ты ставишь этот архив через pacman, и пакет ведёт себя как обычный: его можно обновлять, удалять, проверять.

В других дистрибутивах для этого используют checkinstall: он перехватывает make install и упаковывает файлы в пакет. На Arch checkinstall не нужен, у тебя уже есть makepkg, который делает то же самое правильно.

Если не хочешь писать PKGBUILD руками, используй yay или paru. Они умеют собирать из AUR автоматически: скачивают PKGBUILD, запускают makepkg, ставят готовый пакет. Разница между ними разобрана в статье «yay vs paru: какой безопаснее». Установка пакетов из AUR по шагам описана в «Установка пакетов из AUR».

Как удалить собранную вручную программу

Вот тут и всплывает цена ручной сборки. pacman -Qo не знает файлов, которые ты поставил через make install. Удалить их pacman не сможет.

Если исходники ещё на месте, попробуй:

sudo make uninstall

Многие Makefile поддерживают цель uninstall, она удаляет установленные файлы. Но не все. Если цели нет, придётся удалять вручную: смотреть, что make install скопировал, и стирать по одному файлу.

Проверить, какие файлы принадлежат пакету, можно так:

pacman -Ql имя-пакета

А узнать, какому пакету принадлежит файл:

pacman -Qo /usr/bin/имя-программы

Если файл не принадлежит ни одному пакету, pacman ответит, что файл не найден. Это и есть признак ручной установки.

Если исходники потеряны, а uninstall недоступен, остаётся разбирать вручную. Сверься с выводом make install из истории терминала или смотри типовые пути: /usr/bin, /usr/lib, /usr/share. Это долго и муторно, поэтому и стоит собирать через пакет.

Какие риски у ручной сборки

Файлы вне pacman. Программа лежит в /usr, но менеджер пакетов о ней не знает. При обновлении системы pacman может перезаписать её файлы или споткнуться о них. Типичная ошибка «file exists on filesystem» разобрана в статье «Конфликт файлов с официальным репозиторием».

Зависимости не отслеживаются. Собранная вручную программа может требовать библиотеку, которую ты потом удалишь. pacman не предупредит.

Обновления не приходят. Программа не обновится сама. Каждую новую версию придётся собирать заново.

Конфликты версий. Если в репозитории появится такая же программа, pacman откажется её ставить: файлы уже заняты.

Сиротские файлы. После удаления программы в системе остаются конфиги, библиотеки и документация. pacman о них не знает и не почистит.

Все эти риски исчезают, если собирать через PKGBUILD. Поэтому правило простое: хочешь собрать из исходников, собери пакет, а не ставь вручную.

Частые вопросы

Нужно ли всегда указывать –prefix=/usr?

На Arch да. Без флага программа уедет в /usr/local, и её не будет в PATH. Исключение: сборка в домашний каталог. Тогда укажи --prefix=$HOME/.local и добавь $HOME/.local/bin в PATH, если его там нет.

Что делать, если ./configure ругается на отсутствующую библиотеку?

Поставь пакет с заголовочными файлами и повтори. Обычно ошибка называет библиотеку прямо: «checking for libfoo… no». Найди пакет через pacman -Ss libfoo и установи.

Можно ли откатить make install?

Только если в Makefile есть цель uninstall. Иначе вручную. Ещё один аргумент за сборку через makepkg: пакет удаляется одной командой pacman -R.

Чем make install отличается от установки через pacman?

make install копирует файлы и забывает о них. pacman записывает каждый файл в свою базу, проверяет конфликты и зависимости. Поэтому pacman может обновить и удалить пакет, а про ручную установку он ничего не знает.

Полезные ресурсы

Заключение

Итог простой: сборка из исходников на Arch проходит через ./configure --prefix=/usr, make -j$(nproc) и sudo make install. Она нужна, когда программы нет в репозиториях и AUR, или когда нужны бета-версии и свои патчи. Но помни: ручная установка оставляет файлы вне pacman, и удалить их потом сложно. Правильный путь на Arch это обернуть сборку в PKGBUILD и поставить через makepkg. Тогда pacman управляет пакетом как обычным, а ты получаешь свежую программу без головной боли.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max