LINUX.ORG.RU

Сборка rpm с помощью rpmvenv

 


0

1

Установка завивимостей

yum -y install epel-release
yum -y install libtool-ltdl-devel gcc libxslt-devel libxml2-devel xmlsec1-devel gcc-c++ mc python-devel python2-pip

Создал юзера rpmvenv

su - rpmvenv
mkdir /home/rpmvenv/venvs
cd venvs/
pip install -U pip
pip install  virtualenv rpmvenv
virtualenv sentry
. sentry/bin/activate
pip install sentry
pip freeze > requirements.txt
QA_SKIP_BUILD_ROOT=1 rpmvenv sentry.json

Выдает ошибку

Traceback (most recent call last):
  File "/home/rpmvenv/venvs/sentry/bin/rpmvenv", line 8, in <module>
    sys.exit(main())
  File "/home/rpmvenv/venvs/sentry/lib/python2.7/site-packages/rpmvenv/cli.py", line 142, in main
    args['verbose'],
  File "/home/rpmvenv/venvs/sentry/lib/python2.7/site-packages/rpmvenv/cli.py", line 77, in generate_rpm
    pkg = rpmbuild.build(specfile=specfile, top=top, verbose=verbose)
  File "/home/rpmvenv/venvs/sentry/lib/python2.7/site-packages/rpmvenv/rpmbuild.py", line 161, in build
    quiet_popen(cmd)
  File "/home/rpmvenv/venvs/sentry/lib/python2.7/site-packages/rpmvenv/rpmbuild.py", line 122, in quiet_popen
    stderr=subprocess.PIPE,
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Содержимое sentry.json

{
    "extensions": {
        "enabled": [
            "python_venv",
            "blocks"
        ]
    },
    "core": {
        "group": "Application/System",
        "license": "MIT",
        "name": "sentry",
        "summary": "Sentry summary",
        "version": "10.0.0"
    },
    "python_venv": {
	"require_setup_py": false,
        "name": "venv_sentry",
        "path": "/home/rpmvenv/venvs/sentry",
	"cmd": "virtualenv",
        "flags": ["--always-copy"],
        "requirements": ["requirements.txt"],
        "use_pip_install": true,
        "remove_pycache": true,
	"strip_binaries": true
    },
    "blocks": {
        "desc": [
            "some long package description",
            "each array element is a new line"
        ]
    }
}

Содержимое домашней директории пользователя rpmvenv

tree -L 3
.
├── requirements.txt
└── venvs
    ├── requirements.txt
    ├── sentry
    │   ├── bin
    │   ├── include
    │   ├── lib
    │   ├── lib64
    │   ├── LICENSE.txt
    │   ├── pyvenv.cfg
    │   ├── requirements.txt
    │   ├── sentry.json
    │   └── share
    └── sentry.json

Ответ на: комментарий от alpha
yum install -y rpmdevtools 

запустил

QA_SKIP_BUILD_ROOT=1 rpmvenv sentry.json
RPM generated at ./sentry-10.0.0-1.x86_64.rpm

Получился rpm пакет размером 415 метров.

Но зачем ставить pip-ом с pypi утилиты для работы с rpm в rpm-дистрибутиве - это отдельный вопрос.

Можно уточнить вопрос? Может быть это как то уменьшит размер rpm пакета…

chemtech ()
Ответ на: комментарий от chemtech

Ты пакетируешь полностью весь venv для sentry. Очевидно с таким списком только базовых зависимостей: https://github.com/getsentry/sentry/blob/master/requirements-base.txt пакет получится большим.

Можно выкинуть rpmvenv и написать нормальный rpm-спек. В этом спеке для всех зависимостей, для которых есть их опакеченные версии в CentOS/EPEL, указать их как BuildRequires и Requires в спеке.

Во время сборки пакета в venv создавать venv с –system-site-packages, чтобы та часть которая опакечена в центоси использовалась без дупликации.

alpha ★★★★★ ()
Ответ на: комментарий от alpha

Я вот это как раз пытался делать с помощью pyp2rpm

https://github.com/fedora-python/pyp2rpm/issues/218

Но у меня выдается ошибка.

Unable to extract package metadata from .whl archive. This might be caused by an old .whl format version. You may ask the upstream to upload fresh wheels created with wheel >= 0.17.0 or to upload an sdist as well to workaround this problem.

spec файл придется писать вручную?

chemtech ()
Последнее исправление: chemtech (всего исправлений: 1)
Ответ на: комментарий от alpha
sudo yum install -y epel-release rpmdevtools mc
sudo yum install -y python34 python3-pip 
pip3 install --user pyp2rpm
pyp2rpm sentry -t epel7 -b2 -p2 -v 9.1.2 -s sentry-9.1.2.spec
SPEC файл напечатается в консоли
Записываем SPEC файл из консоли в sentry-9.1.2.spec
vi sentry-9.1.2.spec
rpmbuild sentry-9.1.2.spec 
chemtech ()
Последнее исправление: chemtech (всего исправлений: 2)