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-devel,zlib-devel,openssl-devel
1.5:了解RPM包的制作过程或结构
1.5.1:准备rpmbuild车间,(BUILD BUILDROOT RPMS SOURCES SPECS SRPMS),了解这几个文件夹的作用, 使用普通用户进行,因为root用户权限太大,使用比较危险
1.5.2:把源材料放入车间的SOURCES文件夹里,这是规定的固定的目录
1.5.3:进入SPECS创建spec文件,需要spec文件来指挥如何使用源材料来制作成rpm包
1.5.4:开始编译源代码生成rpm包
2.正式操作
2.1:准备制作车间
2.1.1:yum install rpmbuild #安装rpmbuild制作软件
2.1.2:useradd nginx #新建一个nginx用户
2.1.2:su - nginx #切换到nginx用户登录
2.1.3:rpmbuild -- showrc | grep _ropdir 查看工作车间的位置
2.1.4:vim .rpmmacros 在里面填写nginx的家目录 %_topdir/home/nginx/rpmbuild 保存退出 #重新定义工作车间的 路径
2.1.5:mkdir -pv rpmbuild/{BUILD BUILDROOT RPMS SOURCES SPECS SRPMS} #进入自己的家目录创建车间 目录,再用rpmbuild -- showrc | grep _ropdir 查看是否为当前自定义的路径
2.2:把源码包放入到SOURCES文件夹里面,然后新建个文件把控制脚本复制到里面进行保存,我这里用的test.nginx当控制脚本文件,如图:
2.3:进入SPECS目录创建spec文件,vim nginx.spec,创建后里面会有语法定义,把里面的内容补全即可,因为我这里用到了控制脚本,还需要加脚本阶段,整体文件如下:
[nginx@host-172-18-21-129 SPECS]$ cat nginx.spec
Name:nginx #软件名字
Version:1.10.2 #版本号,需要与源码包一样,而且不可以使用-只能使用.
Release: 2%{?dist} #制作版本号,这里宏是固定的,不用改
Summary:nginx test #简介
Group:Applications/Internet #组,可以使用cat /usr/share/doc/rpm-4.11.3/GROUPS 来查看组所使用的必须为这个里面的组
License:GPLv2 #版权说明
URL:nginx.org #源码包的出处
Source0:nginx-1.10.2.tar.gz #明确说明制作RPM包所使用的源文件,这里是我的nginx源码包
Source1:test.nginx #明确说明制作RPM包所使用的源文件,这里是我的控制脚本
BuildRequires:gcc-c++,pcre-devel,zlib-devel,openssl-devel #制作RPM包的过程所依赖的软件包
Requires:gcc-c++,pcre-devel,zlib-devel,openssl-devel #安装RPM包的过程所是依赖的软件包
%description #描述
nginx web server test
%prep #固定格式,不用管,这个是准备阶段
%setup -q
%build #制作阶段,主要有configure和make
export DESTDIR=%{buildroot}
./configure \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre
make %{?_smp_mflags}
%install #安装阶段buildroot路径基本上都是固定的,可以自定义,buildroot:在tmpath下建3个子目录里面有 name,version,release
rm -rf %{buildroot} #因为制作过程可能进行多次重复操作,所以我么定义每次都删一遍Buildrooot
make install DESTDIR=%{buildroot} #表示安装到DESTDIR以buildoot为起点
%{__install} -p -d -m 0755 %{buildroot}/var/run/nginx #在buildroot路径下创建目录并给权限,-d是创建目录的
%{__install} -p -d -m 0755 %{buildroot}/var/log/nginx
%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/nginx #在{buildroot}/etc/rc.d/init.d/nginx 下安装source1源文件并指定权限
%clean #清理段,当RPM包制作完成之后都会自动清理一遍buildroot
rm -rf %{buildroot}
%pre #脚本段,安装前,在安装前添加一个nginx用户
if [ $1 == 1 ]; then #$1=1表示安装,2表示卸载,0表示升级
/usr/sbin/useradd -s /bin/false -r nginx 2>/dev/null || :
fi
%post #安装后,添加到服务列表
if [ $1 == 1 ]; then
/sbin/chkconfig --add %{name}
fi
%preun #卸载前停止服务并从服务列表删除
if [ $1 == 0 ]; then
/sbin/service %{name} stop >/dev/null 2>&1
/sbin/chkconfig --del %{name}
fi
%files #文件阶段,定义宏和权限
%defattr(-,root,root,-) #定义默认权限
%doc LICENSE CHANGES README #定义文档,下面这些文件当执行到rpmbulid -b
/usr/sbin/nginx
%dir /var/run/nginx
%dir /var/log/nginx
%dir /etc/nginx #下面的配置文件 在执行到rpmbuild -bi nginx.spec的时候会有错误提示,把里面的拷贝过来就成下面 的配置文件格式了
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/local/nginx/html/50x.html
/usr/local/nginx/html/index.html
%attr(0755, root, root) /etc/rc.d/init.d/nginx #明确定义这个脚本的单个属性,不走默认属性
%changelog #以*号表示 周几 月份 日期 年份 编辑人员 邮箱 版本信息
* Tue Oct 25 2016 hui.shi -1.10.2-2
-add nginx.sys
* Mon Oct 24 2016 hui.shi -1.10.2-1
-test version
3.在写完spec文件之后,进行制作RPM包
3.1:rpmbuild -bp nginx.spec #执行到%prep阶段,查看是否正常,出现错误就解决报错
3.2:rpmbuild -bc nginx.spec #执行到%build阶段,查看是否正常,出现错误就解决报错
3.3:rpmbuild -bi nginx.spec #执行到%install阶段,查看是否报错,出现错误就解决报错
以上的报错都解决完之后可以直接进行制作rpm包了
3.4: rpmbuild -ba nginx.spec #制作二进制和源码格式的rpm包
制作完成的rpm包在 /home/nginx/rpmbuild/RPMS里
4.然后找到制作好的RPM包进行测试安装
rpm -ivh nginx包
然后systemctl start nginx.service来启动服务
netstat -tunlp 来查看是否启动正常
如果我们需要给这个nginx添加新功能,那就需要加原材料和重新修改spec文件来重新进行制作,然后用
rpm -Uvh nginx来升级软件
注意:第3阶段特别容易出现报错,主要的错误有 字母、标点、—和_的写错,sepc文件里面特别容易写错字,就慢慢排错吧