Файл 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Сопровождающий пакета"Иван Петров <ivan@example.com>"Нет
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/AMD
  • aarch64 — 64-битные процессоры ARM
  • risc_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": "Иван Петров <ivan@example.com>"

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

  1. Упрощенная структура

    • Меньше обязательных полей
    • Отсутствует поле release
    • Отсутствует поле build_date
    • Отсутствует поле install_size
  2. Ограниченная поддержка зависимостей

    • Операторы версий (>=, <=, >, <, =) указываются, но не проверяются
    • Нет поддержки виртуальных зависимостей
  3. Архитектура

    • Используется risc_v вместо riscv64
    • Поле может быть null
  4. Контрольные суммы

    • Только MD5 (в файле md5sums)
    • Нет поддержки CRC32

Полный пример пакета

{
    "name": "firefox",
    "version": "120.0",
    "architecture": "x86_64",
    "description": "Веб-браузер Mozilla Firefox",
    "maintainer": "NurOS Developers <dev@nuros.org>",
    "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:

  1. Добавить поле release (целое число)
  2. Изменить risc_v на riscv64
  3. Обернуть все поля в объект package
  4. Добавить build_date и install_size
  5. Заменить 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:

Структура примера

git clone -b APGv1 https://github.com/NurOS-Linux/APGexample
cd APGexample
cat metadata.json

Дополнительная информация