使用RPM包和源码包安装软件各自的优缺点:
RPM包:安装简单,但无法自定义配置,为保证稳定性、兼容性软件版本都相对陈旧;
源码包:可以较快获得软件最新版本, 可根据需要自定义配置(如安装目录,用户,模块等),安装相对麻烦。
实验目标:
使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体要求如下:
一、部署rpm-build软件
1、安装rpm-build软件包
# yum -y install rpm-build
2、生成目录结构
# rpmbuild -ba nginx.spec ##输入任意 **.spec,这一步报错,此时将自动生成目录
error: failed to stat /root/nginx.spec: No such file or directory
# ls /root/rpmbuild/ ##查看自动生成的目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
3、准备源码软件到SOURCES
# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
4、创建修改SPEC配置文件
# vim /root/rpmbuild/SPECS/nginx.spec ##编写后缀为 .spec 的文件
Name: nginx ##源码包软件名称要与源码包名称对应(注意,名称包括大小写不一致可能导致报错!)
Version: 1.12.2 ##源码包软件的版本号
Release: 10 ##RPM包的版本号,不填默认为1
Summary: Nginx is a web server. ##RPM软件包的简述
License: GPL ##软件的协议
#Group ##该软件所属的组包,若不需要可以注释或删除
URL: test.rpm.com ##网址信息,可写RPM包的下载地址或个人博客地址或公司网址
Source0: nginx-1.12.2.tar.gz ##源码包文件的全称(必须对应!)
BuildRequires: gcc,gcc-c++,pcre-devel,zlib-devel ##制作RPM包的依赖包
#Requires: ##安装RPM包的依赖包
%description ##软件的详细描述
Building a nginx-1.12.2.rpm from nginx-1.12.2.tar.gz
%post ##安装后执行脚本(非必要)
useradd nginx ##创建用户
%prep ##安装前执行脚本(非必要)
%setup -q ##自动解压源码包,并cd进入目录
%build ##配置
./configure
make %{?_smp_mflags}
%install ##安装
make install DESTDIR=%{buildroot}
%files ##(需要一同打包的文件与目录)
%doc
/usr/local/nginx/* ##安装以后产生的目录位置
%changelog
二、创建RPM包
1、使用配置文件创建rpm包
# yum -y install gcc pcre-devel openssl-devel ##安装依赖包
# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec ##使用nginx.spec文件生成
# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm ##查看生成的软件包
2、安装软件
# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
# rpm -qa | grep nginx
# ls /usr/local/nginx/
常见报错
1、缺少依赖包
这一步主要是在./configure配置nginx时软件默认自带的某些模块需要特定的依赖关系
根据报错提示信息,安装依赖包即可。
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.error: Bad exit status from /var/tmp/rpm-tmp.qfdEOj (%build)
#yum -y install zlib-devel ##根据报错信息,安装所需依赖
2、软件包名称指定错误
这一步在编写spec配置文件时一不小心就会犯错,在制作不同软件时,指定的Name名称要严格与源码包一致。
软件根据指定的Name与Version生成软件包名字,再与源码包匹配,若名称不一致则会报错。
修改指定的名字与源码包名字一致,包括大小写一致。

[root@proxy ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.vPgQlI
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf Nginx-1.12.2
+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/nginx-1.12.2.tar.gz
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd Nginx-1.12.2
/var/tmp/rpm-tmp.vPgQlI: line 35: cd: Nginx-1.12.2: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.vPgQlI (%prep)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.vPgQlI (%prep)
3018

被折叠的 条评论
为什么被折叠?



