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

Документация по процессу установки APG-пакетов

Содержание

  1. Распаковка пакета
  2. Чтение метаданных
  3. Проверка зависимостей и конфликтов
  4. Проверка контрольных сумм
  5. Предустановочные скрипты
  6. Установка файлов
  7. Постустановочные скрипты
  8. Завершение установки

1. Распаковка пакета

1.1. Общее описание

APG-пакет (файл с расширением .apg) представляет собой архив .tar.xz, содержащий все необходимые файлы для установки программного обеспечения.

1.2. Структура APG-пакета

имя_пакета.apg
├── metadata.json     # Файл с метаданными пакета
├── data/            # Директория с файлами для установки
├── md5sums          # Файл с контрольными суммами (опционально)
└── scripts/         # Директория со скриптами (опционально)
    ├── preinstall   # Скрипт, выполняемый до установки
    └── postinstall  # Скрипт, выполняемый после установки

1.3. Процесс распаковки

  • Установщик создаёт временную директорию
  • Расположение временной директории зависит от используемого установщика
  • Пакет распаковывается во временную директорию
  • После установки временная директория удаляется

2. Чтение метаданных

2.1. Файл metadata.json

Пример содержимого файла metadata.json:

{
    "name": "example-package",
    "version": "1.2.3",
    "release": "1",
    "architecture": "x86_64",
    "description": "Пример пакета с подробным описанием",
    "maintainer": "Иван Петров <[email protected]>",
    "license": "MIT",
    "homepage": "https://example.com/package",
    "dependencies": [
        "lib-example >= 2.0.0",
        "base-utils"
    ],
    "conflicts": [
        "old-package"
    ],
    "provides": [
        "virtual-package"
    ],
    "replaces": [
        "legacy-package"
    ]
}

2.2. Описание полей metadata.json

Поле Описание Пример
name Название пакета example-package
version Версия программы 1.2.3
release Номер выпуска пакета 1
architecture Целевая архитектура x86_64, aarch64, all
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"]

3. Проверка зависимостей и конфликтов

3.1. Проверка конфликтов

  1. Установщик читает секцию conflicts из metadata.json
  2. Проверяет наличие конфликтующих пакетов в системе
  3. При обнаружении конфликта:

    bash Обнаружен конфликт: Пакет 'example-package' конфликтует с установленным пакетом 'old-package' Продолжить установку? [y/N]:

3.2. Проверка зависимостей

Каждый установщик обрабатывает зависимости по-своему:

tulpar

Обнаружены недостающие зависимости:
- lib-example (>= 2.0.0)
- base-utils
Загрузка зависимостей... 

upkgt

Ошибка: не удовлетворены зависимости:
- lib-example (>= 2.0.0) не установлен
- base-utils не установлен
Установка прервана.

Другие установщики

Могут предложить различные варианты:

Отсутствуют зависимости:
1. Установить автоматически
2. Пропустить
3. Отменить установку
Выберите действие [1-3]:

4. Проверка контрольных сумм

4.1. Формат файла md5sums

usr/bin/program d41d8cd98f00b204e9800998ecf8427e
etc/config.conf e2fc714c4727ee9395f324cd2e7f331f

4.2. Процесс проверки

  1. Установщик проверяет наличие файла md5sums
  2. Если файл существует:

    bash Проверка контрольных сумм... - data/bin/program: OK - data/etc/config.conf: OK 3. При несовпадении:

    bash Внимание: несовпадение контрольной суммы: - data/bin/program: ОШИБКА Продолжить установку? [y/N]:

5. Предустановочные скрипты

5.1. Расположение и назначение

  • Путь: scripts/preinstall
  • Выполняется перед копированием файлов
  • Права: должен быть исполняемым (chmod +x)

5.2. Типичные операции

#!/bin/bash

# Проверка наличия необходимых директорий
if [ ! -d "/opt/program" ]; then
    mkdir -p /opt/program
fi

# Остановка сервиса перед обновлением
if systemctl is-active --quiet program-service; then
    systemctl stop program-service
fi

# Создание пользователя если необходимо
if ! id -u programuser &>/dev/null; then
    useradd -r -s /sbin/nologin programuser
fi

6. Установка файлов

6.1. Процесс установки

  1. Подготовка к копированию:

    ```bash Будут установлены следующие файлы: /bin/program (2.1 MB) /etc/program/config.conf (4 KB) /usr/share/doc/program/README.md (8 KB)

    Общий размер: 2.112 MB Установить пакет? [Y/n]: ``` 2. Копирование файлов:

    bash Копирование файлов... [####################] 100%

6.2. Обработка конфликтов файлов

При обнаружении существующих файлов:

Файл '/etc/program/config.conf' уже существует.
1. Заменить
2. Сохранить как .new
3. Пропустить
4. Просмотреть различия
Выберите действие [1-4]:

7. Постустановочные скрипты

7.1. Расположение и назначение

  • Путь: scripts/postinstall
  • Выполняется после копирования файлов
  • Используется для финальной настройки

7.2. Пример postinstall скрипта

#!/bin/bash

# Установка правильных прав
chown -R programuser:programuser /opt/program
chmod 644 /etc/program/config.conf

# Обновление кэша приложений
update-desktop-database -q

# Запуск сервиса
systemctl enable program-service
systemctl start program-service

# Вывод информации о завершении
echo "Установка завершена. Сервис запущен."

8. Завершение установки

8.1. Регистрация пакета в системе

Информация сохраняется в зависимости от установщика:

Для APG

/var/lib/apg/
├── installed/
│   └── example-package-1.2.3-1/
│       ├── files.list
│       ├── metadata.json
│       └── install-date

Для Tulpar

/var/lib/tulpar/
├── packages/
│   └── example-package/
│       ├── files
│       ├── metadata
│       └── timestamp

8.2. Содержимое файла files.list

/bin/program
/etc/program/config.conf
/usr/share/doc/program/README.md

8.3. Завершающие операции

  1. Очистка временных файлов
  2. Обновление системных кэшей
  3. Вывод итоговой информации:

    bash Установка пакета example-package-1.2.3-1 завершена успешно Установлено файлов: 3 Размер установки: 2.112 MB Дата установки: 2025-02-27 04:11:53

Примечания

Безопасность

  • Все скрипты выполняются с правами root
  • Рекомендуется проверять контрольные суммы
  • Важно использовать доверенные источники пакетов

Дополнительные ресурсы

  • Документация по формату APG: NurOS Docs
  • Руководство по созданию пакетов: NurOS Docs
  • Спецификация metadata.json: NurOS Docs