1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-pkgship

Клонировать/Скачать
README.md 28 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 11:48 40cdba7

Пкгшип

Введение Пкгшип — это инструмент для управления зависимостями пакетов программного обеспечения, который предоставляет полную картину взаимосвязей между пакетами. Пкгшип позволяет выполнять следующие функции:

  • поиск зависимостей пакетов;
  • управление жизненным циклом пакетов;
  • поиск патчей и др.
  1. Поиск зависимостей пакетов: позволяет разработчикам понять влияние изменений в пакетах на другие пакеты при их добавлении, обновлении или удалении.
  2. Поиск патчей: позволяет пользователям узнать о состоянии патчей для пакетов openEuler и извлечь их содержимое (подробнее см. в разделе «Отслеживание патчей»).

Архитектура Система разработана с использованием Flask-Restful.

Загрузка программного обеспечения Официальные релизы доступны по следующим адресам:

Среда выполнения Требования к оборудованию:

Конфигурация Рекомендуемое значение
Процессор 8 ядер
Память Минимум 4 ГБ, рекомендуется 32 ГБ
Пропускная способность сети 300 Мбит/с
Ввод-вывод 375 МБ/сек

Требования к программному обеспечению:

Программа Версия и требования
Elasticsearch Версия 7.10.1; подходит для развёртывания на одном сервере, возможно развёртывание кластера;
Redis Рекомендуется версия 5.0.4 и выше; рекомендуется размер, равный 3/4 памяти
Python Версия 3.8 и выше

Установка инструмента Примечание: программное обеспечение может работать в Docker. На данный момент в версии openEuler 21.09 создание Docker-образа требует использования параметра --privileged. Без этого параметра запуск программного обеспечения завершится ошибкой. После адаптации программного обеспечения к новым условиям эта информация будет обновлена.

Существует два способа установки программного обеспечения:

  1. Установка через dnf с подключением к репозиторию pkgship:
  • сначала подключите репозиторий pkgship с помощью dnf;
  • затем выполните следующую команду для загрузки и установки pkgship и его зависимостей:
dnf install pkgship
  1. Установка с использованием пакета RPM:
  • загрузите пакет RPM pkgship;
  • выполните следующую команду для установки пакета (где x.x-x обозначает версию, замените её на фактическую):
rpm -ivh pkgship-x.x-x.oe1.noarch.rpm

Или:

dnf install pkgship-x.x-x.oe1.noarch.rpm

После установки программного обеспечения можно выполнить автоматическую установку необходимых компонентов с помощью скрипта /etc/pkgship/auto_install_pkgship_requires.sh. По умолчанию скрипт находится в /etc/pkgship/auto_install_pkgship_requires.sh. Для запуска скрипта используйте команду:

/bin/bash auto_install_pkgship_requires.sh elasticsearch

или:

 /bin/bash auto_install_pkgship_requires.sh redis

После установки Elasticsearch и Redis необходимо запустить соответствующие службы с помощью команд:

 systemctl start elasticsearch

и:

systemctl start redis

Создание пользователя После установки pkgship автоматически создаётся пользователь с именем pkgshipuser и группа с тем же именем. Нет необходимости создавать их вручную. Все последующие операции с сервисом будут выполняться от имени этого пользователя.

Конфигурационные параметры Параметры конфигурации находятся в файле package.ini, расположенном в каталоге /etc/pkgship/. Пример файла package.ini:

[SYSTEM-система конфигурации]
; Путь к файлу инициализации базы данных, в котором записывается путь к файлу sqlite.
init_conf_path=/etc/pkgship/conf.yaml

; Порт для запросов к базе данных.
query_port=8090

; IP-адрес сервера базы данных.
query_ip_addr=127.0.0.1

; Адрес удалённого сервера, если используется клиент-серверная архитектура.
remote_host=https://api.openeuler.org/pkgmanage

; Каталог для временных файлов.
temporary_directory=/opt/pkgship/tmp/

[LOG-журнал]
; Каталог журналов.
log_path=/var/log/pkgship/

; Уровень журнала.
log_level=INFO

; Максимальный размер одного файла журнала, после превышения которого файл будет заархивирован.
max_bytes=31457280

; Максимальное количество архивных файлов журнала.
backup_count=30

[UWSGI-конфигурация веб-сервера]
; Путь к журналу операций.
daemonize=/var/log/pkgship-operation/uwsgi.log
; Размер буфера для передачи данных между клиентом и сервером.
buffer-size=65536
; Время ожидания ответа от сервера.
http-timeout=600
; Время, в течение которого сервер должен ответить на запрос.
harakiri=600

[REDIS-кэш-конфигурация]
; Адрес сервера Redis.
redis_host=127.0.0.1

; Порт сервера Redis.
redis_port=6379

; Максимальное число одновременных подключений к серверу Redis.
redis_max_connections=10

[DATABASE-база данных]
; Адрес базы данных. Рекомендуется использовать локальный адрес.
database_host=127.0.0.1

; Номер порта базы данных. По умолчанию — 9200.
database_port=9200

Также необходимо создать файл conf.yaml для инициализации базы данных. Файл conf.yaml по умолчанию находится в каталоге /etc/pkgship/, и pkgship использует его для определения имён баз данных и путей к файлам sqlite. Пример файла conf.yaml:

dbname: oe20.03 #имя базы данных
src_db_file: file:///etc/pkgship/repo/openEuler-20.09/src #путь к исходному коду пакета
bin_db_file: file:///etc/pkgship/repo/openEuler-20.09/bin #путь к двоичному файлу пакета
priority: 1 #приоритет базы данных

dbname: oe20.09
src_db_file:
``` **Как изменить путь хранения**

Чтобы изменить путь хранения, измените опцию init_conf_path в файле package.ini.

**Формат файла sqlite**

* Для экономии места не рекомендуется использовать файлы sqlite напрямую. Вместо этого используйте zip-файлы, tar-файлы или файлы с расширениями .bz и .gz, содержащие файлы sqlite.
* Файлы sqlite должны иметь формат именования xxx.primary.sqlite.xx. Также необходимо использовать файл filelists типа sqlite, который должен иметь формат именования xxx.filelists.sqlite.xx. Обычно все сетевые адреса имеют формат, соответствующий этому формату.
* В локальном пути необходимо использовать префикс file://.
* Путь к файлу sqlite должен находиться в каталоге конфигурации /repodata/.

Имя dbname должно состоять из строчных букв или цифр. Использование прописных букв не допускается.

**Запуск и остановка службы**

Есть два способа запуска и остановки службы pkgship: systemctl и pkgshipd.

* Способ systemctl позволяет остановить службу, которая была запущена с помощью systemctl start pkgship.service.
* Если используется способ pkgshipd, то запускать и останавливать службу можно только под пользователем pkgshipuser.
* Если система не поддерживает команду systemctl, следует использовать способ pkgshipd для запуска и остановки сервиса.

В одном цикле запуска и останова можно использовать только один из способов. Нельзя использовать оба способа одновременно.

**Использование инструментов**

1. **Инициализация базы данных**
    * Используется после запуска сервиса для того, чтобы можно было запрашивать информацию о пакетах и их зависимостях из баз данных, созданных с помощью createrepo. Базы данных создаются на основе файлов sqlite, которые разделены на исходные (source) и двоичные (binary). Имя базы данных — это имя, которое задаётся в конфигурационном файле config.yaml, например, dbname-source или dbname-binary.
    * Команда: pkgship init [-filepath path].
     * Параметр -filepath указывает путь к конфигурационному файлу config.yaml. Можно использовать относительный или абсолютный путь. Если параметр не указан, используется конфигурация по умолчанию.

2. **Запрос информации об отдельном пакете**
    * Позволяет получить информацию об исходном или двоичном пакете.
    * Команда: pkgship pkginfo $packageName $database [-s].
     * Параметры:
        * packageName — имя пакета, обязательный параметр;
        * database — имя базы данных, обязательный параметр.
        * -s — если указано, будет запрошена информация об исходном пакете, иначе — о двоичном.

3. **Запрос информации обо всех пакетах**
    * Запрашивает информацию обо всех пакетах в указанной базе данных.
    * Команда: pkgship list $database [-s].
     * Параметры:
        * database — имя базы данных, обязательный параметр.
        * -s — если указано, будут запрошены данные об исходных пакетах, иначе — о двоичных.

4. **Запрос зависимостей установки двоичного пакета**
    * Запрос зависимостей двоичного пакета binaryName. Зависимости могут быть установлены до установки самого пакета binaryName.
    * Команда: pkgship installdep [$binaryName $binaryName1 $binaryName2...] [-dbs] [db1 db2...] [-level] $level.
     * Параметры:
        * binaryName — имена двоичных пакетов, для которых нужно запросить зависимости, обязательный параметр. Можно указать несколько имён.
        * -dbs — список баз данных с приоритетом поиска. Если не указано, поиск выполняется в порядке приоритета, заданного системой.
        * -level — уровень зависимостей, которые нужно запросить. По умолчанию равен 0, что означает запрос всех уровней зависимостей.

5. **Запрос зависимостей сборки исходного пакета**
    * Запрос всех зависимостей исходного пакета sourceName, необходимых для его компиляции.
    * Команда: pkgship builddep [$sourceName $sourceName1 $sourceName2..] -dbs [db1 db2 ..] [-level] $level.
     * Параметры:
        * sourceName — имена исходных пакетов, для которых нужно запросить зависимости, обязательный параметр. Можно задать несколько имён.
        * -dbs — список баз данных с приоритетом поиска. Если не указано, поиск выполняется в порядке приоритета, заданного системой.
        * -level — уровень зависимостей, которые нужно запросить. По умолчанию равен 0, что означает запрос всех уровней зависимостей.

6. **Самостоятельная компиляция и установка зависимостей**
    * Запрос информации о зависимостях установки и компиляции двоичного или исходного пакета.
    * Команда: pkgship selfdepend [$pkgName1 $pkgName2 $pkgName3 ..] [-dbs] [db1 db2..] [-b] [-s] [-w].
     * Параметры:
        * pkgName — имена пакетов, для которых запрашивается информация о зависимостях, обязательный параметр. Можно задать несколько имён.
        * -dbs — список баз данных с приоритетом поиска. Если не указано, поиск выполняется в порядке приоритета, заданного системой.
        * -b — если указано, запрашиваются зависимости двоичного пакета, иначе — исходного.
        * -s — если указано, запрос включает все зависимости установки и все зависимости компиляции, а также зависимости компиляции всех исходных пакетов. Если не указано, запрос ограничивается зависимостями установки и одной зависимостью компиляции исходного пакета.
        * -w — если указано, при запросе зависимостей двоичного пакета также отображаются исходный пакет и все двоичные пакеты, созданные на его основе. Если не указано, отображается только исходный пакет.

7. **Зависимости, от которых зависит пакет**
    * Запрос пакетов, которые зависят от указанного пакета pkgName в базе данных dbName.
    * Команда: pkgship bedepend dbName [$pkgName1 $pkgName2 $pkgName3] [-w] [-b] [-install/build].
     * Параметры:
        * dbName — имя базы данных.
        * $pkgName1, $pkgName2, $pkgName3 — имена пакетов.
        * -w — если указано, отображаются все двоичные пакеты, созданные из исходного пакета. Если не указано, показывается только исходный пакет.
        * -b — если указано, pkgName является двоичным пакетом. Если не указано, pkgName является исходным пакетом.
        * -install/build — если указано install, отображаются зависимости установки. Если указано build, отображаются зависимости компиляции. **dbName**: необходимо указать имя репозитория, в котором будет производиться поиск зависимостей. Поддерживается только один репозиторий. Обязательный параметр.

**pkgName**: название пакета, который требуется найти. Можно указать несколько пакетов. Обязательный параметр. 

**-w**: если не указано, то по умолчанию в результатах поиска не будут содержаться подпакеты соответствующего исходного пакета. Если после команды указан параметр конфигурации [-w], то будут найдены зависимости не только двоичного пакета C1, но и других двоичных пакетов (например, C2, C3), сгенерированных из исходного кода C1. Необязательный параметр.  

**-b**: указывает, что пакет является двоичным. По умолчанию производится поиск исходного пакета. Необязательный параметр.   

**-install/build**: указывает, является ли пакет зависимостью от установки или компиляции. По умолчанию ищутся все пакеты. Нельзя использовать параметры -install и -build одновременно. Необязательный параметр.

8. **Информация о базе данных**.

Использование: просмотр баз данных, инициализированных в Elasticsearch. Функция возвращает список уже инициализированных баз данных в порядке приоритета.

`pkgship dbs`.

9. **Получение номера версии**.

Использование: получение номера версии программного обеспечения pkgship.

`pkgship -v`.

10. **Сравнение зависимостей между пакетами различных баз данных**.

Поиск информации обо всех исходных и двоичных пакетах каждой базы данных, а также об их одноуровневых зависимостях для компиляции и установки. Затем сравниваются зависимости каждой базы данных с зависимостями первого пакета базы данных и различия записываются в файл CSV.

Использование: сравнение различий в зависимостях между различными системами, анализ оптимизации точек зависимостей программных пакетов.

```shell
pkgship compare -t build/install -dbs [database1 database2..] [-o out_path]

Параметры:

  • -t: тип зависимости для поиска. В настоящее время поддерживается только зависимость для компиляции -build и зависимость для установки -install.

  • -dbs: список баз данных для поиска, разделенных пробелами. Для управления временем выполнения в настоящее время поддерживаются максимум четыре базы данных. Первый пакет базы данных используется в качестве базового пакета для сравнения.

  • -o: путь сохранения файла CSV. Если не указан, по умолчанию используется /opt/pkgship/compare. Необходимо убедиться, что у пользователя pkgshipuser есть разрешение на запись при указании пути. Файл CSV сохраняется в папке «${out_path}/дата» . Файл CSV содержит информацию о зависимостях пакетов каждой базы данных (названной в честь базы данных) и сравнительную информацию обо всех зависимостях пакетов базы данных (сравнительный CSV).

Просмотр и сохранение журналов

Просмотр журнала

Во время работы службы pkgship создаются два типа журналов: журнал операций и журнал событий.

  1. Журнал событий:

Путь: /var/log/pkgship/log_info.log (можно настроить путь в conf.yaml с помощью поля log_path).

Функция: в основном регистрирует внутренние операции кода, что удобно для определения проблем.

Права доступа: права доступа к пути 755, права доступа к файлу журнала 644, доступны обычным пользователям.

  1. Журнал операций:

Путь: /var/log/pkgship-operation/uwsgi.log (путь можно настроить в conf.yaml, используя поле daemonize).

Функция: регистрирует информацию об операциях пользователей, включая IP, время доступа, URL доступа, результаты доступа и т. д., что удобно для последующего просмотра и записи информации о злоумышленниках.

Права доступа: права доступа к пути 700, права доступа к журналу 644, только root и pkgshipuser могут просматривать.

Сохранение журнала

  1. Сохранение журнала событий:

Механизм сохранения: использует механизм резервного копирования встроенной функции logging в Python, резервное копирование выполняется в соответствии с размером журнала.

Параметры конфигурации: package.ini настраивает размер каждого журнала и количество сохраняемых копий.

; Maximum capacity of each file, the unit is byte, default is 30M
max_bytes=31457280

; Number of old logs to keep;default is 30
backup_count=30

Процесс сохранения: когда размер файла журнала превышает заданный размер журнала, он автоматически сжимается и сохраняется. Имя сжатого файла — log_info.log.x.gz, где x — это число, которое представляет собой более новый архив.

Когда количество сохранённых журналов достигает настроенного количества, самый старый журнал удаляется, а затем сохраняется новейший сжатый файл журнала.

  1. Сохранение журнала операций:

Механизм сохранения: используется скрипт для сохранения, выполняется ежедневно, сохраняется до 30 дней, настройка не поддерживается.

Расположение скрипта: /etc/pkgship/uwsgi_logrotate.sh

Процесс сохранения: скрипт запускается в фоновом режиме при запуске pkgship, и каждые 24 часа выполняется сжатие. Всего сохраняется 30 сжатых файлов, имя сжатого файла uwsgi.log-20201010x.zip, где x представляет час сжатия.

После остановки pkgship скрипт останавливается и больше не сжимает файлы. При повторном запуске скрипт снова запускается.

Расширяющий инструмент pkgship-panel

Введение

Цель pkgship-panel — интегрировать информацию о сборке и обслуживании пакетов для облегчения идентификации аномальных пакетов и быстрого уведомления ответственных лиц по электронной почте, тем самым обеспечивая стабильность сборки и повышая успешность сборки IOS.

Архитектура

Использование инструмента

Поскольку данные источника инструмента не настраиваются, рекомендуется напрямую использовать официальный адрес сайта pkgship-panel: https://pkgmanage.openeuler.org/Infomanagement.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openeuler-pkgship.git
git@api.gitlife.ru:oschina-mirror/openeuler-pkgship.git
oschina-mirror
openeuler-pkgship
openeuler-pkgship
master