Пкгшип
Введение Пкгшип — это инструмент для управления зависимостями пакетов программного обеспечения, который предоставляет полную картину взаимосвязей между пакетами. Пкгшип позволяет выполнять следующие функции:
Архитектура Система разработана с использованием 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. Без этого параметра запуск программного обеспечения завершится ошибкой. После адаптации программного обеспечения к новым условиям эта информация будет обновлена.
Существует два способа установки программного обеспечения:
dnf install pkgship
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 создаются два типа журналов: журнал операций и журнал событий.
Путь: /var/log/pkgship/log_info.log (можно настроить путь в conf.yaml с помощью поля log_path).
Функция: в основном регистрирует внутренние операции кода, что удобно для определения проблем.
Права доступа: права доступа к пути 755, права доступа к файлу журнала 644, доступны обычным пользователям.
Путь: /var/log/pkgship-operation/uwsgi.log (путь можно настроить в conf.yaml, используя поле daemonize).
Функция: регистрирует информацию об операциях пользователей, включая IP, время доступа, URL доступа, результаты доступа и т. д., что удобно для последующего просмотра и записи информации о злоумышленниках.
Права доступа: права доступа к пути 700, права доступа к журналу 644, только root и pkgshipuser могут просматривать.
Сохранение журнала
Механизм сохранения: использует механизм резервного копирования встроенной функции 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 — это число, которое представляет собой более новый архив.
Когда количество сохранённых журналов достигает настроенного количества, самый старый журнал удаляется, а затем сохраняется новейший сжатый файл журнала.
Механизм сохранения: используется скрипт для сохранения, выполняется ежедневно, сохраняется до 30 дней, настройка не поддерживается.
Расположение скрипта: /etc/pkgship/uwsgi_logrotate.sh
Процесс сохранения: скрипт запускается в фоновом режиме при запуске pkgship, и каждые 24 часа выполняется сжатие. Всего сохраняется 30 сжатых файлов, имя сжатого файла uwsgi.log-20201010x.zip, где x представляет час сжатия.
После остановки pkgship скрипт останавливается и больше не сжимает файлы. При повторном запуске скрипт снова запускается.
Цель pkgship-panel — интегрировать информацию о сборке и обслуживании пакетов для облегчения идентификации аномальных пакетов и быстрого уведомления ответственных лиц по электронной почте, тем самым обеспечивая стабильность сборки и повышая успешность сборки IOS.
Поскольку данные источника инструмента не настраиваются, рекомендуется напрямую использовать официальный адрес сайта pkgship-panel: https://pkgmanage.openeuler.org/Infomanagement.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )