手把手带你定制自己的nginx rpm包
制作RPM包注意:大家在生产环境当中不要用yum remove删除任何软件,因为yum romove会把很多软件的依赖都给删除,如果其他软件也有这个依赖,那啊哦~~就都不能用了。 一定要用rpm -e在安装中可能需要的一些包点击获取一、RPM的概述及用途RPM包管理工具就是在linux中被广泛使用的软件包管理工具1、用途:(1) 快速安装,删除,升级和管理软件,也支持在线安装和升级软件
注意: 大家在生产环境当中不要用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
如果这篇很合你心意 请给个赞!
如有问题可在下方评论,看到一定会回答大家的啦!
更多推荐
所有评论(0)