http2.4.27 rpm包製做
1.安裝rpm-build
yum -y install rpm-build
2.使用普通用戶建立spec規則文件
su - lxh
vim httpd.specnode
Name: httpd
Version: 2.4.27
Release: 1%{?dist}
Summary: compiled from 2.4.27 by lxhc++
Group: System Environment/Daemons
License: GPL
URL: http://www.lxh.com
Source0: httpd-2.4.27.tar.gz
Source1: httpd
Source2: httpd.init
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)web
BuildRequires: gcc, gcc-c++, openssl-devel, makeapache
%description
Apache web server. Compiled from 2.4.27 by lxhvim
%prep
%setup -qpost
%build
./configure --prefix=/usr/local/apache \
--bindir=/usr/sbin \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-expat=builtin \
--with-pcre=builtin \
--enable-ssl \
--enable-modules=all
make %{?_smp_mflags}測試
%installui
%make_install日誌
%clean
rm -rf %{buildroot}server
%files
/usr/sbin/ab
/usr/sbin/apxs
/usr/sbin/dbmmanage
/usr/sbin/htdbm
/usr/sbin/htdigest
/usr/sbin/htpasswd
/usr/sbin/httxt2dbm
/usr/sbin/logresolve
%defattr(-,root,root,-)
/usr/local/apache/bin/*
/usr/local/apache/build/*
/usr/local/apache/cgi-bin/*
%config /usr/local/apache/conf/*
/usr/local/apache/error/*
/usr/local/apache/htdocs/*
/usr/local/apache/icons/*
/usr/local/apache/include/*
%dir /usr/local/apache/logs
%doc /usr/local/apache/man/*
%doc /usr/local/apache/manual/*
/usr/local/apache/modules/*
%post
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
sed -i '1a # chkconfig: 2345 85 15' /etc/init.d/httpd
sed -i '2a # description: apache web server' /etc/init.d/httpd
chkconfig --add httpd
%preun
/etc/init.d/httpd stop
chkconfig --del httpd
%changelog
*Tue Mar 31 2017 lxh<lxh@lxh.com> 2.4.27
--
生成工做目錄
rpmbuild httpd.spec
drwxr-xr-x 3 lxh lxh 4096 8月 1 15:24 BUILD
drwxr-xr-x 2 lxh lxh 4096 8月 1 15:26 BUILDROOT
drwxr-xr-x 3 lxh lxh 4096 8月 1 14:18 RPMS
drwxr-xr-x 2 lxh lxh 4096 8月 1 14:01 SOURCES
drwxr-xr-x 2 lxh lxh 4096 8月 1 15:22 SPECS
drwxr-xr-x 2 lxh lxh 4096 8月 1 14:18 SRPMS
##############################################
2.1定義rpm包的信息
rpm包信息,主要定義用戶查詢rpm包信息時所顯示的內容。它包含rpm包的功能描述、軟件版本、版權信息和軟件受權類型等等。
詳細信息以下:
Name定義該rpm包的名字,必需要填寫。
Version定義該rpm包的版本號,建議和源碼包的名稱保持一致。
Release定義rpm自己的版本號,使用默認值便可。
Summary定義關於該rpm包的一些介紹。
%description定義關於該rpm包的一些描述信息。
Group標識軟件包所屬類型。
License軟件受權類型,好比GPL、Commercial、Shareware。
URL定義軟件做者的主頁。
rpm包信息中最重要的是NVR,也就是name、version、release。由於最後生成的rpm包的名稱就是根據這三項來的。
rpm名稱形式,以下:name-version-release.rpm。
2.2定義源碼包
Source0用來定義製做rpm包時所須要的源碼包。若是製做rpm包時,有多個源碼包,那麼使用source和數字混合,好比:
Source0: httpd-2.4.27.tar.gz
Source1: httpd
Source2: httpd.init
注意:
Source0必需要填寫,並且填寫的名字必須是和下載源碼包名稱要如出一轍,還要注意只有tar.gz的源碼包,才能製做rpm包。
2.3定義rpm包的依賴關係
rpm包在製做過程當中會依賴基本庫,而rpm包在安裝時有時也須要其餘軟件包。這些咱們均可以經過如下選項進行控制。
BuildRequires定義製做rpm包時,所依賴的基本庫。該選項無關緊要。
Requires定義安裝該rpm包時,所依賴的軟件包。該選項無關緊要。
注意:
在這裏要重點說明一點,Requires定義所依賴的軟件包,在進行yum安裝時的狀況。
咱們在使用yum安裝軟件A時,yum會在下載完A的rpm包後,對該rpm包進行檢查(rpm包中會給出安裝該rpm包安裝時,所依賴的基礎庫和軟件)。
若是檢查出,A的安裝還要依賴軟件B,那麼此時yum就會自動下載並安裝B。B安裝完畢後,就會繼續安裝A。若是是內網yum源的話,咱們只須要把B放在內網yum源便可。
若是檢查出,A的安裝不須要其餘軟件的支持,那麼yum會自動安裝A。
2.4編譯並安裝rpm包
這一步是很是重要,相似與源碼安裝的的./configure、make、make install。主要包括%build、%install等選項。以下:
%build定義編譯軟件包時的操做
%install定義安裝軟件包,使用默認值便可。
BuildRoot定義安裝或編譯時使用的虛擬目錄,建議使用默認值便可。以下:
%(mktemp-ud%{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
該參數很是重要,由於在生成rpm包的過程當中,執行make install時就會把軟件安裝到上述的路徑中。在打包的時候,一樣依賴虛擬目錄爲根目錄進行操做。
2.5安裝以後生成的文件
rpm包在進行安裝時,會建立相關的目錄及文件,咱們就能夠在此定義。
%files定義rpm包安裝時建立的相關目錄及文件。
在該選項中%defattr (-,root,root)必定要注意。它是指定安裝文件的屬性,分別是(mode,owner,group),-表示默認值,對文本文件是0644,可執行文件是0755。
2.6安裝先後須要執行的腳本
%prep指定rpm包安裝前執行的腳本。在對軟件進行打包前,咱們還進行其餘操做。好比解壓tar.gz文件。%prep主要與%setup –q命令配合使用,建議使用默認值便可。
%post指定rpm包安裝後執行的腳本。咱們在安裝完畢rpm包後,執行軟件初始化的動做,就能夠經過%post來達到目的。好比:apache在安裝後,將apachectl拷貝成httpd等操做。默認spec模版文件不存在此選項。
%preun指定rpm包卸載前執行的腳本,該選項主要用於軟件升級的時候會執行。默認spec模版文件不存在此選項。
%postun指定rpm包卸載後執行的腳本。默認spec模版文件不存在此選項。
2.7軟件變動日誌
%changelog主要用於軟件的變動日誌。該選項無關緊要。
若是使用%changelog選項的話,必定要以*開頭,以- -結尾。時間格式爲,以下:
* 星期 月 日 年 XXX
--
##############################################
3.源碼包製做
這裏之因此解壓並從新歸檔壓縮,是由於httpd依賴於apr,在.spec中指定這個過程比較麻煩,因此就直接作到tar包裏
cd /usr/local/src
下載apr-1.5.2.tar.gz apr-util-1.5.4.tar.gz httpd-2.4.27.tar.gz
tar -zxvf apr-1.5.2.tar.gz
tar -zxvf apr-util-1.5.4.tar.gz
tar -zxvf httpd-2.4.27.tar.gz
mv apr-1.5.2 httpd-2.4.27/srclib/apr
mv apr-util-1.5.4 httpd-2.4.27/srclib/apr-util
tar cxvf httpd-2.4.27.tar.gz httpd-2.4.27/
mv httpd-2.4.27.tar.gz /home/lxh/rpmbuild/SOURCES/
mv httpd-2.4.27/build/rpm/httpd.init /home/lxh/rpmbuild/SOURCES/
chown -R lxh:lxh /home/lxh/rpmbuild/SOURCES/
su - lxh
vim /home/lxh/rpmbuild/SOURCES/httpd
HTTPD=/usr/local/apache/bin/httpd
PIDFILE=/usr/local/apache/logs/httpd.pid
這個是爲了提供給啓動腳本httpd的配置,請根據本身實際狀況來,這裏我由於要把httpd安裝在/usr/loacl/apache/中因此這麼作
cd /home/lxh/
cp httpd.spec rpmbuild/SPECS/
rpmbuild -ba rpmbuild/SPECS/httpd.spec
4.測試
su - root
cd /home/lxh/rpmbuild/RPMS/x86_64
rpm -ivh httpd-2.2.27-1.el6.x86_64.rpm
[root@localhost x86_64]# rpm -ivh httpd-2.4.27-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
service httpd start 正常
完成!
5.異常處理若出現
[root@localhost x86_64]# rpm -ivh httpd-2.4.27-1.el6.x86_64.rpm
error: Failed dependencies:
libexpat.so.0()(64bit) is needed by httpd-2.4.27-1.el6.x86_64
libpcre.so.1()(64bit) is needed by httpd-2.4.27-1.el6.x86_64
須要安裝相應依賴包:
glibc-2.17-105.el7.x86_64.rpm
glibc-common-2.17-105.el7.x86_64.rpm
glibc-devel-2.17-105.el7.x86_64.rpm
glibc-headers-2.17-105.el7.x86_64.rpm
glibc-static-2.17-105.el7.x86_64.rpm
glibc-utils-2.17-105.el7.x86_64.rpm
pcre-8.32-15.el7.x86_64.rpm
pcre-devel-8.32-15.el7.x86_64.rpm
rpm -ivh glibc-* --force --nodepsrpm -ivh pcre-* --force --nodeps