rpm打包sh调用shell_RPM包rpmbuild SPEC文件深度说明 【装载】

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-21 15:12   11   0

转载地址【请查看作者原文】

http://hlee.iteye.com/blog/343499

http://laoguang.blog.51cto.com/6013350/1103628

关键字

spec脚本包括很多关键字,主要有:

引用

Name:

软件包的名称,后面可使用%{name}的方式引用

Summary:

软件包的内容概要

Version:

软件的实际版本号,例如:1.0.1等,后面可使用%{version}引用

Release:

发布序列号,例如:1linuxing等,标明第几次打包,后面可使用%{release}引用

Group:

软件分组,建议使用标准分组

License:

软件授权方式,通常就是GPL

Source:

源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用

BuildRoot:

这个是安装或编译时使用的“虚拟目录”,考虑到多用户的环境,一般定义为:

%{_tmppath}/%{name}-%{version}-%{release}-root

%{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u} -n}

该参数非常重要,因为在生成rpm的过程中,执行make install时就会把软件安装到上述的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作。

后面可使用$RPM_BUILD_ROOT

方式引用。

URL:

软件的主页

Vendor:

发行商或打包组织的信息,例如RedFlag Co,Ltd

Disstribution:

发行版标识

Patch:

补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用

Prefix:

%{_prefix}

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

Prefix:

%{_sysconfdir}

这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识

Build Arch:

指编译的目标处理器架构,noarch标识不指定,但通常都是以/usr/lib/rpm/marcros中的内容为默认值

Requires:

该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本,例如:

libpng-devel >= 1.0.20 zlib

※“>=”号两边需用空格隔开,而不同软件名称也用空格分开

还有例如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同阶段的依赖指定

Provides:

指明本软件一些特定的功能,以便其他rpm识别

Packager:

打包者的信息

%description

软件的详细说明

spec脚本主体

spec脚本的主体中也包括了很多关键字和描述,下面会一一列举。我会把一些特别需要留意的地方标注出来。

%prep

预处理脚本

%setup -n %{name}-%{version}

把源码包解压并放好

通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。

一般用%setup -c就可以了,但有两种情况:一就是同时编译多个源码包,二就是源码的tar包的名称与解压出来的目录不一致,此时,就需要使用-n参数指定一下了。

%patch

打补丁

通常补丁都会一起在源码tar.gz包中,或放到SOURCES目录下。一般参数为:

%patch -p1 使用前面定义的Patch补丁进行,-p1是忽略patch的第一层目录

%Patch2 -p1 -b xxx.patch 打上指定的补丁,-b是指生成备份文件

◎补充一下

引用

%setup 不加任何选项,仅将软件包打开。

%setup -n newdir 将软件包解压在newdir目录。

%setup -c 解压缩之前先产生目录。

%setup -b num 将第num个source文件解压缩。

%setup -T 不使用default的解压缩操作。

%setup -T -b 0 将第0个源代码文件解压缩。

%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。

%patch 最简单的补丁方式,自动指定patch level。

%patch 0 使用第0个补丁文件,相当于%patch ?p 0。

%patch -s 不显示打补丁时的信息。

%patch -T 将所有打补丁时产生的输出文件删除。

%configure

这个不是关键字,而是rpm定义的标准宏命令。意思是执行源代码的configure配置

在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行

,使用标准写法,会引用/usr/lib/rpm/marcros中定义的参数。

另一种不标准的写法是,可参考源码中的参数自定义,例如:

引用

CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix}

%build

开始构建包

在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make的工作

,常见写法:

引用

make %{?_smp_mflags} OPTIMIZE="%{optflags}"

都是一些优化参数,定义在/usr/lib/rpm/marcros中

%install

开始把软件安装到虚拟的根目录中

在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make install的操作。这个很重要,因为如果这里的路径不对的话,则下面%file中寻找文件的时候就会失败。

常见内容有:

%makeinstall

这不是关键字,而是rpm定义的标准宏命令。也可以使用非标准写法:

引用

make DESTDIR=$RPM_BUILD_ROOT install

或 引用

make prefix=$RPM_BUILD_ROOT install

需要说明的是,这里的%install主要就是为了后面的%file服务的。所以,还可以使用常规的系统命令:

引用

install -d $RPM_BUILD_ROOT/

cp -a * $RPM_BUILD_ROOT/

%clean

清理临时文件

通常内容为:

引用

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

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

※注意区分$RPM_BUILD_ROOT和$RPM_BUILD_DIR:

$RPM_BUILD_ROOT是指开头定义的BuildRoot,而$RPM_BUILD_DIR通常就是指/usr/src/asianux/BUILD,其中,前面的才是%file需要的。

%pre

rpm安装前执行的脚本

%post

rpm安装后执行的脚本

%preun

rpm卸载前执行的脚本

%postun

rpm卸载后执行的脚本

%preun %postun 的区别是什么呢?

前者在升级的时候会执行,后者在升级rpm包的时候不会执行

%files 定义那些文件或目录会放入rpm中

这里会在虚拟根目录下进行,千万不要写绝对路径,而应用宏或变量表示相对路径。

如果描述为目录,表示目录中除%exclude外的所有文件。

%defattr (-,root,root)

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

%exclude

列出不想打包到rpm中的文件

※小心,如果%exclude指定的文件不存在,也会出错的。

%changelog

变更日志

※特别需要注意的是:%install部分使用的是绝对路径,而%file部分使用则是相对路径,虽然其描述的是同一个地方。千万不要写错。

就是%file中必须明白,用的是相对目录 引用

%files

%defattr(-,root,root)

%{_bindir}

%{_libdir}

%{_datadir}

%exclude %{_libdir}/debug

如何编写%file段

由于必须在%file中包括所有套件中的文件,所以,我们需要清楚编译完的套件到底包括那些文件?

常见的做法是,人工模拟一次编译的过程:

这样,整个套件的内容就会被放到/usr/local/xxx中,可根据情况编写%file和%exclude段。

※当然,这个只能对源码按GNU方式编写,并使用GNU autotool创建的包有效,若自定义Makefile则不能一概而论。

关于rpm中的执行脚本

如果正在制作的rpm包是准备作为放到系统安装光盘中的话,则需要考虑rpm中定义的脚本是否有问题。由于系统在安装的时候只是依赖于一个小环境进行,而该环境与实际安装完的环境有很大的区别,所以,大部分的脚本在该安装环境中都是无法生效,甚至会带来麻烦的。

所以,对于这样的,需要放到安装光盘中的套件,不加入执行脚本是较佳的方法。

另外,为提供操作中可参考的信息,rpm还提供了一种信号机制:不同的操作会返回不同的信息,并放到默认变量$1中。

引用

0代表卸载、1代表安装、2代表升级

一.RPM制作步骤

我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根据我们的需求制作RPM安装包吧。先来说说基本布骤:

1.Planning what you want 计划做什么rpm包。软件的?库的?

2.Gathering the software to package 收集原材料,即收集源码包

3.Patch the software as need 如果需要打补丁,收集补丁文件。此布骤不是必须

4.Outling any dependenies确定依赖关系包

------------------ 上述动作可由我们手动编译一次软件来确定 -------------------

5.Building RPMs 开始动手制作RPM包

5.1 Set up the directory stucture 设定好目录结构,我们在这些目录中制作我们的RPM包,我们需要下列目录

BUILD源代码解压后的存放目录

RPMS 制作完成后的RPM包存放目录,里面有与平台相关的子目录

SOURCES 收集的源材料,补丁的存放位置

SPECS SPEC文件存放目录

SRMPS 存放SRMPS生成的目录

5.2 Place the Sources in the right directory 把源材料放到正确的位置

5.3 Create a spec file that tell rpmbuild command what to do 创建spec文件,这是纲领文件,rpmbuild命令根据spec文件来制作合适的rpm包

5.4 Build the source and binary RPMS 制作src或二进制rpm包

6.Test RPMS 测试制作的PRM包

7.Add signature for RPM 为RPM包签名

二.RPM包制作实例

我还是用连贯的 话为大家叙述一遍吧,我们首先确实我们要为什么做rpm包,通常我们是为一些软件,比如httpd,nginx等,然后去收集这些软件包的源代码,如果有 需要的话也收集这些补丁文件,手动编译安装一下这个软件(当然如果是不需要编译的就不用演练了),确定依赖的软件包,并记录下来,下面开始准备制作 tengine的PRM包吧:

1.建立一个普通用户,有普通用户来制作rpm,用root的可能会因为代码问题导致毁灭的后果

useradd ibuler

su - ibuler

2.确定我们在 哪个目录下制作RPM,通常这个目录我们topdir,这个需要在宏配置文件中指定,这个配置文件称为macrofiles,它们通常为 /usr/lib/rpm/macros:/usr/lib/rpm/macros.*:~/.rpmmacros,这个在rhel 5.8中可以通过rpmbuild --showrc | grep macrofiles 查看,6.3的我使用这个找不到,但使用是一样的。你可以通过rpmbuild --showrc | grep topdir 查看你系统默认的工作车间

rpmbuild --showrc | grep topdir

-14: _builddir %{_topdir}/BUILD

-14: _buildrootdir %{_topdir}/BUILDROOT

-14: _rpmdir %{_topdir}/RPMS

-14: _sourcedir %{_topdir}/SOURCES

-14: _specdir %{_topdir}/SPECS

-14: _srcrpmdir %{_topdir}/SRPMS

-14: _topdir %{getenv:HOME}/rpmbuild

我们还是自定义工作目录(或车间)吧

vi ~/.rpmmacros

%_topdir /home/ibuler/rpmbuild ##目录可以自定义

mkdir ~/rpmbuild

3.在topdir下建立需要的目录

cd ~/rpmbuild

mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

4.把收集的源码放到SOURCES下

cp /tmp/tengine-1.4.2.tar.gz SOURCES ##事先放好的

5.在SPECS下建立重要的spec文件

cd SPECS

vi tengine.spec ##内容见后讲解,rhel6.3会自动生成模板

6.用rpmbuild命令制作rpm包,rpmbuild命令会根据spec文件来生成rpm包

rpmbuild

-ba 既生成src.rpm又生成二进制rpm

-bs 只生成src的rpm

-bb 只生二进制的rpm

-bp 执行到pre

-bc 执行到 build段

-bi 执行install段

-bl 检测有文件没包含

我们可以一步步试,先rpmbuild -bp ,再-bc 再-bi 如果没问题,rpmbuild -ba 生成src包与二进制包吧

7.安装测试有没有问题,能否正常安装运行,能否正常升级,卸载有没有问题

root用户测试安装:

cd /tmp

cp /home/ibuler/rpmbuild/RPMS/x86_64/tengine-1.4.2-1.el6.x86_64.rpm /tmp

rpm -ivh tengine-1.4.2-1.el6.x86_64.rpm ##测试安装

rpm -e tengine ##测试卸载,如果版本号比原来的高,升级测试

8.如果没问题为rpm包签名吧,防止有人恶意更改 ##这个先不写了,有点晚了,以后补上

到此整个流程完毕。下面来说说其中最最重要的spec的格式,先说最简单的,最容易实现的

到此一个简单的tengine RPM包制作好了。

三.RPM包制作拓展

下面我们来拓展一下,比如:我们想为tengine增加控制脚本,可以通过 start|stop控制,我们还想更换一下默认的首页index.html,默认的fastcgi_params是不能直接连接php的,所以我们替换 为新的配置文件,我们也可以用设置好的nginx.conf替换原来的nginx.conf。基于上述步骤下面继续

1.把修改后的首页文件index.html,控制脚本init.nginx,fastCGI配置文件fastcgi_params,Nginx配置文件nginx.conf 放到SOURCES中 。

[ibuler@ng1 rpmbuild]$ ls SOURCES/

fastcgi_params index.html init.nginx nginx.conf tengine-1.4.2.tar.gz

2 编辑tengine.spec,修改

2.1 介绍区域的SOURCE0下增加如下

Source0: %{name}-%{version}.tar.gz

Source1: index.html

Source2: init.nginx

Source3: fastcgi_params

Source4: nginx.conf

2.2 安装区域增加如下

make install DESTDIR=%{buildroot}

%{__install} -p -D %{SOURCE1} %{buildroot}/usr/html/index.html #%{__install}这个宏代表install命令

%{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx

%{__install} -p -D %{SOURCE3} %{buildroot}/etc/nginx/fastcgi_params

%{__install} -p -D %{SOURCE4} %{buildroot}/etc/nginx/nginx.conf

2.3 脚本区域增加如下

%post

if [ $1 == 1 ];then

/sbin/chkconfig --add nginx

fi

2.4 %file区域增加如下

%files

%defattr (-,root,root,0755)

/etc/

/usr/

/var/

%config(noreplace) /etc/nginx/nginx.conf #%config表明这是个配置文件noplace表明不能替换

%config(noreplace) /etc/nginx/fastcgi_params

%doc /usr/html/index.html #%doc表明这个是文档

%attr(0755,root,root) /etc/rc.d/init.d/nginx #%attr后面的是权限,属主,属组

3. 生成rpm文件测试

rpmbuild -ba tengine.spec

4. 安装测试

到此RPM包制作完毕,你可以根据你的需求制作RPM包吧。

四.RPM包签名

1.生成GPG签名密钥,我用的是root用户

gpg --gen-key

Your selection?1 ##默认即可

What keysize do you want? (2048) 1024 ##密钥长度

Key is valid for? (0) 1y ##有效期

Is this correct? (y/N) y ##确认

Real name: LaoGuang ##密钥名称

Email address: ibuler@qq.com ##邮件

Comment: GPG-RPM-KEY ##备注

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

Enter passphrase OK ##使用空密码,也可以输入

有时可能因为随机数不够导致卡在那里,这时候你就yum 安装几个包组,马上就够了。

2.查看成生的密钥

[root@ng1 dev]# gpg --list-keys

/root/.gnupg/pubring.gpg

------------------------

pub 1024R/49C99488 2012-11-28 [expires: 2013-11-28]

uid LaoGuang (GPG-RPM-KEY)

sub 1024R/69BA199D 2012-11-28 [expires: 2013-11-28]

3.导出公钥以供大家使用验证

gpg --export -a "LaoGuang" > RPM-GPG-KEY-LaoGuang

4.编缉 .rpmmacros说明我们用哪一个密钥加密,我们用root加密的那就在/root下编辑

vi ~/.rpmmacros

%_gpg_name LaoGuang

5.为rpm包加签名

rpm --addsign tengine-1.4.2-1.el6.x86_64.rpm

Enter pass phrase: ##输入密钥

Pass phrase is good.

tengine-1.4.2-1.el6.x86_64.rpm:

到此签名添加成功,下面来验证

6.讲刚才导出的公钥导入rpm中

rpm --import RPM-GPG-KEY-LaoGuang

7.验证

rpm --checksig tengine-1.4.2-1.el6.x86_64.rpm

tengine-1.4.2-1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

到此整个过程完毕,你也试试吧

Group:

软件包所属类别,具体类别有:

Amusements/Games (娱乐/游戏)

Amusements/Graphics(娱乐/图形)

Applications/Archiving (应用/文档)

Applications/Communications(应用/通讯)

Applications/Databases (应用/数据库)

Applications/Editors (应用/编辑器)

Applications/Emulators (应用/仿真器)

Applications/Engineering (应用/工程)

Applications/File (应用/文件)

Applications/Internet (应用/因特网)

Applications/Multimedia(应用/多媒体)

Applications/Productivity (应用/产品)

Applications/Publishing(应用/印刷)

Applications/System(应用/系统)

Applications/Text (应用/文本)

Development/Debuggers (开发/调试器)

Development/Languages (开发/语言)

Development/Libraries (开发/函数库)

Development/System (开发/系统)

Development/Tools (开发/工具)

Documentation (文档)

System Environment/Base(系统环境/基础)

System Environment/Daemons (系统环境/守护)

System Environment/Kernel (系统环境/内核)

System Environment/Libraries (系统环境/函数库)

System Environment/Shells (系统环境/接口)

User Interface/Desktops(用户界面/桌面)

User Interface/X (用户界面/X窗口)

User Interface/X Hardware Support (用户界面/X硬件支持)

测试通过实例:

cat rpmbuild/SPECS/tengine.spec

# This is a sample spec file for test rpm package

%define _prefix /usr/local/nginx

%define _user nobody

%define _user_uid 99

%define _group nobody

%define _group_uid 99

%define _sbin_path /usr/sbin

%define name Tengine

%define summary Tengine for Webserver

%define version 2.1.2

%define release 1

%define license GPL

%define group Application/WebServer

%define source tengine-%{version}.tar.gz

%define url http://tengine.taobao.org/

%define vendor Taobao

%define packager webuser

Name: tengine

Version: 2.1.2

Vendor: Taobao

Release:1

Summary:GUN Tengine2.1.2

Group:Application/WebServer

License:GPL

URL: http://tengine.taobao.org/

Source0:tengine-%{version}.tar.gz

Source1: index.html

Source2: nginx

Source3: fastcgi_params

Source4: nginx.conf

Packager: webuser

#BuildRoot:/www/rpmbuild/%{name}-%{version}-%{release}-rpmbuild

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

#BuildRequires:gcc>=4.4.7, gcc-c++>=4.4.7, zlib-devel>=1.2.3, pcre-devel>=8.12, openssl-devel>=1.0.1e, autoconf>=2.63, automake>=1.11.1

#BuildRequires: mhash-devel

#BuildRequires: libxml2-devel

#BuildRequires: libxslt-devel

#BuildRequires: libgd-devel

#

#Requires:gcc>=4.4.7, gcc-c++>=4.4.7, zlib-devel>=1.2.3, pcre-devel>=8.12, openssl-devel>=1.0.1e, autoconf>=2.63, automake>=1.11.1

#Requires: mhash-devel

#Requires: libxml2-devel

#Requires: libxslt-devel

#Requires: libgd-devel

%description

The GNU Tengine WEB Server program.

%prep

%setup -q -n tengine-%{version}

%build

./configure \

--user=nobody \

--group=nobody \

--prefix=/usr/local/nginx \

--with-ipv6 \

--with-debug \

--with-http_sub_module \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-http_spdy_module \

--with-http_v2_module \

--with-http_realip_module \

--with-http_gzip_static_module \

--with-http_auth_request_module \

--with-http_perl_module \

--with-pcre \

--add-module=../ngx_cache_purge-2.3

make

%install

rm -rf %{buildroot}

make install DESTDIR=%{buildroot}

%{__install} -p -D %{SOURCE1} %{buildroot}/usr/local/nginx/html/index.html

%{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx

%{__install} -p -D %{SOURCE3} %{buildroot}/usr/local/nginx/conf/fastcgi_params

%{__install} -p -D %{SOURCE4} %{buildroot}/usr/local/nginx/conf/nginx.conf

mkdir -p %{buildroot}/%{_initrddir}

(

cat <

#!/bin/bash

# tengine Startup script for the tengine HTTP Server

# this script create it by Luo Hui at 2008.11.11.

# if you find any errors on this scripts,please contact Luo Hui.

# and send mail to farmer.luo at gmail dot com.

#

# chkconfig: - 85 15

# description: tengine is a high-performance web and proxy server.

# processname: tengine

# tengine pidfile: /var/run/tengine.pid

# tengine config: /usr/local/tengine/conf/nginx.conf

nginxd=%{_prefix}/sbin/nginx

nginx_config=%{_prefix}/conf/nginx.conf

nginx_pid=/var/run/tengine.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

ulimit -HSn 65535

# Start tengine daemons functions.

nginx_start() {

if [ -e $nginx_pid ];then

echo "tengine already running...."

exit 1

fi

if [ ! -d %{_prefix}/logs ];then

mkdir -p %{_prefix}/logs

fi

if [ ! -d %{_prefix}/tmp ]; then

mkdir -p %{_prefix}/tmp

fi

if [ -e $nginx_pid ];then

echo "tengine already running...."

exit 1

fi

echo -n $"Starting $prog: "

daemon $nginxd -c ${nginx_config}

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch /var/lock/subsys/tengine

return $RETVAL

}

# Stop tengine daemons functions.

nginx_stop() {

echo -n $"Stopping $prog: "

killproc $nginxd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f /var/lock/subsys/tengine $nginx_pid

}

# reload tengine service functions.

nginx_reload() {

echo -n $"Reloading $prog: "

#kill -HUP `cat ${nginx_pid}`

killproc $nginxd -HUP

RETVAL=$?

echo

}

# See how we were called.

case "$1" in

start)

nginx_start

;;

stop)

nginx_stop

;;

reload)

nginx_reload

;;

restart)

nginx_stop

nginx_start

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: tengine {start|stop|restart|reload|status|help}"

exit 1

esac

exit $RETVAL

EOF

) >%{buildroot}/%{_initrddir}/tengine

chmod 755 %{buildroot}/%{_initrddir}/tengine

%clean

rm -rf %{buildroot}

%pre

grep -q ^%{_group}: /etc/group || %{_sbin_path}/groupadd -g %{_group_gid} %{_group}

grep -q ^%{_user}: /etc/passwd || %{_sbin_path}/useradd -g %{_group} -u %{_user_uid} -d %{_prefix} -s /sbin/nologin -M %{_user}

%post

chkconfig --add tengine

chkconfig --level 345 tengine on

%preun

chkconfig --del tengine

#%postun

#if [ $1 = 0 ]; then

# userdel %{_user} > /dev/null 2>&1 || true

#fi

%files

%defattr(-,root,root,-)

%dir %{_prefix}/

%attr(0755,%{_user},%{_group}) %dir %{_prefix}/logs

%dir %{_prefix}/modules

%dir %{_prefix}/sbin

%dir %{_prefix}/conf

%dir %{_prefix}/html

%{_prefix}/sbin/nginx

%{_prefix}/sbin/dso_tool

%{_prefix}/conf/module_stubs

%{_prefix}/conf/fastcgi.conf

%{_prefix}/conf/fastcgi_params.default

%{_prefix}/conf/win-utf

%{_prefix}/conf/koi-utf

%{_prefix}/conf/nginx.conf.default

%{_prefix}/conf/fastcgi.conf.default

%config(noreplace) %{_prefix}/conf/fastcgi_params

%{_prefix}/conf/koi-win

%{_prefix}/conf/mime.types

%config(noreplace) %{_prefix}/conf/nginx.conf

%{_prefix}/conf/mime.types.default

%{_prefix}/conf/scgi_params

%{_prefix}/conf/scgi_params.default

%{_prefix}/conf/uwsgi_params

%{_prefix}/conf/uwsgi_params.default

%{_prefix}/html/50x.html

%{_prefix}/html/index.html

/usr/lib64/perl5/perllocal.pod

/usr/local/lib64/perl5/auto/nginx/.packlist

/usr/local/lib64/perl5/auto/nginx/nginx.bs

/usr/local/lib64/perl5/auto/nginx/nginx.so

/usr/local/lib64/perl5/nginx.pm

%{_prefix}/conf/browsers

%{_prefix}/include/nginx.h

%{_prefix}/include/ngx_alloc.h

%{_prefix}/include/ngx_array.h

%{_prefix}/include/ngx_atomic.h

%{_prefix}/include/ngx_auto_config.h

%{_prefix}/include/ngx_auto_headers.h

%{_prefix}/include/ngx_buf.h

%{_prefix}/include/ngx_channel.h

%{_prefix}/include/ngx_conf_file.h

%{_prefix}/include/ngx_config.h

%{_prefix}/include/ngx_connection.h

%{_prefix}/include/ngx_core.h

%{_prefix}/include/ngx_crc.h

%{_prefix}/include/ngx_crc32.h

%{_prefix}/include/ngx_crypt.h

%{_prefix}/include/ngx_cycle.h

%{_prefix}/include/ngx_errno.h

%{_prefix}/include/ngx_event.h

%{_prefix}/include/ngx_event_busy_lock.h

%{_prefix}/include/ngx_event_connect.h

%{_prefix}/include/ngx_event_openssl.h

%{_prefix}/include/ngx_event_pipe.h

%{_prefix}/include/ngx_event_posted.h

%{_prefix}/include/ngx_event_timer.h

%{_prefix}/include/ngx_file.h

%{_prefix}/include/ngx_files.h

%{_prefix}/include/ngx_gcc_atomic_x86.h

%{_prefix}/include/ngx_hash.h

%{_prefix}/include/ngx_http.h

%{_prefix}/include/ngx_http_busy_lock.h

%{_prefix}/include/ngx_http_cache.h

%{_prefix}/include/ngx_http_config.h

%{_prefix}/include/ngx_http_core_module.h

%{_prefix}/include/ngx_http_perl_module.h

%{_prefix}/include/ngx_http_reqstat.h

%{_prefix}/include/ngx_http_request.h

%{_prefix}/include/ngx_http_script.h

%{_prefix}/include/ngx_http_spdy.h

%{_prefix}/include/ngx_http_spdy_module.h

%{_prefix}/include/ngx_http_ssi_filter_module.h

%{_prefix}/include/ngx_http_ssl_module.h

%{_prefix}/include/ngx_http_upstream.h

%{_prefix}/include/ngx_http_upstream_round_robin.h

%{_prefix}/include/ngx_http_v2.h

%{_prefix}/include/ngx_http_v2_module.h

%{_prefix}/include/ngx_http_variables.h

%{_prefix}/include/ngx_inet.h

%{_prefix}/include/ngx_linux.h

%{_prefix}/include/ngx_linux_config.h

%{_prefix}/include/ngx_list.h

%{_prefix}/include/ngx_log.h

%{_prefix}/include/ngx_md5.h

%{_prefix}/include/ngx_murmurhash.h

%{_prefix}/include/ngx_open_file_cache.h

%{_prefix}/include/ngx_os.h

%{_prefix}/include/ngx_palloc.h

%{_prefix}/include/ngx_parse.h

%{_prefix}/include/ngx_pipe.h

%{_prefix}/include/ngx_proc.h

%{_prefix}/include/ngx_process.h

%{_prefix}/include/ngx_process_cycle.h

%{_prefix}/include/ngx_proxy_protocol.h

%{_prefix}/include/ngx_queue.h

%{_prefix}/include/ngx_radix_tree.h

%{_prefix}/include/ngx_rbtree.h

%{_prefix}/include/ngx_regex.h

%{_prefix}/include/ngx_resolver.h

%{_prefix}/include/ngx_segment_tree.h

%{_prefix}/include/ngx_setaffinity.h

%{_prefix}/include/ngx_setproctitle.h

%{_prefix}/include/ngx_sha1.h

%{_prefix}/include/ngx_shmem.h

%{_prefix}/include/ngx_shmtx.h

%{_prefix}/include/ngx_slab.h

%{_prefix}/include/ngx_socket.h

%{_prefix}/include/ngx_string.h

%{_prefix}/include/ngx_sysinfo.h

%{_prefix}/include/ngx_syslog.h

%{_prefix}/include/ngx_thread.h

%{_prefix}/include/ngx_time.h

%{_prefix}/include/ngx_times.h

%{_prefix}/include/ngx_trie.h

%{_prefix}/include/ngx_user.h

/usr/local/share/man/man3/nginx.3pm

%{_initrddir}/tengine

%doc /usr/local/nginx/html/index.html

%attr(0775,root,root) /etc/rc.d/init.d/nginx

%changelog

* Mon Jul 4 2016 Beijing

- ver 2.1.2

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP