麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > Apache > 正文

爛泥:Linux源碼包制作RPM包之Apache

2024-08-27 18:29:18
字體:
來源:轉載
供稿:網友
爛泥:linux源碼包制作RPM包之Apache

本文由秀依林楓提供友情贊助,首發于爛泥行天下

公司服務器比較多,需要把apache源碼包制作成rpm包,然后放到公司內網yum源上進行下載安裝。apache的rpm包安裝方式比源碼安裝方式比較快,這能節約不少的時間。

有關內網yum源的搭建,可以參考《爛泥:yum的使用及配置》這篇文章。

一、安裝rpm-build

查閱相關資料得知,要把源碼包制作成rpm包需要使用rpm打包工具rpm-build。

rpm-build通過rpmbuild命令根據本地源碼包,通過spec文件中的規則就可以把源碼包制作成rpm包。

現在我們來安裝rpm-build包,如下:

yum -y install rpm-build

clip_image001

rpm-build安裝完畢后,我們來查看rpm-build的rpm包信息。如下:

cd /var/cache/yum/x86_64/6/updates/packages/

clip_image002

注意:yum安裝軟件默認是安裝完畢立即刪除的,但是我們可以通過修改yum.conf文件使其不刪除。

cat /etc/yum.conf

clip_image003

查看rpm-build的rpm包相關信息,如:軟件名稱、版本、build日期、功能描述、大小等等。如下:

rpm -qpi rpm-build-4.8.0-38.el6_6.x86_64.rpm

clip_image004

查看rpm-build的rpm包含安裝的目錄和文件,如下:

rpm -qpl rpm-build-4.8.0-38.el6_6.x86_64.rpm

clip_image005

查看rpm-build的rpm包的配置文件,如果該該rpm包沒有配置文件的話就不會顯示。

rpm -qpc rpm-build-4.8.0-38.el6_6.x86_64.rpm

clip_image006

查看rpm-build的rpm包的依賴關系,如下:

rpm -qPR rpm-build-4.8.0-38.el6_6.x86_64.rpm

clip_image007

除此之外,如果想查看這個文件屬于哪個rpm 包,我們也可以使用以下命令。如下:

rpm -qf /etc/init.d/iptables

clip_image008

有關rpm命令的詳細使用方法,我們也可以通過man rpm進行查看。如下:

man rpm

clip_image009

二、spec規則文件內容詳解

spec文件是整個rpm包制作的核心,它的作用如同源碼編譯程序時的Makefile文件一樣。

spec文件包含建立一個rpm包必要的信息,包括哪些文件是包的一部分以及它們安裝在哪個目錄等等信息。

注意:spec文件必須由普通用戶創建,并且強烈建議使用vi或者vim命令創建。

我們先來創建一個httpd.spec文件,使用vi命令,如下:

vi httpd.spec

whoami

pwd

clip_image010

通過上圖,我們可以很明顯的看出,目前httpd.spec文件中已經有spec文件的選項。我們所需要做的就是根據這些選項來填寫該spec文件,填寫完畢后保存即可。

注意:在新建一個spec文件時,系統會默認創建一個spec文件模版。只是該模版是空的,如果沒有填寫內容的話,是無法保存該文件的。

下面我們就開始講解spec文件的相關選項,spec文件內容一般分為如下幾個部分:

定義rpm包的信息、定義源碼包、定義rpm包的依賴關系、打包前的工作、編譯并安裝rpm包、安裝之后生成的文件、安裝前后需要執行的腳本、軟件變更日志

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: tbsys-src.tar.gz

source1: tbnet-src.tar.gz

source2: tair-2.1.0-src.tar.gz

注意:

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

--

示例為:

* Tue Mar 03 2015 ilanni2.2.27

--

注意:星期和月一定要使用英文,并且是簡寫的,否則會報錯。如下:

clip_image011

三、httpd.spec文件示例

下面就以系統提供的spec文件為模版,把apache源碼包制作成rpm包。apache的spec文件如下:

Name: httpd

Version: 2.2.27

Release: 1%{?dist}

Summary: compiled from 2.2.27 by ilanni

Group: System Environment/Daemons

License: GPL

URL: http://www.ilanni.com

Source0: httpd-2.2.27.tar.gz

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

BuildRequires: gcc, gcc-c++, openssl-devel

%description

Apache web server. Compiled from 2.2.27 by ilanni

%prep

%setup -q

%build

./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-cgi --enable-ssl --enable-charset-lite --enable-suexec --with-suexec-caller=daemon --with-suexec-docroot=/usr/local/httpd/htdocs

make %{?_smp_mflags}

%install

rm -rf %{buildroot}

make install DESTDIR=%{buildroot}

%clean

rm -rf %{buildroot}

%files

%defattr(-,root,root,-)

/usr/local/httpd/bin/*

/usr/local/httpd/build/*

/usr/local/httpd/cgi-bin/*

%config /usr/local/httpd/conf/*

/usr/local/httpd/error/*

/usr/local/httpd/htdocs/*

/usr/local/httpd/icons/*

/usr/local/httpd/include/*

/usr/local/httpd/lib/*

%dir /usr/local/httpd/logs

%doc /usr/local/httpd/man/*

%doc /usr/local/httpd/manual/*

/usr/local/httpd/modules/*

%post

cp /usr/local/httpd/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 3 2015 ilanni<[email protected]> 2.2.27

--

clip_image012

四、生成相關目錄

要生成rpm包的相關目錄,我們可以通過手工創建,也可以通過rpmbuild命令創建。如下:

rpmbuild httpd.spec

clip_image013

注意:在使用rpmbuild生成rpm包的相關目錄時會報錯,這個不需要去管它。

tree rpmbuild/

clip_image014

通過上圖,我們可以很明顯的看到rpmbulid命令已經生成相關的目錄。

每個目錄的作用,如下:

BUILD用于存放解壓后的文件。

BUILDROOT用安裝或編譯時使用的虛擬目錄。

RPMS用于存放由rpmbuild制作好的二進制包。

SOURCES用于存放源代碼、補丁、圖標等文件。

SPECS用于存放用于管理rpm制作進程的spec文件。

SRPMS用于存放由rpmbuild制作好的源碼包。

五、把文件拷貝到指定目錄

相關目錄創建完畢后,現在我們需要把相關apache的源碼文件以及spec文件復制指定的目錄。如下:

cp httpd-2.2.27.tar.gz rpmbuild/SOURCES/

cp httpd.spec rpmbuild/SPECS/

clip_image015

六、生成RPM

以上配置完畢后,我們現在就開始生成rpm包,使用rpmbuild命令。如下:

rpmbuild -ba rpmbuild/SPECS/httpd.spec

clip_image016

clip_image017

通過上圖,我們可以很明顯的看出rpm包已經制作成功。

新生成的rpm包存放在rpmbuild/RPMS/目錄下,而源碼rpm包則存放在rpmbuild/SRPMS/目錄下。

注意:rpmbuild –ba命令的意思是編譯后做成*.rpm包和src.rpm包。

七、測試生成RPM

rpm包制作完成后,我們來測試該rpm包。如下:

cp /home/ilanni/rpmbuild/RPMS/x86_64/httpd-2.2.27-1.el6.x86_64.rpm ./

rpm -ivh httpd-2.2.27-1.el6.x86_64.rpm

clip_image018

通過上圖,我們可以很明顯的看出,通過源碼制作的rpm已經正常安裝。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久久久大牛 | 羞羞电影在线观看 | 国产流白浆高潮在线观看 | 爽爽视频免费看 | 91福利免费观看 | 麻豆19禁国产青草精品 | 亚洲第一视频在线 | 91麻豆精品国产91久久久无需广告 | av手机免费在线观看 | 一级成人毛片 | 久色精品 | 久久久久久久九九九九 | av电影院在线观看 | 久久777国产线看观看精品 | 久久爽精品区穿丝袜 | v片在线看| 精品人成 | 国产精品视频不卡 | 成人做爰www免费看 欧美精品免费一区二区三区 | 蜜桃网站在线 | av影院在线播放 | 9797色| 99国产精品国产免费观看 | 91久久精品一二三区 | 国产免费一区 | 国产精品午夜未成人免费观看 | 色综合精品 | 国产精品视频一区二区噜噜 | 久草干| 久草在线视频新 | 羞羞视频免费网站含羞草 | 日韩黄色一级视频 | 黄色的视频在线观看 | 一区二区三区欧洲 | 久久精品亚洲精品国产欧美kt∨ | 成人免费av在线播放 | 日韩精品中文字幕一区 | 粉嫩av一区二区三区四区在线观看 | v11av在线播放 | 97伦理| 国产女做a爱免费视频 |