安装 rpmbuild 工具

rpm-build的安装,创建目录等

资源下载

mysql-connector-python源码包
dns_python 源码包
protobuf源码包
非root用户安装protobuf的python依赖到指定目录

编写 spec 文件

https://cloud.tencent.com/developer/article/1444873
https://blog.csdn.net/wf1982/article/details/6636157
https://blog.csdn.net/wf1982/article/details/6626694
示例

  1. #cat /home/rpmbuild/rpmbuild/SPECS/daiyi_mysql_three.spec
  2. Summary: Mysql.connector_python
  3. Name: mysql-connector-python
  4. Version: 8.0.19
  5. Release: 1%{?dist}
  6. License: GNU GPLv2 (with FOSS License Exception)
  7. Group: Development/Languages
  8. Packager: daiyi <847210821@qq.com>
  9. URL: https://pypi.tuna.tsinghua.edu.cn/simple/mysql-connector-python/
  10. AutoReqProv: no
  11. Source0: mysql-connector-python-%{version}.tar.gz
  12. Source1: dnspython-1.2.0.tar.gz
  13. Source2: protobuf-python-3.11.4.tar.gz
  14. BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
  15. BuildArch: x86_64
  16. #Requires: protobuf>=3.6.1, dnspython>=1.16.0
  17. %description
  18. MySQL driver written in Python which does not depend on MySQL C client
  19. libraries and implements the DB API v2.0 specification (PEP-249).
  20. %setup
  21. %prep
  22. cat << \EOF > ./%{name}-%{version}/%{name}-req
  23. #!/bin/sh
  24. %{__perl_requires} $* |\
  25. sed -e '/perl(Net::SNMP)/d'
  26. EOF
  27. %define __perl_requires %{_builddir}/%{name}-%{version}/%{name}-req
  28. chmod 755 %{__perl_requires}
  29. #%prep
  30. %setup -b 0
  31. %setup -b 1
  32. %setup -b 2
  33. %build
  34. python setup.py build
  35. cd ..
  36. cd dnspython-1.2.0/
  37. python setup.py build
  38. export PYTHONPATH=$RPM_BUILD_ROOT/home/tops/lib/python2.7/site-packages/
  39. mkdir -p $RPM_BUILD_ROOT/home/tops/lib/python2.7/site-packages
  40. cd ..
  41. cd protobuf-3.11.4
  42. ./configure --prefix=$RPM_BUILD_ROOT/home/tops
  43. make && make install
  44. #export PATH=$RPM_BUILD_ROOT/home/tops/bin:$PATH
  45. cd ./python
  46. python setup.py build
  47. %install
  48. export PYTHONPATH=$RPM_BUILD_ROOT/home/tops/lib/python2.7/site-packages/
  49. mkdir -p $RPM_BUILD_ROOT/home/tops/lib/python2.7/site-packages
  50. cd ..
  51. cd protobuf-3.11.4/python
  52. python setup.py install --prefix=$RPM_BUILD_ROOT/home/tops
  53. cd ../../mysql-connector-python-8.0.19
  54. python setup.py install --prefix=$RPM_BUILD_ROOT/home/tops
  55. cd ..
  56. cd dnspython-1.2.0/
  57. python setup.py install --prefix=$RPM_BUILD_ROOT/home/tops
  58. %files
  59. %defattr(-,root,root)
  60. %define debug_package %{nil}
  61. /home/tops/lib/python2.7/site-packages/mysql_connector_python-8.0.19-py2.7.egg-info/*
  62. /home/tops/lib/python2.7/site-packages/mysql/*
  63. /home/tops/lib/python2.7/site-packages/mysqlx/*
  64. /home/tops/lib/python2.7/site-packages/dns/*
  65. /home/tops/lib/python2.7/site-packages/dnspython-1.2.0-py2.7.egg-info
  66. /home/tops/bin/easy_install
  67. /home/tops/bin/easy_install-3.6
  68. /home/tops/lib/python2.7/site-packages/easy-install.pth
  69. /home/tops/lib/python2.7/site-packages/protobuf-3.11.4-py2.7.egg/
  70. /home/tops/lib/python2.7/site-packages/setuptools.pth
  71. /home/tops/lib/python2.7/site-packages/site.py
  72. /home/tops/lib/python2.7/site-packages/site.pyc
  73. /home/tops/lib/python2.7/site-packages/site.pyo

使用

/home/rpmbuild/rpmbuild 是工作目录,
把源码包放在 /home/rpmbuild/rpmbuild/SOURCES/ 下,
spec 的文件放在 /home/rpmbuild/rpmbuild/SPECS/ 目录下
接着执行 rpmbuild -ba /home/rpmbuild/rpmbuild/SPECS/*.spec
原则上这样就可以了, 但是如果有报错的话,需要解。

  1. ## /home/rpmbuild/rpmbuild 是工作目录, 把源码包放在 /home/rpmbuild/rpmbuild/SOURCES/ 下,spec 的文件放在 /home/rpmbuild/rpmbuild/SPECS/ 目录下
  2. [root@a34h05001.cloud.h05.amtest87 /home/rpmbuild/rpmbuild] 25E_ops1,请不要把文件放在root目录下
  3. #ls
  4. BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
  5. [root@a34h05001.cloud.h05.amtest87 /home/rpmbuild/rpmbuild] 25E_ops1,请不要把文件放在root目录下
  6. #ls SOURCES/
  7. dnspython-1.2.0.tar.gz mysql-connector-python-8.0.19.tar.gz protobuf-python-3.11.4.tar.gz
  8. [root@a34h05001.cloud.h05.amtest87 /home/rpmbuild/rpmbuild] 25E_ops1,请不要把文件放在root目录下
  9. #ls SPECS/
  10. daiyi_mysql_three.spec
  11. [root@a34h05001.cloud.h05.amtest87 /home/rpmbuild/rpmbuild] 25E_ops1,请不要把文件放在root目录下
  12. #ls RPMS/x86_64/mysql-connector-python-8.0.19-1.alios7.x86_64.rpm
  13. RPMS/x86_64/mysql-connector-python-8.0.19-1.alios7.x86_64.rpm
  14. [root@a34h05001.cloud.h05.amtest87 /home/rpmbuild/rpmbuild] 25E_ops1,请不要把文件放在root目录下
  15. #rpmbuild -ba SPECS/daiyi_mysql_three.spec

解决报错

error: Empty %files file /home/rpmbuild/rpmbuild/BUILD/ debugfile.llis
rpmbuild打包遇到问题汇总
/usr/lib/rpm/macros中添加%debug_package %{nil}
Found ‘${BUILDROOT}’ in installed files; aborting
does NOT support .pth files
rpmbuild PYTHONPATH environment variable currently contains: ‘’
libtool: error: error: cannot install ‘libprotoc.la’ to a directory not endi

特别需要注意的是:%install部分使用的是绝对路径,而%file部分使用则是相对路径,虽然其描述的是同一个地方。千万不要写错。

解决依赖

依赖项

rpm -qpR *.rpm抽出依赖

  1. [root@vm010138025241 /tmp/xtermupload]
  2. #rpm -qpR mysql-connector-python-8.0.19-1.alios7.x86_64.rpm
  3. /usr/local/bin/python
  4. rpmlib(CompressedFileNames) <= 3.0.4-1
  5. rpmlib(FileDigests) <= 4.6.0-1
  6. rpmlib(PartialHardlinkSets) <= 4.0.4-1
  7. rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  8. rpmlib(PayloadIsXz) <= 5.2-1

解决

  • 1 假如需要在 rpmbuild 生成软件包, 在安装时候忽略依赖关系,请在 spec 文件中添加下面参数 ——- # 解决了/usr/local/bin/python
    AutoReqProv: no
  • 2 在 宏 里添加 ——- # 解决了 rpmlib 的依赖

    1. %_binary_payload w9.gzdio
    2. %_binary_filedigest_algorithm 1

    例子如下

    1. #cat ~/.rpmmacros
    2. %_topdir /home/rpmbuild/rpmbuild
    3. %debug_package %{nil}
    4. %_binary_payload w9.gzdio
    5. %_binary_filedigest_algorithm 1

    备注一些

  • Linux下yum命令安装.rpm文件时提示“ is not signed ”的解决办法
    yum命令安装rpm包时提示”Package filename.rpm is not signed”,只需编辑
    /etc/yum.conf中的”gpgcheck=1”这一行改为”gpgcheck=0”即可
    yum —nogpgcheck 即可。

  • 把spec里的BuildRequires:去掉!
  • yum localinstall *.rpm -nogpgcheck
    rpm -qpR file.rpm       #[查看包]依赖关系
    rpm2cpio file.rpm |cpio -div #[抽出文件]