Добавить в корзинуПозвонить
Найти в Дзене

PULP REPOSITORIES

21.03.2025
Официальный сайт проекта pulpproject.org
Cтатью писал Игольников Игорь. Pulp — это сервер управления репозиториями с открытым исходным кодом, разработанный для работы с различными типами контента, такими как программные пакеты, контейнеры, модули и файлы. Он используется для синхронизации, хранения, управления и распространения содержимого в больших масштабах, что делает его популярным в корпоративных средах, где требуется контроль над программным обеспечением и его жизненным циклом. На примере Debian 12:
sudo apt install -y python3-pip postgresql libpq-dev
pip3 install pulpcore --break-system-packages sudo -u postgres psql
CREATE DATABASE pulp;
CREATE USER pulp WITH PASSWORD 'pulp_password';
GRANT ALL PRIVILEGES ON DATABASE pulp TO pulp;
\q Здесь я рекомендую выбрать сложный пароль, иначе метод MD5 не сможет его обработать, и возникнет ошибка: "django.db.utils.OperationalError: connection failed: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FAT
Оглавление
Publish Repositories - Pulp Project
Publish Repositories - Pulp Project

21.03.2025
Официальный сайт проекта
pulpproject.org
Cтатью писал Игольников Игорь.

Pulp — это сервер управления репозиториями с открытым исходным кодом, разработанный для работы с различными типами контента, такими как программные пакеты, контейнеры, модули и файлы. Он используется для синхронизации, хранения, управления и распространения содержимого в больших масштабах, что делает его популярным в корпоративных средах, где требуется контроль над программным обеспечением и его жизненным циклом.

Основные особенности Pulp

  1. Управление контентом: Поддерживает разные типы репозиториев: RPM (для CentOS/RHEL), DEB (для Debian/Ubuntu), Python (PyPI), контейнеры (Docker/OCI), Ansible-коллекции и произвольные файлы.
    Позволяет синхронизировать внешние репозитории (например, CentOS Mirror, PyPI) или загружать собственный контент.
  2. Гибкость: Плагинная архитектура: для каждого типа контента есть свой плагин (например, pulp_rpm, pulp_deb, pulp_container).
    Может работать как самостоятельный сервис или интегрироваться в более крупные системы.
  3. Репозитории и версии: Поддерживает создание версий репозиториев (иммутабельные снимки), что позволяет откатываться к предыдущим состояниям.
    Распространение контента через публикации и дистрибуции.
  4. Политики загрузки:Immediate: Скачивает и сохраняет весь контент сразу.
    On-demand: Загружает только запрашиваемый контент, экономя место.
    Streamed: Скачивает по запросу, но не сохраняет локально.
  5. Масштабируемость: Поддерживает облачные хранилища (Amazon S3, Azure) для масштабирования.
    Высокая доступность через кластеризацию.
  6. Интерфейсы:CLI (pulp-admin для Pulp 2, pulp для Pulp 3).
    REST API для автоматизации.
    Pulp CLI — современный инструмент для управления через командную строку.

Версии Pulp

  • Pulp 2: Старая версия, официально прекращена поддержка (EOL) с ноября 2022 года. Использовала Python 2 и имела монолитную архитектуру.
  • Pulp 3: Текущая версия, переписана на Python 3 с модульной архитектурой. Более современная, с улучшенной производительностью и поддержкой плагинов. Рекомендуется для новых установок.

Установка (Pulp 3):

На примере Debian 12:
sudo apt install -y python3-pip postgresql libpq-dev
pip3 install pulpcore --break-system-packages

Настрой PostgreSQL:

sudo -u postgres psql
CREATE DATABASE pulp;
CREATE USER pulp WITH PASSWORD 'pulp_password';
GRANT ALL PRIVILEGES ON DATABASE pulp TO pulp;
\q

Здесь я рекомендую выбрать сложный пароль, иначе метод MD5 не сможет его обработать, и возникнет ошибка: "django.db.utils.OperationalError: connection failed: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "pulp""


Настрой конфигурацию
:

Создаём файл /etc/pulp/settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psql',
'NAME': 'pulp',
'USER': 'pulp',
'PASSWORD': 'pulp_password',
'HOST': 'localhost',
}
}
SECRET_KEY = 'your-secret-key-here'

sudo mkdir -p /etc/pulp/certs
sudo openssl rand -base64 32 | sudo tee /etc/pulp/certs/database_fields.symmetric.key
sudo chown root:root /etc/pulp/certs/database_fields.symmetric.key

Если пункт Настройка конфигурации сделали правильно, то при команде pulpcore-manager --version мы должны получить версию pulpcore


Подготовка конфигурации базы данных:

mkdir -p /var/lib/pulp/tmp
sudo nano /etc/postgresql/15/main/pg_hba.conf:
меняем на trust
# "local" is for Unix domain socket connections only
local all all md5
mkdir -p /var/lib/pulp/assets/

Запуск pulpcore:

pulpcore-api --bind 0.0.0.0:24817
pulpcore-content --bind 0.0.0.0:24816
pulpcore-worker

Запуск pulp-cli:

mkdir -p /var/lib/pulp/media
создаем пароль для cli:
pulpcore-manager reset-admin-password
mkdir -p ~/.config/pulp
nano ~/.config/pulp/settings.toml:
[cli]
base_url = "http://localhost:24817"
username = "admin"
password = "<admin_password>"
verify_ssl = false

Подготовка локального репозитория:

для Deb пакетов:
pip install pulp-cli-deb --break-system-packages
pulp deb repository create --name "debian-repo"
pulp deb repository list

Загрузка пакетов вручную:

pulp deb content upload --file <path-to-deb-file> --repository "debian-repo"

Синхронизация с внешним:

Если вы хотите синхронизировать репозиторий с внешним источником (например, официальным репозиторием Debian), сначала создайте удаленный источник:
pulp deb remote create --name "debian-remote" --url "http://deb.debian.org/debian/" --distributions "stable" --components "main" --architectures "amd64"

Затем синхронизируйте репозиторий:
pulp deb repository sync --name "debian-repo" --remote "debian-remote"

В дальнейшем вы сможете узнать о том, как настроить репозитории для rpm, docker и ansible. Используя инструкцию с официального сайта разработчика.