YUM源(rpm安装包)制作使用流程说明
RPM,全称为Redhat Package Manager,是由Red Hat推出的包管理器,现在在各种发行版中普遍使用。
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
rpm安装包的制作方式目前验证通过的有两种:
通过使用源码包的方式编译源码打包rpm,具体过程执行步骤1-2-3
通过使用可执行程序的方式打包rpm,具体过程执行步骤2-3
1.制作源码包
安装autoTools
autoTools 是系列工具,它包含了aclocal、autoscan、autoconf、autoheader、和automake这些工具,使用autoTools主要就是利用各个工具的脚本文件来生成最后的makefile文件。安装autoTools工具集,Centos下可以使用 yum install autoconf automake 在线安装。
源码包路径结构
ComLib/
├── comlib-1.0.tar.gz #最终生成的工程源码包
├── configure.ac #手动处理的配置文件
├── main.cpp #源码文件
├── Makefile #configure命令生成的Makefile文件
└── Makefile.am #手动编辑的Makfile依赖文件
源码包生成流程预览
source code + autoscan -> configure.scan(edit) -> configure.ac + aclocal -> aclocal.m4
configure.ac + aclocal.m4 + autoconf -> configure
autoheader -> config.h.in + Makefile.am(edit) + automake -> makefile.in
makefile.in + ./configure -> Makefile
make dist -> comlib-1.0.tar.gz
1、执行autosacn生成configure.scan,重命名为configure.ac并手动编辑相关项
进入源码目录(这里以ComService为例),执行autosacn,当前目录会生成configure.scan这个默认的配置文件,执行mv configure.scan configure.ac,修改AC_INIT内容,增加行AM_INIT_AUTOMAKE
configure.ac文件示例
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([programSrc], [1.0], [BUG-REPORT-ADDRESS]) #程序版本信息
AM_INIT_AUTOMAKE #手动添加此行
AC_CONFIG_SRCDIR([main.cpp])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_RANLIB #手动添加此行
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
#注意下面的生成的makefile文件依赖于makefile.am文件,大小写敏感需要保持一致
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
2、执行aclocal 命令
aclocal是一个perl 脚本程序。aclocal根据configure.ac文件的内容,自动生成aclocal.m4文件。
3、执行autoconf 命令
有了configure.ac和aclocal.m4 两个文件以后,我们就可以使用autoconf来产生configure文件了。 configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。
4、执行autoheader命令
该命令生成config.h.in文件。该命令通常会从acconfig.h文件中复制用户附加的符号定义
5、vim编写makefile.am文件
顶层目录的makefile.am示例
AUTOMAKE_OPTIONS=foreign
/*子目录*/
SUBDIRS = media share share/http share/websocket share/rtmpstream share/naluAnalyzer src
/*需要打包的其他文件*/
EXTRA_DIST = conf/* doc/*
底层目录的makefile.am示例
AUTOMAKE_OPTIONS=foreign
/*目标程序名称*/
bin_PROGRAMS= ComService
/*头问件*/
noinst_HEADERS = \
AppGlobalFunction.h RedisCache.h RtmpPublisherServerApp.h \
MysqlManager.h RedisPool.h TimeToReboot.h Version.h
/*源问件*/
ComService_SOURCES = Main.cpp \
AppGlobalFunction.cpp RedisCache.cpp RtmpPublisherServerApp.cpp
Mys