怎样将apache和nginx的源码包转换为rpm包?

源代码转换

1.准备工作
清空防火墙,iptables -F

httpd-2.2.25.tar.gz(2.2.25的版本)

yum -y install gcc*

2.安装httpd服务
tar zxf httpd-2.2.25.tar.gz -C /usr/src/
cd /usr/src/httpd-
./configure --prefix=/usr/local/httpd  --enable-so --enable-rewribe  --enable-charset-lite  --enable-sockets --enable-cgi && make && make install

注意:
cd /usr/src/httpd
安装不会的时候。
然后查看 INSTALL 大写的都是可阅读文件 READAM

cd /usr/local/httpd/bin/
cp -p apachectl /etc/init.d
mv apachectl httpd
chmod +x httpd


vim /etc/init.d/network
复制里边的两行
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to start at boot time.

vim /etc/init.d/httpd
修改:
# chkconfig: 2345 91 91
# description:This is my web——server



计算机的开机启动级别
cd /etc/rc0.d/
cd /etc/rc1.d/
cd /etc/rc2.d/
cd /etc/rc3.d/
cd /etc/rc4.d/
cd /etc/rc5.d/
k——kill
s——start
将系统服务软连接到开机自启动3和5级别里。
ln -s /etc/init.d/httpd /etc/rc3.d/K91httpd
ln -s /etc/init.d/httpd /etc/rc5.d/K91httpd
ln -s /etc/init.d/httpd /etc/rc3.d/S91httpd
ln -s /etc/init.d/httpd /etc/rc5.d/S91httpd

chkconfig --add httpd
chkconfig httpd on
chkconfig httpd --list
service httpd restart

2.root用户安装软件包管理器build
yum -y install rpm-build
rpm -qa | grep rpm-build

3.创建用户:
useradd li
passwd li

切换用户:
su - li

**********************************************
4.在root用户下查看未安装软件包的详细信息

cd /media/cdrom/PACKGES/
rpm -qpi httpd-2.2.25-1.el6.x86_64.rpm


Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.15                            Vendor: CentOS
Release     : 29.el6.centos                 Build Date: 2013年08月14日 星期三 01时30分33秒
Install Date: (not installed)               Build Host: c6b8.bsys.dev.centos.org
Group       : System Environment/Daemons    Source RPM: httpd-2.2.15-29.el6.centos.src.rpm
Size        : 3076447                          License: ASL 2.0
Signature   : RSA/SHA1, 2013年08月14日 星期三 01时32分39秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.


上边的参数解释:


名称:HTTPD重定位:(不可重新定位)

版本:2.2.15供应商:CITOS

发布日期:27.el6的建造日期:2013,08,14,01,30,33

安装日期:(未安装)构建主机:C6B8Bys.DEV.CENTSO.ORG

组:系统环境/守护进程源RPM:HTTPD-2.2.15-27.el6 CENT.SRC.RPM

尺寸:3076447许可证:ASL 2

签名:RSA/Sa1,2013,08,14,01,32,32,39,钥匙ID 0946FCA2C105B9DE

打包器:CENTOS构建系统

URL:HTTP:/HTTP.APACHE.Org/

Apache HTTP服务器概述

描述:

Apache HTTP服务器是一种强大的、高效的、可扩展的服务器。

Web服务器。

***************************************************

5.编辑源码转换rpm包的文件
vim httpd.spec

Name:httpd

Version:2.2.25    

Release:    1%{?dist}

Summary:Apache HTTP Server    


Group:System Environment/Daemons        

License:GPL

URL:http://httpd.apache.org/        

Source0:httpd-2.2.25.tar.gz

BuildRoot:    %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

BuildRequires:openssl-devel

Requires:vsftpd



%description
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

%prep

%setup -q




%build

./configure --prefix=/usr/local/myhttpd  --enable-so --enable-rewribe  --enable-charset-lite  --enable-sockets --enable-cgi


make %{?_smp_mflags}



%install

rm -rf %{buildroot}

make install DESTDIR=%{buildroot}




%clean

rm -rf %{buildroot}

%files

%defattr(-,root,root,-)

/usr/local/myhttpd/bin/*

/usr/local/myhttpd/cgi-bin/*

%config /usr/local/myhttpd/conf/*

/usr/local/myhttpd/build/*

/usr/local/myhttpd/error/*

/usr/local/myhttpd/htdocs/*

/usr/local/myhttpd/icons/*

/usr/local/myhttpd/include/*

/usr/local/myhttpd/lib/*

%dir /usr/local/myhttpd/logs

%doc /usr/local/myhttpd/man/*

%doc /usr/local/myhttpd/manual/*

/usr/local/myhttpd/modules/*


%post

ln -s /usr/local/myhttpd/bin/* /usr/local/bin/

cp -p /usr/local/myhttpd/bin/apachectl /etc/init.d/myhttpd

chmod +x /etc/init.d/myhttpd

sed -i '1a #chkconfig: 2345 91 91' /etc/init.d/myhttpd

sed -i '2a # description: haha' /etc/init.d/myhttpd

ln -s /etc/init.d/myhttpd /etc/rc3.d/K92myhttpd

ln -s /etc/init.d/myhttpd /etc/rc5.d/K92myhttpd

ln -s /etc/init.d/myhttpd /etc/rc3.d/S92myhttpd

ln -s /etc/init.d/myhttpd /etc/rc5.d/S92myhttpd

chkconfig --add myhttpd


%preun

/etc/init.d/myhttp stop

chkconfig --del myhttpd

rm -rf /etc/rc3.d/K92myhttpd

rm -rf /etc/rc5.d/K92myhttpd

rm -rf /etc/rc3.d/S92myhttpd

rm -rf /etc/rc5.d/S92myhttpd

rm -rf /etc/init.d/myhttpd

rm -rf /usr/local/myhttpd



%changelog

* Wed May 9 2018 lisir <lisir@redhat.com> 2.2.25-1    //注意:必须和自己系统时间相同

- first rpm from httpd-2.2.25

"httpd.spec" 78L, 1881C



********************************************
5.httpd.spec文件参数解释:

build requires
生成源码包的依赖包,必须存在,
编译是的依赖包 openssl-devel
安装时候的依赖包 vsftpd

要执行哪个语句安装:
&buil
./configure --prefix=/usr/local/myhttpd  --enable-so --enable-rewribe  --enable-charset-lite  --enable-sockets --enable-cgi


%files安装后生成的文件
cd /usr/local/httpd ls


/usr/local/myhttpd/bin/*
/usr/local/myhttpd/cgi-bin/*
%config /usr/local/myhttpd/conf/*
/usr/local/myhttpd/build/*
/usr/local/myhttpd/error/*
/usr/local/myhttpd/htdocs/*
/usr/local/myhttpd/icons/*
/usr/local/myhttpd/include/*
/usr/local/myhttpd/lib/*
%dir /usr/local/myhttpd/logs
%doc /usr/local/myhttpd/man/*
%doc /usr/local/myhttpd/manual/*
/usr/local/myhttpd/modules/*



安装完成执行的操作
%post
ln -s /usr/local/myhttpd/bin/* /usr/local/bin/
cp -p /usr/local/myhttpd/bin/apachectl /etc/init.d/myhttpd
chmod +x /etc/init.d/myhttpd
sed -i '1a #chkconfig: 2345 91 91' /etc/init.d/myhttpd
sed -i '2a # description: haha' /etc/init.d/myhttpd
ln -s /etc/init.d/myhttpd /etc/rc3.d/K92myhttpd
ln -s /etc/init.d/myhttpd /etc/rc5.d/K92myhttpd
ln -s /etc/init.d/myhttpd /etc/rc3.d/S92myhttpd
ln -s /etc/init.d/myhttpd /etc/rc5.d/S92myhttpd
chkconfig --add myhttpd

卸载的时候需要的操作
%preun
/etc/init.d/myhttp stop
chkconfig --del myhttpd
rm -rf /etc/rc3.d/K92myhttpd
rm -rf /etc/rc5.d/K92myhttpd
rm -rf /etc/rc3.d/S92myhttpd
rm -rf /etc/rc5.d/S92myhttpd
rm -rf /etc/init.d/myhttpd
rm -rf /usr/local/myhttpd

交换日志信息时间和日期,必须和自己的系统时间一样
%changelog
* Wed May 9 2018 lisir <lisir@redhat.com> 2.2.25-1
- first rpm from httpd-2.2.25
"httpd.spec" 78L, 1881C


***************************************************

6.查看交换日志信息,包含时间日期等,将这个写到httpd.spec文件里最后。
cd /media/Packages
rpm -qp  -changelog httpd-2.2.15-29.el6.centos.x86_64.rpm

7.安装依赖关系包
yum -y install openssl vsftpd

8.执行配置文件,报错生成路径,用来复制httpd要修改的源码包。

[li@localhost ~]$ rpmbuild httpd.spec
error: File /home/li/rpmbuild/SOURCES/httpd-2.2.25.tar.gz: 没有那个文件或目录
[li@localhost ~]$ ls
httpd.spec  rpmbuild

9.在root用户下执行:
cp /root/httpd-2.2.25.tar.gz /home/li/rpmbuild/SOURCES

10.执行转换文件
rpmbuild -ba httpd.spec

参数解释:
-ba 生成源码包和二进制包
-bb 只生成二进制包

11.查看生成的rpm包
cd rpmbuild/RPMS/x86_64/

ls /home/li/rpmbuild/SRPMS
httpd-2.2.25-1.el6.src.rpm

cd rpmbuild/SRPMS/

ls /home/li/rpmbuild/RPMS/x86_64
httpd-2.2.25-1.el6.x86_64.rpm  httpd-debuginfo-2.2.25-1.el6.x86_64.rpm

12.将li用户生成的rpm转换包复制到/tmp/目录下,然后用root用户执行
cp httpd-2.2.25-1.el6.x86_64.rpm /tmp

13.yum安装通过编译转换的rpm包。
root用户:
rpm -ivh /root/桌面/httpd-2.2.25-1.el6.x86_64.rpm
service myhttpd restart
firefox 192.168.117.145
看到it work!

*************************************
nginx源码包转换为rpm包,其他安装步骤如同apache

yum -y install rpm-build
yum -y install pcre-devel zlib-devel
vim nginx.spec
编辑修改:

Name:nginx    
Version:1.8.1
Release:    1%{?dist}
Summary:nginx service     

Group:System Environment/Daemons
License:GPL
URL:www.nginx.com    
Source0:nginx-1.8.1.tar.gz
BuildRoot:    %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

BuildRequires:pcre-devel
Requires:vim

%description
this is nginx service


%prep
%setup -q


%build
./configure --prefix=/usr/local/nginx
make %{?_smp_mflags}


%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,0755)
/usr/local/nginx/
%config(noreplace) /usr/local/nginx/conf/nginx.conf
%config(noreplace) /usr/local/nginx/conf/fastcgi_params


%post
echo '#!/bin/bash' > /etc/init.d/nginx
echo '#### welcome to nginx ####' >> /etc/init.d/nginx
echo '# chkconfig: - 99 20' >> /etc/init.d/nginx
echo '# description: this is nginx server' >> /etc/init.d/nginx
echo 'PROG="/usr/local/nginx/sbin/nginx"' >> /etc/init.d/nginx
echo 'PIDF="/usr/local/nginx/logs/nginx.pid"' >> /etc/init.d/nginx
echo 'case "$1" in' >> /etc/init.d/nginx
echo ' start)' >> /etc/init.d/nginx
echo ' $PROG' >> /etc/init.d/nginx
echo ' ;;' >> /etc/init.d/nginx
echo ' stop)' >> /etc/init.d/nginx
echo ' kill -s QUIT $(cat $PIDF)' >> /etc/init.d/nginx
echo ' ;;' >> /etc/init.d/nginx
echo ' restart)' >> /etc/init.d/nginx
echo ' $0 stop' >> /etc/init.d/nginx
echo ' $0 start' >> /etc/init.d/nginx
echo ' ;;' >> /etc/init.d/nginx
echo ' reload)' >> /etc/init.d/nginx
echo ' kill -s HUP $(cat $PIDF)' >> /etc/init.d/nginx
echo ' ;;' >> /etc/init.d/nginx
echo ' *)' >> /etc/init.d/nginx
echo ' echo "Usage: $0 {start|stop|restart|status}"' >> /etc/init.d/nginx
echo ' exit' >> /etc/init.d/nginx
echo ' ;;' >> /etc/init.d/nginx
echo ' esac' >> /etc/init.d/nginx
echo ' exit 0' >> /etc/init.d/nginx
chmod +x /etc/init.d/nginx
service nginx start
chkconfig --add nginx
chkconfig nginx on


%preun
/etc/init.d/nginx stop
chkconfig --del nginx
rm -rf /etc/init.d/httpd
rm -rf /usr/local/httpd

%changelog
* Wed May 9 2018 lipengcheng <930777521@qq.com> 1.8.1
- first rpm from nginx-1.8.1

 

执行转换配置文件:
rpmbuild nginx.spec
cp nginx-1.8.1.tar.gz /root/rpmbuild/SOURCES/
rpmbuild -ba nginx.spec


cd rpmbuild/SRPMS/
ls      

cd rpmbuild/RPMS/x86_64/
ls
 
rpm -ivh nginx-1.8.1-1.el6.x86_64.rpm
service nginx restart
netstat -anpt | grep nginx
firefox 192.168.117.145



posted @ 2018-05-12 15:15  Leonardo-li  阅读(365)  评论(0编辑  收藏  举报