Как извлечь исходный код из пакета RPM

by itisgood

Исходный rpm будет включать исходный код.

В качестве альтернативы можно выполнить приведенную ниже команду, чтобы загрузить исходные rpm непосредственно на сервер.

# yumdownloader --source [package name]

Например, чтобы получить исходный код для пакета net-snmp, используйте команду ниже:

# yumdownloader --source net-snmp
Loaded plugins: product-id, rhnplugin
This system is receiving updates from RHN Classic or RHN Satellite.
net-snmp-5.5-50.el6_6.1.src.rpm

Извлечение исходного кода для rpm

Вы также можете извлечь исходный код rpm из соответствующего исходного rpm, используя следующие шаги.

Для этого руководства мы взяли пример пакета net-snmp.

1. Чтобы вывести список файлов, доступных с исходным rpm, выполните следующую команду:

# rpm -qlp net-snmp

где,

  • q: – обозначает запрос
  • l: – обозначает список
  • p: – обозначает файл пакета

2. Здесь, в статье, мы извлекаем rpm как пользователь root. Установите исходный rpm:

# rpm -ivh net-snmp-5.5-50.el6_6.1.src.rpm

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

# rpm -ivh net-snmp-5.5-50.el6_6.1.src.rpm 
   1:net-snmp               warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root

Этот шаг установит исходный rpm в каталог /root/rpmbuild.

3. Теперь перейдите в каталог /root/rpmbuild/SOURCES, чтобы просмотреть необходимые архивы и патчи.

# cd /root/rpmbuild
# ll
total 16
drwxr-xr-x. 2 root root 12288 May 28 06:17 SOURCES
drwxr-xr-x. 2 root root  4096 May 28 06:17 SPECS
# cd /root/rpmbuild/SOURCES/
# ls
net-snmp-5.3.2.2-proc-counting.patch            net-snmp-5.5-hrStorage-fs.patch                 net-snmp-5.5-reload-ipv6IfTable.patch
net-snmp-5.3.2.2-proxy-getnext.patch            net-snmp-5.5-hrStorage-realStorageUnits2.patch  net-snmp-5.5-relro.patch
..snip..

4. rpmbuild используется для сборки как двоичных, так и исходных программных пакетов.

Выполните приведенную ниже команду для файла net-snmp.spec в каталоге /root/rpmbuild/SPECS.

Этот файл net-snmp.spec прочитает tar-шар net-snmp-5.5-noapsl.tar.gz (в каталоге /root/rpmbuild/SOURCES) и извлечет его в /root/rpmbuild/BUILD/net-snmp- 5.5

# cd /root/rpmbuild/SPECS
# ls
net-snmp.spec
# rpmbuild --nodeps -bp net-snmp.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.4jntOg
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf net-snmp-5.5
+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/net-snmp-5.5-noapsl.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd net-snmp-5.5
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ echo 'Patch #1 (net-snmp-5.4.1-pie.patch):'
Patch #1 (net-snmp-5.4.1-pie.patch):
..snip..

5. Теперь перейдите в каталог /root/rpmbuild/BUILD/net-snmp-5.5, чтобы просмотреть интересующие вас файлы.

# cd /root/rpmbuild/BUILD/net-snmp-5.5/
# ls
acconfig.h    configure         include         maketarget                          perl               README.osX                 stamp-h
aclocal.m4    configure.ac      INSTALL         man                                 PORTING            README.Panasonic_AM3X.txt  stamp-h.in
..snip..

 

You may also like

1 comment

Константин Иванович Сомов 15.04.2022 - 10:56

Несколько не точно, например в SUSE 15, команда rpm -qlp выдает список файлов:
NODE3:~ # rpm -qlp /mnt/SAPCD/test/pgpool-II-pg14-extensions-4.3.1-1.sles15.src.rpm
warning: /mnt/SAPCD/test/pgpool-II-pg14-extensions-4.3.1-1.sles15.src.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY
pgpool-II-4.3.1.tar.gz
pgpool-II-extensions.spec
NODE3:~ #
Но при установке пакета командой:
NODE3:~ # rpm -ivh /mnt/SAPCD/test/pgpool-II-pg14-extensions-4.3.1-1.sles15.src.rpm
распаковывает их не в текущий каталог, а строго определенный:
NODE3:~ # find / -type f -name pgpool-II-4.3.1.tar.gz
/usr/src/packages/SOURCES/pgpool-II-4.3.1.tar.gz
NODE3:~ # find / -type f -name pgpool-II-extensions.spec
/usr/src/packages/SPECS/pgpool-II-extensions.spec
то есть в каталог /usr/src/packages/
=

Reply

Leave a Comment