相關(guān)資訊
本類(lèi)常用軟件
-
福建農(nóng)村信用社手機(jī)銀行客戶(hù)端下載下載量:584204
-
Windows優(yōu)化大師下載量:416904
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機(jī)銀行客戶(hù)端下載下載量:365699
-
快播手機(jī)版下載量:325855
制作RPM安裝包分解教程
2012/12/29 9:08:43 出處:本站原創(chuàng) 人氣:1256次 字號(hào):小 中 大
我們?cè)谄髽I(yè)中有的軟件基本都是編譯的,我們每次安裝都得編譯真的是很煩唉,那怎么辦呢?那就根據(jù)我們的需求制作RPM安裝包吧。先來(lái)說(shuō)說(shuō)基本布驟:
1.Planning what you want 計(jì)劃做什么rpm包。軟件的?庫(kù)的?
2.Gathering the software to package 收集原材料,即收集源碼包
3.Patch the software as need 如果需要打補(bǔ)丁,收集補(bǔ)丁文件。此布驟不是必須
4.Outling any dependenies 確定依賴(lài)關(guān)系包
------------------ 上述動(dòng)作可由我們手動(dòng)編譯一次軟件來(lái)確定 -------------------
5.Building RPMs 開(kāi)始動(dòng)手制作RPM包
5.1 Set up the directory stucture 設(shè)定好目錄結(jié)構(gòu),我們?cè)谶@些目錄中制作我們的RPM包,我們需要下列目錄
BUILD 源代碼解壓后的存放目錄
RPMS 制作完成后的RPM包存放目錄,里面有與平臺(tái)相關(guān)的子目錄
SOURCES 收集的源材料,補(bǔ)丁的存放位置
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 創(chuàng)建spec文件,這是綱領(lǐng)文件,rpmbuild命令根據(jù)spec文件來(lái)制作合適的rpm包
5.4 Build the source and binary RPMS 制作src或二進(jìn)制rpm包
6.Test RPMS 測(cè)試制作的PRM包
7.Add signature for RPM 為RPM包簽名
我還是用連貫的話為大家敘述一遍吧,我們首先確實(shí)我們要為什么做rpm包,通常我們是為一些軟件,比如httpd,nginx等,然后去收集這些軟件包的源代碼,如果有需要的話也收集這些補(bǔ)丁文件,手動(dòng)編譯安裝一下這個(gè)軟件(當(dāng)然如果是不需要編譯的就不用演練了),確定依賴(lài)的軟件包,并記錄下來(lái),下面開(kāi)始準(zhǔn)備制作tengine的PRM包吧:
1.建立一個(gè)普通用戶(hù),有普通用戶(hù)來(lái)制作rpm,用root的可能會(huì)因?yàn)榇a問(wèn)題導(dǎo)致毀滅的后果
useradd ibuler
su - ibuler
2.確定我們?cè)谀膫(gè)目錄下制作RPM,通常這個(gè)目錄我們topdir,這個(gè)需要在宏配置文件中指定,這個(gè)配置文件稱(chēng)為macrofiles,它們通常為 /usr/lib/rpm/macros:/usr/lib/rpm/macros.*:~/.rpmmacros,這個(gè)在rhel 5.8中可以通過(guò)rpmbuild --showrc | grep macrofiles 查看,6.3的我使用這個(gè)找不到,但使用是一樣的。你可以通過(guò)rpmbuild --showrc | grep topdir 查看你系統(tǒng)默認(rèn)的工作車(chē)間
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
我們還是自定義工作目錄(或車(chē)間)吧
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 ##內(nèi)容見(jiàn)后講解,rhel6.3會(huì)自動(dòng)生成模板
6.用rpmbuild命令制作rpm包,rpmbuild命令會(huì)根據(jù)spec文件來(lái)生成rpm包
rpmbuild
-ba 既生成src.rpm又生成二進(jìn)制rpm
-bs 只生成src的rpm
-bb 只生二進(jìn)制的rpm
-bp 執(zhí)行到pre
-bc 執(zhí)行到 build段
-bi 執(zhí)行install段
-bl 檢測(cè)有文件沒(méi)包含
我們可以一步步試,先rpmbuild -bp ,再-bc 再-bi 如果沒(méi)問(wèn)題,rpmbuild -ba 生成src包與二進(jìn)制包吧
7.安裝測(cè)試有沒(méi)有問(wèn)題,能否正常安裝運(yùn)行,能否正常升級(jí),卸載有沒(méi)有問(wèn)題
root用戶(hù)測(cè)試安裝:
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 ##測(cè)試安裝
rpm -e tengine ##測(cè)試卸載,如果版本號(hào)比原來(lái)的高,升級(jí)測(cè)試
8.如果沒(méi)問(wèn)題為rpm包簽名吧,防止有人惡意更改 ##這個(gè)先不寫(xiě)了,有點(diǎn)晚了,以后補(bǔ)上
到此整個(gè)流程完畢。下面來(lái)說(shuō)說(shuō)其中最最重要的spec的格式,先說(shuō)最簡(jiǎn)單的,最容易實(shí)現(xiàn)的
vi tengine.spec
### 0.define section #自定義宏段,這個(gè)不是必須的
### %define nginx_user nginx #這是我們自定義了一個(gè)宏,名字為nginx_user值為nginx,%{nginx_user}引用
### 1.The introduction section #介紹區(qū)域段
Name: tengine #名字為tar包的名字
Version: 1.4.2 #版本號(hào),一定要與tar包的一致哦
Release: 1%{?dist} #釋出號(hào),也就是第幾次制作rpm
Summary: tengine from TaoBao #軟件包簡(jiǎn)介,最好不要超過(guò)50字符
Group: System Environment/Daemons #組名,可以通過(guò)less /usr/share/doc/rpm-4.8.0/GROUPS 選擇合適組
License: GPLv2 #許可,GPL還是BSD等
URL: http://laoguang.blog.51cto.com #可以寫(xiě)一個(gè)網(wǎng)址
Packager: Laoguang <ibuler@qq.com>
Vendor: TaoBao.com
Source0: %{name}-%{version}.tar.gz
#定義用到的source,也就是你收集的,可以用宏來(lái)表示,也可以直接寫(xiě)名字,上面定義的內(nèi)容都可以像上面那樣引用
#patch0: a.patch #如果需要補(bǔ)丁,依次寫(xiě)
BuildRoot: %_topdir/BUILDROOT
#這個(gè)是軟件make install 的測(cè)試安裝目錄,也就是測(cè)試中的根,我們不用默認(rèn)的,我們自定義,
#我們可以來(lái)觀察生成了哪此文件,方便寫(xiě)file區(qū)域
BuildRequires: gcc,make #制作過(guò)程中用到的軟件包
Requires: pcre,pcre-devel,openssl,chkconfig #軟件運(yùn)行需要的軟件包,也可以指定最低版本如 bash >= 1.1.1
%description #軟件包描述,盡情的寫(xiě)吧
It is a Nginx from Taobao. #描述內(nèi)容
### 2.The Prep section 準(zhǔn)備階段,主要目的解壓source并cd進(jìn)去
%prep #這個(gè)宏開(kāi)始
%setup -q #這個(gè)宏的作用靜默模式解壓并cd
# patch0 -p1 #如果需要在這打補(bǔ)丁,依次寫(xiě)
### 3.The Build Section 編譯制作階段,主要目的就是編譯
%build
./configure \ #./configure 也可以用%configure來(lái)替換
--prefix=/usr \ #下面的我想大家都很熟悉
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre
make %{?_smp_mflags} #make后面的意思是:如果就多處理器的話make時(shí)并行編譯
### 4.Install section 安裝階段
%install
rm -rf %{buildroot} #先刪除原來(lái)的安裝的,如果你不是第一次安裝的話
make install DESTDIR=%{buildroot}
#DESTDIR指定安裝的目錄,而不是真實(shí)的安裝目錄,%{buildroot}你應(yīng)該知道是指的什么了
### 4.1 scripts section #沒(méi)必要可以不寫(xiě)
%pre #rpm安裝前制行的腳本
if [ $1 == 1 ];then #$1==1 代表的是第一次安裝,2代表是升級(jí),0代表是卸載
/usr/sbin/useradd -r nginx 2> /dev/null
fi
%post #安裝后執(zhí)行的腳本
%preun #卸載前執(zhí)行的腳本
if [ $1 == 0 ];then
/usr/sbin/userdel -r nginx 2> /dev/null
fi
%postun #卸載后執(zhí)行的腳本
### 5.clean section 清理段,刪除buildroot
%clean
rm -rf %{buildroot}
### 6.file section 要包含的文件
%files
%defattr (-,root,root,0755) #設(shè)定默認(rèn)權(quán)限,如果下面沒(méi)有指定權(quán)限,則繼承默認(rèn)
/etc/ #下面的內(nèi)容要根據(jù)你在%{rootbuild}下生成的來(lái)寫(xiě),下面的辦法最簡(jiǎn)單,后面說(shuō)仔細(xì)用法
/usr/
/var/
### 7.chagelog section 改變?nèi)罩径?nbsp;
%changelog
* Fri Dec 29 2012 laoguang <ibuler@qq.com> - 1.0.14-1
- Initial version
到此一個(gè)tengie的rmp制作好了,抽空繼續(xù),現(xiàn)在困了。睡覺(jué)去了。
- 第 1 樓 北京開(kāi)心網(wǎng) 網(wǎng)友 客人 發(fā)表于: 2013/11/27 0:08:36
- hhjhjv