Как происходит установка пакета
Документация по процессу установки APG-пакетов
Содержание
- Распаковка пакета
- Чтение метаданных
- Проверка зависимостей и конфликтов
- Проверка контрольных сумм
- Предустановочные скрипты
- Установка файлов
- Постустановочные скрипты
- Завершение установки
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. Проверка конфликтов
- Установщик читает секцию
conflicts
из metadata.json - Проверяет наличие конфликтующих пакетов в системе
-
При обнаружении конфликта:
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. Процесс проверки
- Установщик проверяет наличие файла md5sums
-
Если файл существует:
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. Процесс установки
-
Подготовка к копированию:
```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. Завершающие операции
- Очистка временных файлов
- Обновление системных кэшей
-
Вывод итоговой информации:
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