標籤:eve mod esc ice erro 基礎 ssl node www.
http2.4.27 rpm包製作
1.安裝rpm-build
yum -y install rpm-build
2.使用普通使用者建立spec規則檔案
su - lxh
vim httpd.spec
Name:httpd
Version:2.4.27
Release:1%{?dist}
Summary:compiled from 2.4.27 by lxh
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)
BuildRequires:gcc, gcc-c++, openssl-devel, make
%description
Apache web server. Compiled from 2.4.27 by lxh
%prep
%setup -q
%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}
%install
%make_install
%clean
rm -rf %{buildroot}
%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<[email protected]> 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
[[email protected] x86_64]# rpm -ivh httpd-2.4.27-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
service httpd start 正常
完成!
5.異常處理若出現
[[email protected] 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 --nodeps
rpm -ivh pcre-* --force --nodeps
httpd2.4.27rpm包製作