httpd 2.4的rpm包制作

参考:

http://rpm-guide.readthedocs.io/en/latest/rpm-guide.html

http://laoguang.blog.51cto.com/6013350/1103628

http://blog.csdn.net/u013639526/article/details/52355081

rpm制作简介:

rpm包的制作时由rpmbuild这个软件包来实现的,rpmbuild的工作流程大概是这样的:

1.找到源码包,加压并拷贝到编译工作车间(官方文档的翻译,其实就是一个专门用来编译的目录)

2.在编译工作车间中编译程序,并把编译结果拷贝到临时的目录中

3.对编译后的程序进行打包,把rpm包和srpm包分别拷贝到对应目录

上面的流程都是在一个以.spec结尾的文件指导下完成的,所以说.spec是整个过程的灵魂人物,它决定了解压前后的操作,源码的编译参数等等。可以说rpmbuild是一个框架,而.spec就是具体实现,rpmbuild在.spec的指导下对编码进行编译打包最后生成rpm包。

通过上面的流程,我们也不难知道为什么rpmbuild需要以下几个目录:

SPECS:存放spec文件

SOURCES:存放源码包和补丁等,rpmbuild会在这里寻找源码

BUILD:工作车间,也是源码编译的路径,在这个目录下进行编译

RPMS:存放编译好后的rpm包

SRPMS:存放编译好后的srpm包

BUILDROOT:临时存放编译完的结果(这个不是官网说的必备的目录,因为只是临时存放,打包完成后会被删除,必备目录是上面5个,我个人觉得有必要拿出来说下,方便理解工作流程)

安装rpmbuild包的时候,默认在家目录会生成以上5个目录

(注意:在使用rpmbuild的时候,要使用非管理员账户进行制作,这是为了避免spec中使用了不安全的指令导致意外)

rpmbuild  --showrc可以查看所有的rpmbuild的环境变量,比如builddir表示工作车间的目录位置等等,这些变量我们都可以修改以下文件修改(内容来自rpmbuild的man文档):

/usr/lib/rpm/macros

/usr/lib/rpm/redhat/macros

/etc/rpm/macros

~/.rpmmacros

rpmbuild从/usr/lib/rpm/macro开始往下到~/.rpmmacros依次读取配置,如果配置一样,则后面的配置会覆盖前面的配置,也就是说,如果我们想修改rpmbuild的环境变量,我们最好在当前用户的家目录底下建个.rpmmacros文件,它的语法也很简单:

%VARIABLE_NAME   VALUE

例如:

%_topdir      %(echo $HOME)/rpmbuild

值可以引用变量,#开头表示注释

httpd 2.4的打包:

系统:centos 6.5 64位

1.安装rpm编译环境

yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils  -y

2.把源码包放进SOURCES中

cd /usr/local/src

wget  http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.27.tar.bz2

wget  http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.2.tar.gz

wget  http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.0.tar.gz

tar xf httpd-2.4.27.tar.bz2

tar xf apr-1.6.2.tar.gz

mv  apr-1.6.2  httpd-2.4.27/srclib/apr

tar xf apr-util-1.6.0.tar.gz

mv apr-util-1.6.0  httpd-2.4.27/srclib/apr-util

tar -jcvf  httpd-2.4.27.tar.bz2  httpd-2.4.27  #这里之所以解压并重新归档压缩,是因为httpd依赖于apr,在.spec中指定这个过程比较麻烦,所以我就直接这么做了

mv httpd-2.4.27.tar.bz2 ~/rpmbuild/SOURCES

mv httpd-2.4.27/build/rpm/httpd.init  ~/rpmbuild/SOURCES  #这个是为了给rpm包提供个启动脚本

[[email protected]]#vi  ~/rpmbuild/SOURCES/httpd

HTTPD=/usr/local/apache2.4/bin/httpd

PIDFILE=/usr/local/apache2.4/logs/httpd.pid

#这个是为了提供给启动脚本httpd的配置,请根据自己实际情况来,这里我因为要把httpd安装在/usr/loacl/apache2.4/中所以这么做

3.编写spec文件(内容的解释参考http://laoguang.blog.51cto.com/6013350/1103628,懒得再写)

[[email protected] SPECS]# vi httpd2.4.spec

Name:           httpd 
Version:        2.4.27
Release:        1%{?dist}
Summary:        a rpm package made by linzb 2017.7.6

License:        GPL
URL:           httpd-2.4.27.tar.bz2
Source0:       httpd-2.4.27.tar.bz2 
Source1:	httpd
Source2:	httpd.init

BuildRequires:  gcc
BuildRequires:  make

%description
a  web server 

%prep
%setup -q

%build
rm -rf %{buildroot}
./configure --prefix=/usr/local/apache2.4 --sysconfdir=/etc/httpd/conf   --with-included-apr   --with-included-apr-util --enable-mpms-shared=all  
make %{?_smp_mflags}
%install
%make_install
%{__install} -p -D %{SOURCE1} %{buildroot}/etc/sysconfig/httpd    
%{__install} -p -D %{SOURCE2} %{buildroot}/etc/rc.d/init.d/httpd

%post 
if [ $1 == 1 ];then 
        /sbin/chkconfig --add httpd 
fi 
%files
/etc
/usr

%changelog
* Tue May 31 2016 linzb <[email protected]> - 1.0-1
- First httpd 2.4 package

4.执行打包并测试安装

cd  ~/rpmbuild/SPECS

rpmbuild -bb httpd2.4.spec

#如果没出错的话会在~/rpmbuild/RPMS下的对应架构目录下生成两个rpm包,一个是我们要的,一个是debug信息包,比如这里我生成了:

[[email protected] SPECS]#ls  ../RPMS/x86_64/

httpd-2.4.27-1.el6.x86_64.rpm

httpd-debuginfo-2.4.27-1.el6.x86_64.rpm

最后把包拷贝到对应平台安装测试即可

debug:

1.编译过程中提示: ‘check-rpaths‘ detected a broken RPATH and will cause ‘rpmbuild‘

*          to fail. To ignore these errors, you can set the ‘$QA_RPATHS‘

解决方法:

[[email protected] SPECS]# vi ~/.rpmmacros

%_topdir      %(echo $HOME)/rpmbuild

%_smp_mflags  -j3

#%__arch_install_post   /usr/lib/rpm/check-rpaths   /usr/lib/rpm/check-buildroot  #注销掉这行即可

2.编译完成的包,提示/etc/init.d  conflict with chkconfig字样

解决:启动脚本install的时候,安装到/etc/rc.d/init.d下

3. %file段的目录问题

file段的目录都是相对于buildroot这个变量指定的路径的,也就是类似于chroot命令效果,如果你写/etc相当于真实路径为%{buildroot}/etc

编译好的包我放在51cto下载中心了,欢迎排错

时间: 2024-10-25 05:59:49

httpd 2.4的rpm包制作的相关文章

RPM包制作方法

一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package Manager的缩写.在Fedora.Redhat.Mandriva.SuSE.YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用: RPM包中除了包括程序运行时所需要的文件,也有其它的文件:一个RPM包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定

Ngins rpm包制作,spec配置文件

Name:           nginx Version:        1.4.2 Release:        1%{?dist} Summary:        nginx from source Group:          System Environment/Daemons License:        GPLv2 URL:            http://nginx.org Source0:        %{name}-%{version}.tar.gz Source

php-7.1.0 rpm包制作

nginx-1.8.0 rpm包制作见上篇文章:http://www.cnblogs.com/xiaoming279/p/6251149.html spec文件 Name: php Version: 7.1.0 Release: 1%{?dist} Summary: php Group: Applications/Server License: GPLv2 URL: http://www.51.com Source0: %{name}-%{version}.tar.gz Source1: php

rpm包制作(一)

rpm介绍 rpm的全称是RedhatPackage Manager,常见的使用rpm软件包的系统主要有Fedora.CentOS.openSUSE.SUSE企业版.PCLinuxOS等.使用deb软件包后缀的类Debian系统最常见的有Debian.Ubuntu.Finnix等. 从软件运行的结构来说,一个软件主要可以分为三个部分:可执行程序.配置文件和动态库.当然还有可能会有相关文档.手册.供二次开发用的头文件以及一些示例程序等等.可执行文件是必须的,其他部分都是可选的. 制作rpm软件包的

linux之rpm包制作

难点:spec文件的编写 1,首先安装rpm-build命令 yum install rpm-build 2,介绍spec编写规则: #ll #drwxr-xr-x  2 root root 4096 Jul 29 13:50 BUILD #drwxr-xr-x  2 root root 4096 Jul 29 13:51 RPMS #drwxr-xr-x  2 root root 4096 Jul 29 13:51 SOURCES #drwxr-xr-x  2 root root 4096 J

nginx的rpm包制作

nginx prm包 详细制作流程 1.准备工作 1.1:我这里准备了一台centos7的虚拟主机 1.2:官网下载最新的稳定版nginx源码包,地址:http://nginx.org/nginx-1.10.2.tar.gz 1.3:官网下载nginx的控制脚本,地址:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/ 1.4:手动安装一遍,看看都需要哪些依赖,所需依赖:gcc-c++,pcre-

linux rpm包制作

Linux Rpm 包制作 一.简介 RPM(Red Hat Package Manager)的最常见的软件包管理器. 软件包管理器 rpm,deb(dpkg) RPM包命名:name-version-release.architecture.rpm. xorg-x11-xsm-1.0.2 -4.fc6.i386.rpm 包名       版本号 编译次数 厂商 平台 RPM功能:安装.卸载.升级.查询和验证. rpm     -ivh              安装 rpm     -Uvh

rpm包制作(待实验)

作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm NAME: rpm包名字 VERSION: rpm包版本号(主版本号.次版本号.测试号) RELEASE: rpm包编译发布次数(第几次编译发布) ARCH: cpu架构(比如i386和x86_64,i386兼容x86_64,noarch的代表一些列脚本) 比如nginx-1.4.0-24.x86.r

简单 RPM 包制作

本文链接:http://blog.csdn.net/kongxx/article/details/43761295 今天为了测试搭建自己的yum仓库并安装升级软件包,因此需要一个rpm包来做测试,所以就想到了自己来做一个最简单rpm,因为仅仅就是做一个测试所以没有添加需要编译的文件,而是只使用了一个shell文件来输出可爱的Hello World. 1. 首先需要下载安装rpm包制作工具 $ sudo yum install -y rpm-build rpmdevtools 2. 运行 rpmd