手把手带你定制自己的nginx rpm包

注意: 大家在生产环境当中不要用yum remove删除任何软件,因为yum romove会把很多软件的依赖都给删除,如果其他软件也有这个依赖,那啊哦~~就都不能用了。
  一定要用rpm -e

在安装中可能需要的一些包点击获取

一、RPM的概述及用途

RPM包管理工具就是在linux中被广泛使用的软件包管理工具
1、用途:

(1) 快速安装,删除,升级和管理软件,也支持在线安装和升级软件

(2)通过RPM包管理器能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包

(3)可以在查询系统中的软件包是否安装以及其版本

(4)作为开发者可以把自己的程序打包为RPM包发布,减少软件安装前的配置编译所花费的时间

(5)依赖性检查,查看是否有软件包由于不兼容扰乱了系统

2、RPM的概念

(1)RPM包: 简单来说,就是把已经编译好的二进制代码整合到一个文件里面,并且加入一些判断,依赖或冲突的软件包,安装前或后自动运行的脚本等

(2)兼容性: 由于RPM包在制作的时候,实在特定的发行版本或硬件上编译的,所以,不同发行版,或同一发行不同版本号的RPM包一般都是不能互相兼容

(3)大部分的软件作业在发布源代码的时候,也会提供rpm或.spec文件,除非没有.spec文件,否则不建议自行编写,并且在编写的时候,应使用标准宏,以提高可读性。

3、rpm有两种做法

(1) 在rpm里面编译 make make install
  编译也就是说我们把源代码传入rpm包 在rpm包里面编译 编译的好处在于我可以不用管安装机器的版本,比如我可以在centos 6.3-6.8都可以使用 。

(2)我拿一台机器上面安装好了二进制文件打一个包,安装到我们的rpm包里面 。
  一般来说同一个版本的菜可以使用centos6.2 6.3,而且我们需要自己解决依赖关系 我们一般在初始化操作里面解决我们的依赖关系 。


二、制作nginx的rpm包

目的:制作rpm包的目的就是把安装的过程封装起来,在执行rpm的时候会执行我们封装好的操作.

注意:在制作之前我们首先得知道要什么和准备做什么,养成每次编译或安装后都进行echo $?检查是否存在错误

1、rpm的命令安装和rpm工作目录
2、nginx的手动编译(因为我们要自己定制化)和安装
3、rpmbuild目录下SOURCES中要存放我们需要制作nginx rpm包所需的资源
4、vim编译nginx的spec文件
5、打包并测试,完成rpm包制作完成

  下面我们开始制作rpm包,现有环境纯净centos6.5,只安装有vim和lrzsz。

1、安装rpm工具
(1)安装 rpmbuild,rpmdevtools
yum install -y rpm-build rpmdevtools

  安装完成后可使用rpm的各命令

(2)生成rpmbuild的工作目录
rpmdev-setuptree

目录结构:

  SOURCES ————存放源代码,补丁,图标等文件

  SPECS ————存放用于管理rpm制作过程的spec文件 打包 制作过程

  BUILD ————存放解压后的文件

  RPMS ————存放制作好的二进制包

  SRPMS ————存放由rpmbuils制作好的源码包

(3)下载源代码到SOURCES目录下

  1. 编译pcre

  去官网下载nginx-1.10.3.tar.gz (http://nginx.org/en/download.html)

  pcre文件是构建rpm步骤的必须品
  再下一个pcre-8.10.tar.gz (https://sourceforge.net/projects/pcre/files/pcre/)

  如不清楚rz sz的用法可以点击这里,查看3大类中的上传下载功能

cd /opt  #跳转到opt目录

rz  #上传nginx-1.10.3.tar.gz   pcre-8.10.tar.gz

tar xvf pcre-8.10.tar.gz   #解压缩pcre-8.10.tar.gz

cd pcre-8.10/  #进入解压的pcre文件夹中

./configure --prefix=/usr/local/services/pcre  #./configure对安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系。--prefix=指定安装路径,不指定prefix,则可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。

make && make install  #在./configuration生成了Makefile之后执行编译安装

ldconfig #ldconfig是一个动态链接库管理命令,ldconfig通常在系统启动时运行,现安装了一个新的动态链接库时,就需要手工运行这个命令。

  2.编译nginx

  groupadd www   #添加www用户组

  useradd -g www www -s /dev/null  #添加用户www

  mkdir -p /data/htdocs/www   #创建www目录

  chmod +w /data/htdocs/www   #对目录进行授权

  chown -R www:www /data/htdocs/www  #就是把www的用户名和用户组改成www和www(只修改了www的属组).

  cd /opt #跳转到opt目录

  tar xvf nginx-1.10.3.tar.gz  #解压nginx压缩包

 ./configure --user=www --group=www --prefix=/usr/local/services/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/pcre-8.10 
   #编译这里特别主要把--with-pcre=/opt/pcre-8.10加进

  make && make install   #执行编译安装

  mkdir -p /data/logs  #创建日志目录

  chmod +w /data/logs  #对目录进行授权

  chown -R www:www /data/logs  #就是把logs的用户名和用户组改成www和www 

 3.安装依赖

yum -y install gcc* openssl*  

 4.在SPEC目录下创建spec文件

cd ~/rpmbuild/SPECS

vim nginx.spec #创建nginx的spec文件并进行编译

  文件内容如下:

Name:nginx  #软件包名称,后面可使用%{name}引用  

Version:1.10.3 #软件的版本号,与源码包一致  

Release:1   #发布序列号  

Summary:for centos6.5x86_64 #软件包的内容概要  

Group:Development/Tools #软件分组  

License:GPL     #软件授权方式  

URL:http://www.baidu.com    #软件的主页  

Source0:%{name}-%{version}.tar.gz   #源代码包  

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-BuildRoot   #这个安装或编译时使用的“虚拟目录”  

Prefix: %{_prefix}  #为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录。必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm包安装时重新指定位置的功能。  

Prefix: %{_sysconfdir}  #%{_prefix}指/usr,而对其他的文件,例如/etc下的配置文件,则需要用%{sysconfdir}标识。  

%define wwwpath /data/htdocs/www #后面在使用这个地址时就可以直接引用%{wwwpath}  

%define logspath /data/logs #后面在使用这个地址时就可以直接引用%{logspath}  

%description    #软件包详述 doc  

nginx [engine x] is a HTTP and reverse proxy server, as well as a mail proxy server  

%prep   #软件编译之前的处理,如解压。  

%setup -q   #打开软件包,加选项对软件包进行解压处理 去我们的SOURCE目录去找到源码包并解压  

%install 安装软件执行语句  

[ "RPM_BUILD_ROOT" != "/" ] && rm -rf "RPM_BUILD_ROOT"  ##查看BUILDROOT目录是否为空,不为空时删除里面的内容  

mkdir -p $RPM_BUILD_ROOT/%{_prefix}    #在BUILDROOT目录中创建/usr目录  

cp -ar ./* $RPM_BUILD_ROOT%{_prefix} #将当前目录中的所有文件及属性全部复制到这个目录下  

%post   #rpm安装后执行的脚本  

mkdir -p %{wwwpath} #创建/data/htdocs/www目录  

mkdir -p %{logspath}    #创建/data/logs目录  

groupadd www #创建新的用户组  

useradd -g www www -s /dev/null #创建新用户到指定的用户组及用户目录  

mkdir %{_prefix}/etc/local/services 

mv %{_prefix}/nginx %{_prefix}/local/services/ #将nginx文件移动到/usr/local/services/目录下  

mv %{_prefix}/index.html %{wwwpath} #将index.html文件移动到/data/htdocs/www目录下  

mv %{_prefix}/check.php %{wwwpath}  #将check.php文件移动到/data/htdocs/www目录下  

mv %{_prefix}/infor.php %{wwwpath}  #将infor.php文件移动到/data/htdocs/www目录下  

mv %{_prefix}/init/nginx %{_sysconfdir}/init.d/ #将/usr/init/nginx移动到/etc/init.d/目录下  

ln -s %{_prefix}/local/services/nginx/sbin/* %{_prefix}/local/sbin/ #创建软链接  

chmod +w %{wwwpath} #给/data/htdocs/www目录赋予写权限  

chown -R www:www %{wwwpath} #修改/data/htdocs/www的所有者和所属组的  

chmod +w %{logspath}    #给/data/logs目录赋予写权限  

chmod +x %{_sysconfdir}/init.d/nginx #给/etc/init.d/nginx文件赋予执行权限 4 r 2 w 1 x  

chown -R www:www %{logspath}    #修改/data/logs的所有者和所属组的  

chkconfig nginx on  #设置开机启动  

sed -i "s/ytios_admin/hostname/g" /usr/local/services/nginx/conf/nginx.conf #将这个文件中的ytios_admin替换为hostname  

%postun #卸载后执行的操作  

%{_sysconfdir}/init.d/nginx stop    #让服务暂停  

sleep 2 #休眠2秒  

rm -f %{_prefix}/local/sbin/nginx #删除/usr/local/sbin/nginx文件  

%{_rm} -rf %{_prefix}/local/services/nginx #删除/usr/local/services/nginx文件  

%{_rm} -rf %{_sysconfdir}/init.d/nginx #删除/etc/init.d/nginx文件  

userdel www -r >/dev/null 2>&1 #删除www这个用户  

%files #定义那些文件或目录会放入rpm中 这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对目录  

%defattr(-,root,root) #指定包装文件的属性 分别是(mode,owner,group) -表示默认值,对文本文件是0644 可执行文件为0755  

%{_prefix}/nginx  

%{_prefix}/index.html  

%{_prefix}/check.php  

%{_prefix}/infor.php  

%{_prefix}/init  

%clean #删除临时目录  

[ "RPM_BUILD_ROOT" != "/" ] && rm -rf "RPM_BUILD_ROOT"  

rm -rf $RPM_BUILD_DIR/%{name}-%{version}  

%changelog #变更日志  

 5.编译RPM包

   在/root/rpmbuild/SOURCE创建文件夹以及把编译好的文件放进去  
   拷贝一个启动脚本 以及我们的测试文件 

   cd /root/rpmbuild/SOURCE  

   mkdir nginx-1.10.3  

   cd nginx-1.10.3

   cp /usr/local/services/nginx ./ -ar  

   rz  #上传check.php,index.html,infor.php这些都是自己的一些测试文件大家要是想改修改可以按自己需求改

   mkdir init

   cd init

   rz  #上传init文件夹下的nginx文件  

   cd ..

   cd nginx/conf

   rz  #上传fcgi.conf文件  

   cd /root/rpmbuild/SPECE  #进入编译目录

   rpmbuild -bb nginx.spec  

做好的rpm包会存放在~/rpmbuild/RPMS/X86_64文件夹中

三、验证工作成果

新建一台centos的虚拟机,然后将我们做好的rpm包拷贝到虚拟机的/opt目录下,别忘了安装rpm。
1、安装nginx rpm包
  通过命令rpm -ivh 来编译我们的rpm包
  然后启动nginx
  这里写图片描述
2、打开网址测试
  http://IP/index.html
  如果打开是这样那么恭喜你制作成功啦!
  这里写图片描述


在安装过程中可能会出现一些依赖缺失下面放出我遇到的几个
1 少了openssl
yum -y install openssl openssl-devel

2 ./configure: error: the HTTP rewrite module requires the PCRE library 安装pcre-devel解决问题
yum -y install pcre-devel

3 ./configure: error: the HTTP gzip module requires the zlib library.
yum install -y zlib-devel


如果这篇很合你心意 请给个赞!

如有问题可在下方评论,看到一定会回答大家的啦!

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值