Я пока знаю только один вариант - rpmbuild. Проблема в том, что у файла rpm свой собственный [url=rpm.org]формат[/url], но в разных дистрибутивах формат файла может изменяться путем наложения патчей. На практике я видел, что длины полей не всегда совпадают с описанием формата (хотя могу и ошибаться), и так просто распаковать и запаковать не получится. Где-то я находил простой скриптик, который извлекает содержимое пакета, опираясь на вычисление длины полей, но не уверен, что он сможет распаковать любой rpm.
Пишешь спек, в котором исходником является твой архив. И собираешь по этому спеку пакет. Соответственно файлы из архива распакуются при сборке в нужные места и запакуются в rpm.
Положил *cpio файл в директорию /usr/src/packages/SOURCES/ . Однако при попытке собрать его возникает такая ошибка:
text
rpmbuild -bp mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.97675
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd /usr/src/packages/BUILD
+ rm -rf mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ tar -xf /usr/src/packages/SOURCES/mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.cpio
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
error: Bad exit status from /var/tmp/rpm-tmp.97675 (%prep)
Если же запихнуть мои директории в tar.gz файл, положить его в вышеупомянутую директорию и создать spec файл просто поменяв
Source0: mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.cpio
на
Source0: mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.tar.gz
то ошибка следующая
text
SC-2-1:/tmp/unzip/spec # rpmbuild -bp mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.50125
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd /usr/src/packages/BUILD
+ rm -rf mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ /usr/bin/gzip -dc /usr/src/packages/SOURCES/mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
/var/tmp/rpm-tmp.50125: line 29: [b]cd: mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM: No such file or directory[/b]
error: Bad exit status from /var/tmp/rpm-tmp.50125 (%prep)
Вместо %setup -q сделай %setup -q -c, при этом распаковываться твой cpio не будет.
Далее командой cpio распакуй свой архив, читай man cpio как это сделать.
После этого в секции %build убери команду make. Затем в секции %install скопируй твои распакованные файлы куда надо в %buildroot.
И перечисли эти файлы в секции %files.
Вместо %setup -q сделай %setup -q -c, при этом распаковываться твой cpio не будет.
Далее командой cpio распакуй свой архив, читай man cpio как это сделать.
После этого в секции %build убери команду make. Затем в секции %install скопируй твои распакованные файлы куда надо в %buildroot.
И перечисли эти файлы в секции %files.
Vascom, прогресс небольшой есть, но все же где то что то не так
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.97583
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd /usr/src/packages/BUILD
+ rm -rf mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ cd mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
/var/tmp/rpm-tmp.97583: line 24: cd: mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.97583 (%prep)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.97583 (%prep)
если же -q -c то выхлоп такой:
text
SC-2-1:/var/tmp/mms_relay_sdpcba_rpm-root/spec # rpmbuild -ba mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.21282
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd /usr/src/packages/BUILD
+ rm -rf mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ /bin/mkdir -p mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ cd mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ /usr/bin/gzip -dc /usr/src/packages/SOURCES/mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.21282
+ umask 022
+ cd /usr/src/packages/BUILD
+ /bin/rm -rf /var/tmp/mms_relay_sdpcba_rpm-root
++ dirname /var/tmp/mms_relay_sdpcba_rpm-root
+ /bin/mkdir -p /var/tmp
+ /bin/mkdir /var/tmp/mms_relay_sdpcba_rpm-root
+ cd mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.21282
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
+ umask 022
+ cd /usr/src/packages/BUILD
chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
+ cd mms_relay_sdpcba_rpm-3.0.L19.R6D07.CUSTOM
+ /usr/lib/rpm/brp-lib64-linux
sf@suse.de: if you find problems with this script, drop me a note
+ RPM_BUILD_ROOT=/var/tmp/mms_relay_sdpcba_rpm-root
+ export RPM_BUILD_ROOT
+ test -x /usr/sbin/Check -a 0 = 0 -o -x /usr/sbin/Check -a '!' -z /var/tmp/mms_relay_sdpcba_rpm-root
+ echo 'I call /usr/sbin/Check...'
I call /usr/sbin/Check...
+ /usr/sbin/Check
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-symlink
error: Bad file: /var/tmp/mms_relay_sdpcba_rpm-root/spec/mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.spec: No such file or directory
RPM build errors:
Bad file: /var/tmp/mms_relay_sdpcba_rpm-root/spec/mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.spec: No such file or directory
Он просто тупо удаляет спековский файл а потом же к нему обращается. ЧТо за бред?
Так, давай по порядку.
mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.tar.gz - это правда tar.gz архив?
Дай этот файл, так быстрее будет.
Vascom, да, это тар
SC-2-1:/usr/src/packages/SOURCES # file mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.tar.gz
mms_relay_sdpcba_rpm-3.0.L19.R6D07-1.noarch.new.tar.gz: gzip compressed data, was "mms_relay_sdpcba_rpm-3.0.L19.R6", from Unix, last modified: Tue Aug 27 13:24:57 2013, max compression
К сожалению, дать не могу, меня анально покарают за слив такого рода инфы
Был исходный rpm, содержащий cpio, я их распоковал, внес изменения (добавил простой файл), затарил содержащиеся директории и получил этот таргз
Хорошо, тогда оставляй опцию -c без -T.
Теперь установи пакеты yum install yum-utils rpmdevtools если они ещё не установлены и выполни от пользователя rpmdev-setuptree.
Все дальнейшие действия делаем от пользователя.
Предыдущая команда создаст в домашнем каталоге пользователя директорию rpmbuild с поддиректориями. Положи архив в rpmbuild/SOURCES.
Из спека удали BuildRoot: %{_tmppath}/%{name}-root
Далее выполни rpmbuild mms_relay_sdpcba_rpm.spec. Выхлоп сюда.
Хорошо, тогда оставляй опцию -c без -T.
Теперь установи пакеты yum install yum-utils rpmdevtools если они ещё не установлены и выполни от пользователя rpmdev-setuptree.
Все дальнейшие действия делаем от пользователя.
Предыдущая команда создаст в домашнем каталоге пользователя директорию rpmbuild с поддиректориями. Положи архив в rpmbuild/SOURCES.
Из спека удали BuildRoot: %{_tmppath}/%{name}-root
Далее выполни rpmbuild mms_relay_sdpcba_rpm.spec. Выхлоп сюда.
Не поверишь, и тут засада полная, тк система предустановленная, без доступа во внешнюю сеть. yuma и yast-а нет, пакеты эти не установлены yum-utils rpmdevtools
Я могу по идее воссоздать такую же структуру директорий что и есть в орегинале у рута, и попробовать выполнить от какого либо пользователя
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.95066 (%build)
Общая идея такая, у меня есть две директории etc и opt
В них файлы. rpm должен содержать cpio, который в свою очередь содержит эти директории. При установке этого пакета на конечном хосте эти файлы должны копироваться и заменять собой орегинальные файлы
файлов и правда нет, не смотря на то что я ему /home/pkgdev/pkgtmp/pkgSrc/ указал... Или он не туда распаковывает архив? И соответственно не оттуда я копирую
То есть ты хочешь просто файл архива в rpm поместить, не распаковывая этот cpio архив?
И спек у тебя совершенно неправильный. Секция %install должна быть не пустой, а такой как я писал, и секция %files тоже.