Файл metadata.json (APGv1)
Это документация для APG v1 (Legacy). Рекомендуется использовать APG v2.
Документация по файлу metadata.json
Файл metadata.json содержит информацию о пакете и используется системой управления пакетами APG.
Пример файла metadata.json
{
"name": "TestAPG",
"version": "0.0",
"architecture": "x86_64",
"description": "The test package.",
"maintainer": "NurOS Developers",
"license": "MIT",
"homepage": "https://nuros.org",
"dependencies": [
"testapg2"
],
"conflicts": [
"testapg3"
],
"provides": [
"libfoo-dev"
],
"replaces": [
"example-apg"
]
}
Описание полей
| Поле | Описание | Пример | Обязательное |
|---|---|---|---|
name | Название пакета | example-package | Да |
version | Версия программы | 1.2.3 | Да |
architecture | Целевая архитектура | x86_64, aarch64, risc_v, all, null | Нет |
description | Подробное описание пакета | "Текстовый редактор с подсветкой синтаксиса" | Нет |
maintainer | Сопровождающий пакета | "Иван Петров <[email protected]>" | Нет |
license | Лицензия | MIT, GPL-3.0, Apache-2.0 | Нет |
homepage | Веб-сайт проекта | https://example.com | Нет |
dependencies | Список зависимостей | ["lib-example >= 2.0.0"] | Нет |
conflicts | Конфликтующие пакеты | ["old-package"] | Нет |
provides | Виртуальные пакеты | ["virtual-package"] | Нет |
replaces | Заменяемые пакеты | ["legacy-package"] | Нет |
Подробное описание полей
name (обязательное)
Уникальное имя пакета в системе.
Правила:
- Только строчные буквы латинского алфавита
- Цифры разрешены (но не в начале)
- Дефис
-разрешен (но не в начале и конце) - Длина: 2-64 символа
Примеры:
"name": "firefox"
"name": "lib-archive-dev"
"name": "python3"
version (обязательное)
Версия программного обеспечения.
Формат: произвольная строка (рекомендуется semver)
Примеры:
"version": "1.0.0"
"version": "2.3.4-beta"
"version": "20230101"
architecture
Целевая архитектура процессора.
Допустимые значения:
x86_64— 64-битные процессоры Intel/AMDaarch64— 64-битные процессоры ARMrisc_v— RISC-V процессорыall— архитектурно-независимый пакетnullили отсутствует — не указано
Примеры:
"architecture": "x86_64"
"architecture": "all"
"architecture": null
description
Краткое описание пакета на русском или английском языке.
Примеры:
"description": "Веб-браузер Mozilla Firefox"
"description": "The test package."
maintainer
Информация о сопровождающем пакета.
Формат: Имя <email>
Примеры:
"maintainer": "NurOS Developers"
"maintainer": "Иван Петров <[email protected]>"
license
Лицензия программного обеспечения.
Примеры:
"license": "MIT"
"license": "GPL-3.0"
"license": "Apache-2.0"
"license": "BSD-2-Clause"
"license": null
homepage
URL домашней страницы проекта.
Примеры:
"homepage": "https://nuros.org"
"homepage": "https://github.com/example/project"
dependencies
Список пакетов, необходимых для работы.
Формат: массив строк
Поддержка версий в APGv1:
- ❌ Операторы версий не поддерживаются полноценно
- ✅ Можно указать, но не будут проверяться
Примеры:
"dependencies": ["libc", "libarchive"]
"dependencies": ["lib-example >= 2.0.0"]
"dependencies": []
conflicts
Список пакетов, конфликтующих с данным.
Примеры:
"conflicts": ["old-package", "alternative-package"]
"conflicts": []
provides
Список виртуальных пакетов, которые предоставляет данный пакет.
Примеры:
"provides": ["libfoo-dev", "foo-bin"]
"provides": []
Использование:
Пакет "gcc" может provides: ["c-compiler"]
Пакет "clang" может provides: ["c-compiler"]
Другие пакеты зависят от: "c-compiler"
replaces
Список пакетов, которые заменяет данный пакет.
Примеры:
"replaces": ["old-version", "deprecated-package"]
"replaces": []
Важные замечания APGv1
Отличия от APGv2
-
Упрощенная структура
- Меньше обязательных полей
- Отсутствует поле
release - Отсутствует поле
build_date - Отсутствует поле
install_size
-
Ограниченная поддержка зависимостей
- Операторы версий (
>=,<=,>,<,=) указываются, но не проверяются - Нет поддержки виртуальных зависимостей
- Операторы версий (
-
Архитектура
- Используется
risc_vвместоriscv64 - Поле может быть
null
- Используется
-
Контрольные суммы
- Только MD5 (в файле
md5sums) - Нет поддержки CRC32
- Только MD5 (в файле
Полный пример пакета
{
"name": "firefox",
"version": "120.0",
"architecture": "x86_64",
"description": "Веб-браузер Mozilla Firefox",
"maintainer": "NurOS Developers <[email protected]>",
"license": "MPL-2.0",
"homepage": "https://firefox.com",
"dependencies": [
"gtk3",
"dbus",
"libx11"
],
"conflicts": [
"firefox-esr"
],
"provides": [
"web-browser"
],
"replaces": []
}
Структура пакета APGv1
package.apg
├── metadata.json # Метаданные (этот файл)
├── md5sums # MD5 контрольные суммы
├── data/ # Файлы для установки
│ ├── usr/
│ │ ├── bin/
│ │ └── lib/
│ └── etc/
├── scripts/ # Скрипты (опционально)
│ ├── pre-install
│ ├── post-install
│ ├── pre-remove
│ └── post-remove
└── home/ # Файлы для $HOME (опционально)
Валидация metadata.json
Минимально рабочий файл
{
"name": "myapp",
"version": "1.0"
}
Проверка синтаксиса
# Проверить JSON синтаксис
jq . metadata.json
# Проверить наличие обязательных полей
jq '.name, .version' metadata.json
Миграция на APGv2
Для миграции пакета с APGv1 на APGv2:
- Добавить поле
release(целое число) - Изменить
risc_vнаriscv64 - Обернуть все поля в объект
package - Добавить
build_dateиinstall_size - Заменить
md5sumsнаcrc32sums
Пример миграции:
APGv1:
{
"name": "myapp",
"version": "1.0.0",
"architecture": "x86_64"
}
APGv2:
{
"package": {
"name": "myapp",
"version": "1.0.0",
"release": 1,
"architecture": "x86_64",
"build_date": "2025-01-10T00:00:00Z"
}
}
Примеры пакетов
Официальный пример APGv1
Смотрите полный пример пакета в формате APGv1:
- Репозиторий: https://github.com/NurOS-Linux/APGexample
- Ветка APGv1: https://github.com/NurOS-Linux/APGexample/tree/APGv1
Структура примера
git clone -b APGv1 https://github.com/NurOS-Linux/APGexample
cd APGexample
cat metadata.json