1. 程式人生 > >rpm 打包及其命令

rpm 打包及其命令

PRM打包:

RPM打包使用的是rpmbuild命令,這個命令來自rpm-build包,這個是必裝的。

$ yum install rpm-build

當然也可以直接安裝rpmdevtools,這個工具還包含一些其他的工具,同時它依賴rpm-build,所以直接安裝的話會同時把rpm-build裝上。

$ yum install rpmdevtools

原理

RPM打包的時候需要編譯原始碼,還需要把編譯好的配置檔案啊二進位制命令檔案啊之類的東西按照安裝好的樣子放到合適的位置,還要根據需要對RPM的包進行測試,這些都需要先有一個“工作空間”。rpmbuild命令使用一套標準化的“工作空間”:

$ rpmdev-setuptree

rpmdev-setuptree這個命令就是安裝rpmdevtools帶來的。可以看到運行了這個命令之後,在$HOME家目錄下多了一個叫做rpmbuild的資料夾,裡邊內容如下:

$ tree rpmbuild

rpmbuild

├── BUILD

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS

如果沒有安裝rpmdevtools的話,其實用mkdir命令建立這些資料夾也是可以的。

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

從這些檔案的名字大體也能看得出來都是幹嘛用的。具體來說:

預設位置

巨集程式碼

名稱

用途

~/rpmbuild/SPECS

%_specdir

Spec 檔案目錄

儲存 RPM 包配置(.spec)檔案

~/rpmbuild/SOURCES

%_sourcedir

原始碼目錄

儲存原始碼包(如 .tar 包)和所有 patch 補丁

~/rpmbuild/BUILD

%_builddir

構建目錄

原始碼包被解壓至此,並在該目錄的子目錄完成編譯

~/rpmbuild/BUILDROOT

%_buildrootdir

最終安裝目錄

儲存 %install 階段安裝的檔案

~/rpmbuild/RPMS

%_rpmdir

標準 RPM 包目錄

生成/儲存二進位制 RPM 包

~/rpmbuild/SRPMS

%_srcrpmdir

原始碼 RPM 包目錄

生成/儲存原始碼 RPM 包(SRPM)

環境搭好之後編輯一個.spec檔案。然後用這個檔案進行打包:

$ rpmbuild -ba hello.spec

從spec文件建立有以下選項:

-bp  #只執行spec的%pre 段(解開原始碼包並打補丁,即只做準備)

-bc  #執行spec的%pre和%build 段(準備並編譯)

-bi  #執行spec中%pre,%build與%install(準備,編譯並安裝)

-bl  #檢查spec中的%file段(檢視檔案是否齊全)

-ba  #建立原始碼與二進位制包(常用)

-bb  #只建立二進位制包(常用)

-bs  #只建立原始碼包

spec文件中常用的幾個巨集(變數)

1. RPM_BUILD_DIR:    /usr/src/redhat/BUILD

2. RPM_BUILD_ROOT:   /usr/src/redhat/BUILDROOT

3. %{_sysconfdir}:   /etc

4. %{_sbindir}:     /usr/sbin

5. %{_bindir}:       /usr/bin

6. %{_datadir}:      /usr/share

7. %{_mandir}:       /usr/share/man

8. %{_libdir}:       /usr/lib64

9. %{_prefix}:       /usr

10. %{_localstatedir}:   /usr/var

其實以上引數值都是在/usr/lib/rpm/macros檔案中定義的。

RPM命令:

RPMRedHat Package ManagerRedHat軟體包管理工具)類似Windows裡面的“新增/刪除程式”

rpm 執行安裝包

二進位制包(Binary)以及原始碼包(Source)兩種。二進位制包可以直接安裝在計算機中,而原始碼包將會由RPM自動編譯、安裝。原始碼包經常以src.rpm作為字尾名。

常用命令組合:

-ivh:安裝顯示安裝進度--install--verbose--hash

-Uvh:升級軟體包--Update;

-qpl:列出RPM軟體包內的檔案資訊[Query Package list];

-qpi:列出RPM軟體包的描述資訊[Query Package install package(s)];

-qf:查詢指定檔案屬於哪個RPM軟體包[Query File];

-Va:校驗所有的RPM軟體包,查詢丟失的檔案[View Lost];

-e:刪除包

rpm -q samba //查詢程式是否安裝

rpm -ivh  /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路徑安裝並顯示進度

rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm    //指定安裝目錄

rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm //用來檢查依賴關係;並不是真正的安裝;

rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降級為舊版本

rpm -qa | grep httpd #[搜尋指定rpm包是否安裝]--all搜尋*httpd*

rpm -ql httpd#[搜尋rpm包]--list所有檔案安裝目錄

rpm -qpi Linux-1.4-6.i368.rpm[檢視rpm]--query--package--install package資訊

rpm -qpf Linux-1.4-6.i368.rpm[檢視rpm]--file

rpm -qpR file.rpm#[檢視包]依賴關係

rpm2cpio file.rpm |cpio -div    #[抽出檔案]

rpm -ivh file.rpm #[安裝新的rpm]--install--verbose--hash

rpm -ivh

rpm -Uvh file.rpm    #[升級一個rpm]--upgrade

rpm -e file.rpm      #[刪除一個rpm包]--erase

常用引數:

Install/Upgrade/Erase options:

-i, --install                     install package(s)

-v, --verbose                     provide more detailed output

-h, --hash                        print hash marks as package installs (good with -v)

-e, --erase                       erase (uninstall) package

-U, --upgrade=<packagefile>+      upgrade package(s)

--replacepkge                    無論軟體包是否已被安裝,都強行安裝軟體包

--test                            安裝測試,並不實際安裝

--nodeps                          忽略軟體包的依賴關係強行安裝

--force                           忽略軟體包及檔案的衝突

Query options (with -q or --query):

-a, --all                         query/verify all packages

-p, --package                     query/verify a package file

-l, --list                        list files in package

-d, --docfiles                    list all documentation files

-f, --file                        query/verify package(s) owning file

RPM原始碼包裝安裝

.src.rpm結尾的檔案,這些檔案是由軟體的原始碼包裝而成的,使用者要安裝這類RPM軟體包,必須使用命令:

rpm  --recompile  vim-4.6-4.src.rpm   #這個命令會把原始碼解包並編譯、安裝它,如果使用者使用命令:

rpm  --rebuild  vim-4.6-4.src.rpm    #在安裝完成後,還會把編譯生成的可執行檔案重新包裝成i386.rpmRPM軟體包。