前言
Linux系统的软件一般有.deb和.rpm格式的安装包,即Linux系统用的是"Red-Hat Package Manager"红帽软件包管理器,就可以打包.rpm的安装包,下面说的就是.rpm的制作。如需了解.deb包制作 ,点击"Debian Packager"软件包管理器。
制作工具
制作前,系统环境中需要安装有rpm-build、rpmdevtools,可用下面命令安装:
yum install rpm-build
yum install rpmdevtools
制作rpm包
这里制作一个Qt开发软件的rpm包。该功能是开机启动显示当前时间的小程序。(底部有程序代码)
- 1、首先执行 rpmdev-setuptree 生成 rpmbuild目录文件,如果没有安装rpmdevtools,
不安装也可 mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[root@localhost ~]# rpmdev-setuptree
[root@localhost ~]# ls ~/rpmbuild/
BUILD RPMS SOURCES SPECS SRPMS
[root@localhost ~]#
- 2、将程序所在目录重命名为:xxx-xxx-1.0.0 (xxx-xxx是名字且不能是大写字母,1.0.0代表版本号);
- 3、执行命令 tar -zcvf show-timer-1.0.0.tar.gz show-timer-1.0.0/ 将该文件压缩生成tar.gz的压缩包 ;
- 4、将压缩文件移到至 ~/rpmbuild/SOURCES 即当前用户的rpmbuild/SOURCES下
[root@localhost 桌面]# tar -zcvf show-timer-1.0.0.tar.gz show-timer-1.0.0/
show-timer-1.0.0/
show-timer-1.0.0/showTime.pro.user
show-timer-1.0.0/showTime.desktop
show-timer-1.0.0/main.cpp
show-timer-1.0.0/widget.ui
show-timer-1.0.0/widget.cpp
show-timer-1.0.0/widget.h
show-timer-1.0.0/showTime.pro
show-timer-1.0.0/.qmake.stash
[root@localhost 桌面]# mv show-timer-1.0.0.tar.gz ~/rpmbuild/SOURCES/
[root@localhost 桌面]# ls ~/rpmbuild/SOURCES/
show-timer-1.0.0.tar.gz
[root@localhost 桌面]#
- 5、cd 到 ~/rpmbuild目录下,执行 rpmdev-newspec -o SPECS/show-timer.spec 生成.spec文件,
没有rpmdev-newspec 这个命令,其实也可以复制其他包的.spec来改
[root@localhost rpmbuild]# cd ~/rpmbuild/
[root@localhost rpmbuild]# rpmdev-newspec -o SPECS/show-timer.spec
SPECS/show-timer.spec created; type minimal, rpm version >= 4.15.
[root@localhost rpmbuild]# ls SPECS/
show-timer.spec
[root@localhost rpmbuild]#
- 6、修改.spec文件
[root@localhost rpmbuild]# vim ~/rpmbuild/SPECS/show-timer.spec
[root@localhost rpmbuild]# cat ~/rpmbuild/SPECS/show-timer.spec
%global debug_package %{nil}
#软件包名
Name: show-timer
#版本号
Version: 1.0.0
#软件包的发行号
Release: 1%{?dist}
#概述
Summary: show-timer
#软件授权方式,通常是GPL(自由软件)或GPLv2,BSD
License: LGPLv2+ and GPLv2+
#源码压缩包名字
Source0: show-timer-1.0.0.tar.gz
#构建编译依赖,如果你写多了,本来没用上但是你写了,那你就得装,不装就编译不过;
#如果写少了,当前编译环境上有还是可以编过,没有就编译不过。所以依赖最好还是写清楚。
BuildRequires: qt5-qtbase-devel,qt5-qtx11extras-devel,qt5-qttools-devel,qt5-qtsvg-devel,lightdm-qt5-devel
#描述
%description
show-timer
#安装前执行
%prep
%autosetup
#编译软件包所要执行的命令, 这一节一般由多个make命令组成。
%build
qmake-qt5
make
#定义在安装软件包时将执行命令,类似于make install命令。用于定义在软件安装完成后的所需执行的配置工作。
%install
mkdir -p %{buildroot}/usr/bin/
install -m 755 showTime %{buildroot}/usr/bin/
mkdir -p %{buildroot}/etc/xdg/autostart/
install -m 755 showTime.desktop %{buildroot}/etc/xdg/autostart/
mkdir -p %{buildroot}/usr/share/applications/
install -m 755 showTime.desktop %{buildroot}/usr/share/applications/
#定义软件包所包含的文件
#%{_bindir}是宏定义 这里是 /usr/bin ;%{_sysconfdir} 是/etc ;%{_datadir} 是 /usr/share
#所有的宏都可以在 /usr/lib/rpm/macros 里找到
%files
%{_bindir}/showTime
%{_sysconfdir}/xdg/autostart/showTime.desktop
%{_datadir}/applications/showTime.desktop
#每次软件的更新内容可以记录在此到这里,保存到发布的软件包中,以便查询之用。
%changelog
* Thu Dec 16 2021 kuangchunhua <kuangchunhua@kylinos.cn> - 1.0.0
- show-timer
[root@localhost rpmbuild]#
- 7、执行rpmbuild -ba SPECS/show-timer.spec 生成rpm二进制包和src源码包
[root@localhost rpmbuild]# ls SRPMS
show-timer-1.0.0-1.src.rpm
[root@localhost rpmbuild]# ls RPMS/x86_64/
show-timer-1.0.0-1.x86_64.rpm
[root@localhost rpmbuild]#
rpm常用命令
-
rpm -ivh show-timer-1.0.0-1.x86_64.rpm 安装
-
rpm -e show-timer-1.0.0-1.x86_64.rpm 卸载
-
rpm -ivh show-timer-1.0.0-1.src.rpm 会生成 ~/rpmbuild/SPEC/show-timer.spec,
再执行rpmbuild -bp ~/rpmbuild/SPEC/show-timer.spec 会生成 ~/rpmbuild/BUILD/show-timer-1.0.0,
即程序源码 -
rpmbuild -bb ~/rpmbuild/SPEC/show-timer.spec 只生成二进制 即show-timer-1.0.0-1.x86_64.rpm包
-
rpmbuild -bs ~/rpmbuild/SPEC/show-timer.spec 只生成源码包 即show-timer-1.0.0-1.src.rpm源码包
-
rpmbuild -ba ~/rpmbuild/SPEC/show-timer.spec 生成二进制和源码包
rpmbuild目录介绍
[root@localhost rpmbuild]# ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
[root@localhost rpmbuild]#
-
BUILD:执行 rpmbuild -bp ~/rpmbuild/SPEC/show-timer.spec 生成的源码在此目录下
-
BUILDROOT:这是临时构建目录,可以不管
-
RPMS:生成的二进制包在此目录下
-
SOURCES:压缩源码包和其他源文件在此目录下
-
SPECS:.spec配置文件在此目录下
-
SRPMS:生成的源码包在此目录下
spec文件参数介绍
上面只用简单标注了一下对应参数的说明,有兴趣可以网上查RPM构建 - SPEC文件参数解析
desktop文件参数介绍
- 这是本程序中用到的showTime.desktop
kch@kch:~/showTime/show-timer-1.0.0$ cat showTime.desktop
[Desktop Entry]
Name=showTimer
Name[zh_CN]=当前时间
Comment=显示当前时间
Comment[zh_CN]=显示当前时间
Exec=/usr/bin/showTime
Terminal=false
Type=Application
NoDisplay=false
kch@kch:~/showTime/show-timer-1.0.0$
- 该文件是桌面入口文件,下面是关于其参数介绍
测试程序代码
git clone 地址 https://gitee.com/kchmmd/qt-test.git
如何配置使用git