Как происходит установка пакета
Документация по процессу установки 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 |
| 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"] |
3. Проверка зависимостей и конфликтов
3.1. Проверка конфликтов
-
Установщик читает секцию
conflictsиз metadata.json -
Проверяет наличие конфликтующих пакетов в системе
-
При обнаружении конфликта:
Обнаружен конфликт:
Пакет 'example-package' конфликтует с установленным пакетом 'old-package'
Продолжить установку? [y/N]:
3.2. Проверка зависимостей
Каждый установщик обрабатывает зависимости по-своему:
tulpar
Обнаружены недостающие зависимости:
- lib-example (>= 2.0.0)
- base-utils
Загрузка зависимостей...
upkgt
Ошибка: не удовлетворены зависимости:
- lib-example (>= 2.0.0) не установлен
- base-utils не установлен
Установка прервана.
4. Проверка контрольных сумм
4.1. Формат файла md5sums
usr/bin/program d41d8cd98f00b204e9800998ecf8427e
etc/config.conf e2fc714c4727ee9395f324cd2e7f331f
4.2. Процесс проверки
-
Установщик проверяет наличие файла md5sums
-
Если файл существует:
Проверка контрольных сумм...
- data/bin/program: OK
- data/etc/config.conf: OK -
При несовпадении:
Внимание: несовпадение контрольной суммы:
- 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. Процесс установки
-
Подготовка к копированию:
Будут установлены следующие файлы:
/bin/program (2.1 MB)
/etc/program/config.conf (4 KB)
/usr/share/doc/program/README.md (8 KB)
Общий размер: 2.112 MB
Установить пакет? [Y/n]: -
Копирование файлов:
Копирование файлов...
[####################] 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
# Запуск сервиса
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. Завершающие операции
-
Очистка временных файлов
-
Обновление системных кэшей
-
Вывод итоговой информации:
Установка пакета example-package-1.2.3-1 завершена успешно
Установлено файлов: 3
Размер установки: 2.112 MB
Дата установки: 2025-02-27 04:11:53
Примечания
Безопасность
- Все скрипты выполняются с правами root
- Рекомендуется проверять контрольные суммы
- Важно использовать доверенные источники пакетов