软件包选型
大部分软件源码包都可以在下列地址中找到,可直接进行搜索
Suse https://build.opensuse.org/
Ubuntu Debian -- Package Search Results -- fitspng
Fedora https://koji.fedoraproject.org/koji/builds
Debian https://packages.ubuntu.com/search?keywords=fitspng
以python-arviz为例:
选择需要引入的版本,并获取源码包
wget [https://kojipkgs.fedoraproject.org//packages/python-arviz/0.11.4/2.fc36/src/python-arviz-0.11.4-2.fc36.src.rpm](https://kojipkgs.fedoraproject.org/packages/python-arviz/0.11.4/2.fc36/src/python-arviz-0.11.4-2.fc36.src.rpm
rpm2cpio python-arviz-0.11.4-2.fc36.src.rpm |cpio -id
创建构建目录,并解压源码
mkdir –p /root/rpmbuild/SOURCES (注: rpmbuild源码需要存放在目录SOURCES中)
cd /root/rpmbuild/SOURCES
rpm2cpio ~/python-arviz-0.11.4-2.fc36.src.rpm |cpio –id
安装编译依赖
yum-builddep –y python-arviz.spec
编译软件包
rpmbuild –ba python-arviz.spec
注:rpmbuild –ba python-arviz.spec 1>LOG 2>&1 &
可以将编译日志重定向到LOG中,方便查看
可以看到日志最后有打包和清理的动作,说明构建完成。
附:
编译调试,修改spec文件时,遇到不清楚的参数或宏可以在网页(https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn)上查询
编译失败相关问题
编译报错 缺少头文件
通过日志可以看到缺少 ncurses.h 头文件,那就说明,当前的环境需要安装一个新的包,来提供这个文件
即需要增加编译依赖到spec文件中 BuildRequires:xxx
但是具体哪个包提供了这个文件,可以 百度 或者 通过yum list 命令来查看
如:yum list |grep ncurses
头文件一般由 xxx-lib,libxxx,xxx-devel类似这种结构的包提供,上图可见当前已经安装了ncurses-libs,依旧是缺少文件,很有可能是devel包提供的。
安装依赖包,并在spec中新增Buildrequires:ncurses-devel 即可解决当前问题
Configure阶段缺少头文件
Configure缺少文件 同理2.1 添加对应依赖包即可
Pacp.h → libpcap-devel gsl_rng.h → gsl-devel
宏无法解析
通常从 centos 或 fedora 迁移过来的 语言类包,会遇到这种情况。
原因是, centos 、fedora 语言类包体统的macros和openeuler不同,
两种修改思路:
查询对应的宏的含义,在spec中将宏展开,替代掉宏
将提供宏的macros 所属软件包,引入到仓库,并添加到Buildrequires中