网络运营

制作RPM包

RPM的概述及用途

RPM包管理工具就是在linux中被广泛使用的软件包管理工具,很多时候删除软件包,我们都不会采用yum remove而是使用rpm -e。

用途

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

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

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

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

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

RPM的概念

  1. RPM包: 简单来说,就是把已经编译好的二进制代码整合到一个文件里面,并且加入一些判断,依赖或冲突的软件包,安装前或后自动运行的脚本等
    兼容性: 由于RPM包在制作的时候,实在特定的发行版本或硬件上编译的,所以,不同发行版,或同一发行不同版本号的RPM包一般都是不能互相兼容
    3.大部分的软件作业在发布源代码的时候,也会提供rpm或.spec文件,除非没有.spec文件,否则不建议自行编写,并且在编写的时候,应使用标准宏,以提高可读性

rpm有两种做法

第一种, 在rpm里面编译make &&make install编译,也就是说我们把源代码传入rpm包,在rpm包里面编译。编译的好处在于我可以不用管安装机器的版本,比如我可以在centos 6.3-6.8都可以使用。
第二种,我拿一台机器上面安装好了二进制文件打一个包,安装到我们的rpm包里面
一般来说同一个版本的才可以使用。而且我们需要自己解决依赖关系 我们一般在初始化操作里面解决我们的依赖关系

平时工作中基本都会固定使用同一个版本的系统和内核,而且很多自用的软件都是需要编译的,为了节省这部分时间我们就使用第二种方法进行制作。就以大家常用的nginx作为例子。

 

制作nginx的rpm包

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

1.安装rpmbuild,rpmdevtools

yum install -y rpm-build rpmdevtools

  1. 生成rpmbuild的工作目录

rpmdev-setuptree

目录结构:

SOURCES ————存放源代码,补丁,图标等文件
SPECS ————存放用于管理rpm制作过程的spec文件 打包 制作过程
BUILD ————存放解压后的文件
RPMS ————存放制作好的二进制包
SRPMS ————存放由rpmbuils制作好的源码包

  1. 下载源代码到SOURCES目录下

使用nginx源码编译安装

下载软件

nginx-1.10.3 (http://nginx.org/en/download.html)
pcre-8.10.tar.gz (https://sourceforge.net/projects/pcre/files/pcre/)

编译pcre
cd /opt
tar xvf pcre-8.10.ta.gz
cd pcre-8.10/
./configure –prefix=/usr/local/services/pcre
make && make install
ldconfig

编译NGINX

groupadd www
useradd -g www www -s /dev/null
mkdir -p /data/nginx/www
chmod +w /data/nginx/www
chown -R www:www /data/nginx/www
cd /opt
tar xvf nginx-1.10.3
./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
make && make install
mkdir -p /data/logs
chmod +w /data/logs
chown -R www:www /data/logs

 安装依赖

yum -y install gcc* openssl*

在SPEC目录下创建spec文件

Name: nginx
Version: 1.4.4
Release: 2
Summary: for centos6.5_x86_64
Group: Development/Tools
License: GPL
URL:   http://www.baidu.com
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-BuildRoot  Prefix: %{_prefix}

Prefix: %{_sysconfdir}
%define wwwpath /data/nginx/www

%define logspath /data/logs
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as a mail proxy server
%prep
%setup -q
%install
[ “$RPM_BUILD_ROOT” != “/” ] && rm -rf “$RPM_BUILD_ROOT”

mkdir -p $RPM_BUILD_ROOT/%{_prefix}

cp -ar ./* $RPM_BUILD_ROOT%{_prefix}
%post
mkdir -p %{wwwpath}
mkdir -p %{logspath}
groupadd www
useradd -g www www -s /dev/null

mv %{_prefix}/nginx %{_prefix}/local/services/

mv %{_prefix}/index.html %{wwwpath}

mv %{_prefix}/check.php %{wwwpath}

mv %{_prefix}/infor.php %{wwwpath}

mv %{_prefix}/init/nginx %{_sysconfdir}/init.d/

ln -s %{_prefix}/local/services/nginx/sbin/* %{_prefix}/local/sbin/

chmod +w %{wwwpath}
chown -R www:www %{wwwpath}

chmod +w %{logspath}
chmod +x %{_sysconfdir}/init.d/nginx

chown -R www:www %{logspath}

chkconfig nginx on
sed -i “s/ytios_admin/`hostname`/g” /usr/local/services/nginx/conf/nginx.conf
%postun
%{_sysconfdir}/init.d/nginx stop

sleep 2
rm -f %{_prefix}/local/sbin/nginx

%{__rm} -rf %{_prefix}/local/services/nginx

%{__rm} -rf %{_sysconfdir}/init.d/nginx

userdel www -r >/dev/null 2>&1
%files

%defattr(-,root,root)

%{_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
* Wed Oct 24 2017 Nirvana

– Create the spec file and rebuild
– Initial version

 

编译RPM包

在/root/rpmbuild/SOURCE创建文件夹以及把编译好的文件放进去
拷贝一个启动脚本 以及我们的测试文件
cd /root/rpmbuild/SOURCE
mkdir nginx-1.10.3
cd nginx-1.10.3
cp /usr/local/services/nginx ./ -ar
cp /opt/check.php ./
cp /opt/index.html ./
cp /opt/init ./ -ar
进入编译目录 /root/rpmbuild/SPECE
rpmbuild -bb nginx.spec
到此RPM包已经完全制作完成。

Be the First to comment.

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注

75 views