# Сборка eopkg пакета [Официальная документация](https://getsol.us/articles/packaging/) по сборке пакетов `eopkg` для последующего размещения в официальном репозитории. ## Процесс сборки * [Предварительная подготовка](#предварительная-подготовка) * [Использование локального репозитория](#использование-локального-репозитория) * [Подготовка сборки пакета](#подготовка-сборки-пакета) ## Предварительная подготовка Для начала необходимо сконфигурировать файл `packager`, который используется для упаковщика в результирующем двоичном пакете. Для этого в домашней директории необходимо создать каталог `.solus` с содержащим внутри себя файлом `packager`: ```shell mkdir ~/.solus nano ~/.solus/packager ``` Внутри файла необходимо указать два ключа, идентифицирующие собирающего пакеты: ```shell [Packager] Name=Your Name Here Email=your.email@address ``` Следующим действием необхоимо произвести установку [базового инструмента разработки](https://getsol.us/articles/package-management/basics/en/#base-development-tools) `system.devel`: ```shell sudo eopkg install -c system.devel ``` Для сборки `eopkg` пакетов необходимо использовать инструмент `solbuild`: ```shell sudo eopkg it solbuild ``` Если нужно использовать только [unstable](repositories.md#список-репозиториев) репозиторий по умолчанию, также [установить конфигурацию для нестабильного репозитория](https://getsol.us/articles/packaging/building-a-package/en/#initializing-solbuild) `solbuild-config-unstable`: ```shell sudo eopkg it solbuild-config-unstable ``` Если нужно использовать только [local](repositories.md#инициализация-локального-репозитория) репозиторий по умолчанию, также [установить конфигурацию для локального нестабильного репозитория](https://getsol.us/articles/packaging/local-repository/en/#install-the-local-profile): ```shell sudo eopkg install solbuild-config-local-unstable ``` Также понадобятся `git` и `arcanist`: ```shell sudo eopkg it git arcanist ``` После установки необходимо инициализировать `solbuild`: ```shell sudo solbuild init ``` Это займет некоторое время, так как будет производиться загрузка и подготовка образа. Рекомендуется обновлять `solbuild`, в противном случае обновления будут применяться при каждой сборке: ```shell sudo solbuild update ``` Следующим шагом необходимо создать каталог для разработки, в котором будет находиться все конфигурационные файлы для сборки пакетов. К примеру, в домашней директории создать каталог `building`: ```shell mkdir ~/building ``` Далее внутри каталога `building` произвести настройку инструментов для сборки. Нужно настроить `common` (набор сценариев создания), который позволяет более легко управлять, создавать, проверять и публиковать пакеты. Для этого нужно клонировать общий репозиторий с помощью `git`: ```shell cd ~/building git clone https://dev.getsol.us/source/common.git ``` Далее нужно настроить символические ссылки: ```shell ln -sv common/Makefile.common . ln -sv common/Makefile.toplevel Makefile ln -sv common/Makefile.iso . ``` В результате выполненных действий каталог `building` примет следующий вид: ```shell ├── common ├── Makefile ├── Makefile.common └── Makefile.iso ``` ## Использование локального репозитория После выполнения установки `solbuild-config-local-unstable` создаётся путь `/var/lib/solbuild/local/` локального репозитория. При использовании локального репозитория необходимо выполнить [индексацию](repositories.md#инициализация-локального-репозитория) списка: ```shell sudo eopkg index --skip-signing /var/lib/solbuild/local/ --output /var/lib/solbuild/local/eopkg-index.xml ``` Стоит заметить, что в своей работе `eopkg` всегда будет отдавать предпочтение пакетам из самого верхнего репозитория, указанного в списке `eopkg lr`. Другими словами - если пакет существует как в локальном репозитории `solbuild`, так и в официальном вышестоящем репозитории Solus, `eopkg` будет рассматривать только пакет из первого репозитория, указанного в `eopkg lr`, независимо от его номера выпуска. Для того, чтобы изменить порядок следования репозиториев (их приоритетов) необходимо передобавить их в нужном порядке, например: ```shell sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz sudo eopkg ar Solus https://mirrors.rit.edu/solus/packages/unstable/eopkg-index.xml.xz ``` Таким образом локальный репозиторий будет иметь высокий приоритет для `eopkg`: ```shell eopkg lr Local [active] /var/lib/solbuild/local/eopkg-index.xml.xz Solus [active] https://mirrors.rit.edu/solus/packages/unstable/eopkg-index.xml.xz ``` Стоит обратить внимание, что пакеты, отсутствующие в локальном репозитории сборки `solbuild`, будут извлечены из вышестоящего официального репозитория Solus (`unstable`). Индексацию `eopkg` необходимо обновлять всякий раз, когда добавляется или удаляется локально созданные пакеты в локальном репозитории `solbuild` – в противном случае `eopkg` не будет знать, что новые пакеты доступны/были удалены из репозитория. ## Подготовка сборки пакета Все пакеты создаются из [одного файла сборки](https://getsol.us/articles/packaging/package.yml/en/#format), который предоставляет все необходимые метаданные для менеджера пакетов, а также этапы упаковки, необходимые для создания пакета. Это соответствует спецификации YAML.