Файл Pkgbuild не существует

Обновлено: 21.11.2024

В дистрибутиве программного обеспечения MSYS2 используется порт Pacman (известный из Arch Linux) для безопасной установки, удаления и обновления двоичных пакетов, а также для создания этих пакетов в первую очередь.

Общая информация

Существует 3 репозитория пакетов: msys, mingw32 и mingw64. Программное обеспечение msys (из репозитория msys) — это программное обеспечение, которое зависит от msys-2.0.dll и очень похоже на программное обеспечение Cygwin (которое представляет собой уровень эмуляции POSIX для Windows). Собственное программное обеспечение Windows (с точки зрения этого проекта) — это программное обеспечение, которое не зависит от msys-2.0.dll и динамически связывается с высокосовместимой msvcrt.dll.

В этом документе, чтобы избежать путаницы, MSYS2 относится к дистрибутиву программного обеспечения, а msys — к репозиторию, пакетам в этом репозитории и программному обеспечению в тех пакетах, которые ссылаются на msys-2.0.dll.

Рецепты пакетов

Пакеты создаются на основе программных рецептов, чтобы обеспечить воспроизводимость сборок. Рецепт — это набор файлов, которые описывают, как собрать, упаковать и установить данную часть программного обеспечения; они часто специфичны для MSYS2.

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

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

ПКГБИЛД

Используйте 2 пробела для отступа: expand -t 2 PKGBUILD > PKGBUILD.new && mv PKGBUILD.new PKGBUILD

PKGBUILD — это сценарий bash, определяющий переменные и функции, которые затем используются системой сборки для создания пакета. Справочная страница PKGBUILD и вики-страница PKGBUILD на ArchWiki являются хорошими источниками информации обо всех деталях PKGBUILD. Пакеты PKGBUILD для mingw в общих чертах основаны на рекомендациях по кросс-компиляции пакетов mingw-w64 в Arch Linux. Если вы пока не хотите читать все это, просто прочитайте некоторые существующие PKGBUILD; назначение большинства частей должно быть очевидным.

Файлы исправлений

Здание

Фактическая сборка и упаковка выполняются с помощью запуска makepkg или makepkg-mingw . Первый используется для сборки пакетов msys, а второй — для пакетов mingw. Чтобы узнать больше, прочтите man-страницу makepkg и вики-страницу makepkg на ArchWiki. При создании либо msys, либо собственного программного обеспечения следует использовать оболочку MSYS, а не оболочки MINGW.

Процесс происходит в несколько этапов:

  • загрузить, проверить и извлечь — при необходимости загружаются исходные тексты пакетов, проверяются контрольные суммы и подписи PGP, если они указаны, и извлекаются в рабочий каталог (по умолчанию src)
  • prepare() — с помощью этой функции упаковщик может указать, что должно произойти с исходным кодом перед фактической сборкой; применить исправления и модификации исходного кода здесь
  • build() — эта функция содержит команды для запуска инструментов сборки, например ./настроить и сделать
  • check() — необязательный шаг для проверки продуктов сборки, например. запуск набора тестов программного обеспечения
  • package() — этой функции предоставляется временный каталог, куда она должна поместить окончательное содержимое пакета, используя, например, сделать установку
  • очистить, заархивировать и подписать — содержимое пакета сканируется на наличие некоторых проблем, приводится в порядок и упаковывается в окончательный .tar.zst с дополнительной подписью в .tar.zst.sig

Инструмент makepkg принимает аргументы, позволяющие отключить некоторые этапы или некоторые проверки. Типичное использование makepkg -sCLf для полной сборки и makepkg -RdLf для "переупаковки". Повторная упаковка полезна, когда процесс завершился ошибкой в ​​package() и вы не хотите снова запускать длинную часть сборки. makepkg-mingw принимает те же аргументы.

Повторная сборка пакета

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

Пример получения исходного кода репозитория msys, сборки и последующей установки пакета из него:

Пример получения исходного кода репозитория mingw, сборки и последующей установки пакета из него:

Новый пакет от начала до конца

Пожалуйста, не создавайте запросы на вытягивание для PKGBUILD, которые просто переупаковывают двоичные выпуски из других проектов. Это противоречит целям MSYS2. Если программное обеспечение не может быть собрано по какой-либо причине, попробуйте устранить причину этого.

  1. Решите, какую подсистему использовать (msys или mingw)
  2. Создайте программное обеспечение в целевой подсистеме.
  3. Протестируйте функциональность
  4. При необходимости создайте исправления и повторите попытку.
  5. Подготовить рецепт
  6. Создать пакет
  7. Установите пакет локально
  8. Проверить установленный пакет
  9. При необходимости измените рецепт и повторите.
  10. Зафиксируйте новый пакет в целевом репозитории (в своей учетной записи GitHub)
  11. Отправьте запрос на перенос, чтобы добавить новый рецепт в официальный репозиторий.
  12. Проверьте результаты, отзывы и комментарии CI
  13. Исправьте ошибки, если необходимо, и повторите попытку.
  14. Предложите свои исправления разработчикам программного обеспечения (вверх по течению)

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

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

Какая подсистема?

В MSYS2 есть 2 типа пакетов:

  • пакеты msys — они работают на уровне эмуляции и обычно представляют собой программы только для POSIX.
  • пакеты mingw — они работают так же, как и любая другая программа Windows

Вы должны рассматривать эти две системы как отдельные, где пакеты msys обычно должны быть только сборочными зависимостями пакетов mingw. Вы также не можете связать программу mingw с библиотекой msys.

Это означает, что вам сначала нужно решить, какая подсистема (и какой репозиторий) подходит для вашего нового пакета. Набор вещей, принадлежащих подсистеме msys, довольно мал:

  • основные элементы POSIX: файловая система, среда выполнения msys2, .
  • нативная цепочка инструментов: gcc , binutils , gdb , .
  • поддержка программ, которые сложно перенести в Windows: pacman , bash , automake , make , .
  • программы для преодоления разрыва: mintty , winpty , .
  • поддерживающие программы, даже если они переносимы: python , man , vim , git , .
  • тщательно подобранные полезные инструменты: mc , ssh , rsync , lftp , .
  • зависимости этих пакетов

Другими словами, если программа необходима для создания собственного программного обеспечения, но ее трудно портировать, ее можно превратить в пакет msys. Все остальное необходимо делать в виде пакета mingw или проверять индивидуально.

Создание программного обеспечения

Чтобы иметь возможность скомпилировать программное обеспечение или собрать пакет, вам необходимо установить базовые пакеты, установив base-devel , поскольку установка MSYS2 не содержит инструментов сборки.

Если вы не установите требуемый пакет, сборка может завершиться с непредвиденными ошибками.

Обратите внимание, что вопреки тому, что вы могли ожидать, base-devel не содержит ни gcc, ни binutils.

Проверка программного обеспечения

Убедитесь, что программное обеспечение работает должным образом. Попробуйте набор тестов.

Обновление программного обеспечения

Если программное обеспечение не работает сразу или даже не собирается, вам, вероятно, потребуется передать некоторые аргументы сценариям сборки или изменить (исправить) его систему сборки, исходный код, файлы определений и т. д. Такие исправления будут храниться в виде файлов вместе с PKGBUILD.

Эта часть очень специфична для каждого программного обеспечения и может потребовать поиска в Интернете, общения с разработчиками программного обеспечения или группой поддержки, общения с нами и т. д. Вики-страница переноса может помочь с некоторыми распространенными проблемами. Хотя, вероятно, можно делать быстрые (обезьяньи) исправления, которые исправляют программное обеспечение для нашего варианта использования (и, возможно, ломают его для всех остальных), не лучше ли делать надлежащие исправления с хирургической точностью и пытаться принять их программным обеспечением? разработчик ("upstream").

Рецепт

Создайте PKGBUILD с описанием всех шагов, необходимых для сборки и упаковки программного обеспечения, включая все исправления и дополнительные файлы. Убедитесь, что вы следуете стилю и идеям других рецептов, если это применимо. Хорошая стратегия состоит в том, чтобы найти несколько существующих рабочих рецептов, которые используют ту же систему сборки, что и ваше программное обеспечение, и использовать их в качестве шаблона для вашего рецепта. Вы также можете черпать вдохновение из официального рецепта Arch Linux (или неофициального AUR) для своего программного обеспечения.

Построить пакет

Запустите команду makepkg ( makepkg или makepkg-mingw ) для своего рецепта.

makepkg-mingw — это, по сути, оболочка, которая выполняет несколько проверок, настраивает правильную среду и дважды запускает makepkg: один раз для mingw32 и один раз для mingw64. Если вы хотите выполнить сборку только для одной архитектуры (например, если вы используете 32-разрядную версию Windows), вам необходимо определить MINGW_ARCH в среде со значением mingw32 или mingw64, например:

<р>. или вы можете экспортировать его из ~/.profile, чтобы он настраивался автоматически:

Обратите внимание: если вы хотите внести свой вклад, мы будем признательны, если вы протестируете свои пакеты на обеих архитектурах (32- и 64-разрядной), что возможно только в 64-разрядной системе Windows.Если по какой-то причине вы не можете этого сделать, мы можем протестировать ваши запросы на вытягивание в 64-разрядной системе.

Установить пакет

Если сборка пакета выполнена успешно, рекомендуется перед установкой проверить его содержимое, чтобы убедиться, что он содержит то, что вы хотели. При установке (используя pacman -U pkgname-pkgver-arch.tar.zst ) pacman проверяет наличие конфликтов файловой системы и затем помещает содержимое пакета в корень MSYS2, как это делается с любым другим пакетом. Вы также можете удалить пакет с помощью pacman -R pkgname .

Тестовый пакет

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

Обратите особое внимание на файлы конфигурации и убедитесь, что они не содержат жестко закодированных элементов пути и указывают на правильное расположение. Типичные файлы конфигурации:

  • Файлы *-config в каталоге $/bin
  • Файлы *.pc для pkg-config в каталоге $/lib/pkgconfig
  • Файлы *.cmake в каталоге $/lib/cmake

Убедитесь, что пакет работает, даже если он установлен в чистую обновленную установку MSYS2, желательно не в расположение по умолчанию C:\msys (и, возможно, даже временно переименовать основной корень установки MSYS2). Это проверяет, правильно ли вы указали зависимости среды выполнения и что программное обеспечение не пытается использовать жестко заданные пути из вашей сборки.

Изменить пакет

Если есть проблемы, исправьте их в PKGBUILD и пересоберите или переупакуйте при необходимости. Убедитесь, что вы не используете устаревшие продукты сборки или исходные файлы из предыдущей сборки (используйте флаг -C для makepkg).

Зафиксировать

Интегрируйте свой рецепт в локальный клон репозитория msys2-packages или mingw-packages. Чтобы помочь нам избежать накопления бесполезных коммитов в репозитории, следуйте этим рекомендациям:

  • создайте новую ветку для своей работы
  • вложите в него всю свою работу, желательно всего за 1 коммит
  • если вы хотите получить изменения из нашего репозитория, используйте стратегию перебазирования ( git pull --rebase ), чтобы разместить ваши коммиты над нашими, а не просто сливать
  • если вам нужно что-то изменить в рецепте, измените существующую фиксацию ( git commit --amend )
  • отправьте новую ветку в "вилку" репозитория в своей учетной записи GitHub, при необходимости используя git push --force-with-lease

Несмотря на то, что эти рекомендации (в значительной степени основанные на переписывании истории) не подходят для общедоступной разработки в основных ветках (master и т. д.), они отлично подходят для такой итеративной незавершенной разработки, которая происходит при внесении вклада. новые пакеты.

Отправить PR

Откройте и отправьте запрос на включение основной ветки официальных репозиториев на GitHub (ссылки здесь). Пожалуйста, включите краткое описание того, что вы отправляете и почему. Если ваш рецепт еще не окончательный, добавьте к названию «[не объединять]» и поясните в описании.

Проверить

Наши системы непрерывной интеграции автоматически попытаются создать ваш пакет. Если это не удается, попытайтесь выяснить, почему. Однако системы непрерывной интеграции не идеальны и, к сожалению, могут дать сбой, даже если с вашим пакетом все в порядке.

Сопровождающие проекта попытаются просмотреть ваш PR и проверить его. Это может занять некоторое время, а иногда и всплесками, поэтому не расстраивайтесь, если вы не получите ответа в течение нескольких дней, но не бойтесь явным образом просить о помощи или обзоре на нашем канале IRC.

Если есть какие-либо проблемы, попробуйте исправить их и обновить запрос на вытягивание. GitHub автоматически обновит запрос на извлечение, когда вы отправите его в свою ветку, нет необходимости создавать новый PR. После отправки добавьте комментарий к PR, чтобы уведомить рецензентов.

Если с пакетом проблем нет, он будет объединен. Обратите внимание, что это не делает пакет сразу доступным через pacman. Двоичные репозитории обновляются пакетами.

Вверх по течению

Если вам нужно было внести изменения для правильной компиляции и запуска (и, следовательно, для создания исправлений), постарайтесь отправить соответствующие исправления и PR в вышестоящий проект, чтобы исправления можно было удалить из нашего репозитории и могут быть полезны другим разработчикам Windows.

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