Исходный 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..
1 comment
Несколько не точно, например в 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/
=