RPM参考指南 1.rpm编译 2.rpm内容查看与解包 3.打包环境准备 3.rpm spec 4.rpmbuild 5.rpmlint 0.说明 RPM许可证为GPL2+ 以及LGPL2+除外 https://rpm.org/ http://ftp.rpm.org/releases/rpm-4.16.x/rpm-4.16.1.2.tar.bz2 1.编译 参考来自https://github.com/rpm-software-management/rpm/raw/master/INSTALL fedora的spec以及openSUSE的spec 编译必须的包: popt https://github.com/rpm-software-management/popt http://ftp.rpm.org/popt/releases/popt-1.x/popt-1.18.tar.gz zlib https://zlib.net/ https://zlib.net/zlib-1.2.11.tar.xz libmagic 系统核心包file提供 加密库二选一 openssl(fedora选择的) https://www.openssl.org/ https://mirrors.cloud.tencent.com/openssl/source/openssl-1.1.1i.tar.gz (受制于EAR①,openssl 1系列许可证与GPL不兼容) //EAR 美国出口管制条例 libgcrypt(openSUSE选择的) https://www.gnupg.org/software/libgcrypt/ https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.7.tar.bz2 (不受制于EAR) 数据库引擎 主推荐ndb (rpm自己写的,rpm内建) 主推荐sqlite https://sqlite.org/index.html https://sqlite.org/2020/sqlite-src-3340000.zip https://sqlite.org/2020/sqlite-autoconf-3340000.tar.gz BDB已经弃用 (BDB新版使用AGPLv3,是开源许可证,但是和GPLv2不兼容) BDB RO版支持方案--enable-bdb-ro (rpm内建) lua支持 (fedora的spec嵌入了大量lua源代码) https://www.lua.org/ https://www.lua.org/ftp/lua-5.4.2.tar.gz SELinux (原文为可选依赖,但fedora和OpenSUSE都有) https://github.com/SELinuxProject https://github.com/SELinuxProject/selinux/releases/download/20200710/libselinux-3.1.tar.gz //Warning:SELinux编译依赖较多 python (原文为可选依赖,但fedora和OpenSUSE都有) https://www.python.org/ https://mirrors.huaweicloud.com/python/3.9.1/Python-3.9.1.tar.xz //Python依赖非常多连Xorg都需要 libcap (原文为可选依赖,但fedora和OpenSUSE都有) https://sites.google.com/site/fullycapable/ http://mirrors.ustc.edu.cn/kernel.org/linux/libs/security/linux-privs/libcap2/libcap-2.46.tar.xz acl (原文为可选依赖,但fedora和OpenSUSE都有) https://savannah.nongnu.org/projects/acl https://download.savannah.nongnu.org/releases/acl/acl-2.2.53.tar.gz autoconf automake libtool makeinfo m4 存疑 gnupg2 ncurses dwz audit-libs dbus libarchive zstd cpio 讨论:数据库默认引擎,python,selinux,存疑库 2.rpm内容查看与解包 查看本地rpm内容 rpm -qlp *.rpm //任何rpm包,包括二进制包与src.rpm 查看已经安装的包的内容 rpm -ql bash 完全解压rpm rpm2cpio ./a.rpm | cpio -idmv //需要rpm2cpio与cpio cpio的参数: -i = extract -d = make directories -m = preserve modification time -v = verbose 图形化软件如ark等也可以查看解压。(windows下用7zip) 3.打包环境准备 sudo zypper in rpm-build rpmconf rpmdevtools rpmlint ##build build在zypper未打包,自成体系前不要使用 spec rpm-build为rpm提供 rpmconf 处理.rpmnew, .rpmsave和.rpmorig文件 https://github.com/xsuchy/rpmconf https://github.com/xsuchy/rpmconf/archive/rpmconf-1.1.3-1.tar.gz rpmdevtools 提供一些帮助打包的脚本 https://pagure.io/rpmdevtools https://releases.pagure.org/rpmdevtools/rpmdevtools-9.2.tar.xz rpmlint 检查rpm包中的错误 https://github.com/rpm-software-management/rpmlint https://github.com/rpm-software-management/rpmlint/archive/rpmlint-1.11.tar.gz build 自动在发行版内以chroot形式打包,自动解决依赖 rpmdev-setuptree 执行后会自动在所在目录下新建rpmbuild文件夹,里面是rpm打包专用的目录。五个文件夹,BUILD文件夹,临时编译目录,宏%buildroot定义的目录,如果编译或打包失败,日志也在这个目录;RPMS文件夹,生成的二进制文件所在目录,.rpm前会有文件所属架构,如noarch,x86_64,aarch64;SOURCES文件夹,patch,源代码,额外的要打包进去的源文件放在这儿;SPEC文件夹,.spec文件就放这里;SRPM文件夹,生成的.src.rpm所在位置。