Перейти к основному содержимому

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

Документация по процессу установки 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
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. Проверка конфликтов

  1. Установщик читает секцию conflicts из metadata.json

  2. Проверяет наличие конфликтующих пакетов в системе

  3. При обнаружении конфликта:

    Обнаружен конфликт:
    Пакет '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. Процесс проверки

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

  2. Если файл существует:

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

    Внимание: несовпадение контрольной суммы:
    - 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. Подготовка к копированию:

    Будут установлены следующие файлы:
    /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. Копирование файлов:

    Копирование файлов...
    [####################] 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. Завершающие операции

  1. Очистка временных файлов

  2. Обновление системных кэшей

  3. Вывод итоговой информации:

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

Примечания

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

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