|
SRPM 包是什么呢?SRPM 包中的軟件不再是經(jīng)過編譯的二進制文件,而是源碼文件,所以你可以認為 SRPM 包是軟件以源碼形式發(fā)布之后,再封裝成 RPM 包格式的。 不過,既然是將源碼文件封裝成 RPM 包格式,那么它的安裝方法既不和 RPM 包軟件安裝方法一致,也不和源碼包軟件安裝方法一樣,我們需要單獨學習它的安裝方法。 我們依然下載 apache 的 SRP M包,來看看 SRPM 包的安裝方法。需要注意的是 SRPM 包的命名規(guī)則,其實和 RPM 包的命名規(guī)則是一致的,只是多了'.src'這個標志。比如'MySQL-5.5.29-2.el6.src.rpm',采用'包名-版本-發(fā)行版本.軟件發(fā)行商.src.rpm'這樣的方式命名。 SRPM 包管理需要使用命令 rpmbuild,默認這個命令沒有安裝,需要手工安裝。命令如下: [root@localhost~]#rpm-ivh/mnt/cdroin/Packages/rpm-build-4.8.0-27.el6.i686.rpm Preparing... ################### [100%] 1:rpm-build ################### [100%] SRPM 包有兩種安裝方式:
rpmbuild命令安裝如果我們只想安裝 SRPM 包,而不用修改源代碼,那么它的安裝方式還是比較簡單的,命令如下: [root@localhost ~]# rpmbuild [選項] 包全名 選項:
需要注意的是,雖然 SRPM 包內(nèi)是源碼包,但畢竟是采用 RPM 包封裝的,所以依然會有依賴性,這時需要先安裝它的依賴包,才能正確安裝。我們使用如下命令編譯 SRPM 包的 apache。 [root@localhost ~]# rpmbuild - rebuild httpd-2.2.15-5.el6.src.rpm warning: InstallSourcePackage at: psm.c:244: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root #警告為mockbuild用戶不存在,使用root代替。這里不是報錯,不用緊張 …省略部分輸出… Wrote: /root/rpmbuild/RPMS/i386/ httpd-2.2.15-5.el6.i386.rpm Wrote: /root/rpmbuild/RPMS/i386/httpd-devel-2.2.15-5.el6.i386.rpm Wrote: /root/rpmbuild/RPMS/noarch/httpd-manual-2.2.15-5.el6.noarch.rpm Wrote: /root/rpmbuild/RPMS/i386/httpd-tools-2.2.15-5.el6.i386.rpm Wrote: /root/rpmbuild/RPMS/i386/ mod_ssl-2.2.15-5.el6.i386.rpm #寫入RPM包的位置,只要看到,就說明編譯成功 Executing(%clean): /bin/sh -e/var/tmp/rpm-tmp.Wb8TKa + umask 022 + cd/root/rpmbuild/BUILD + cd httpd-2.2.15 + rm -rf /root/rpmbuild/BUILDROOT/httpd-2.2.15-5.el6.i386 + exit 0 Executing(-clean): /bin/sh -e/var/tmp/rpm-tmp.3UBWql + umask 022 + cd/root/rpmbuild/BUILD + rm-rf httpd-2.2.15 + exit 0 exit 0 是編譯成功的標志,同時命令會自動刪除臨時文件。編譯之后生成的軟件包在哪里呢?當然在當前目錄下了。在當前目錄下會生成一個 rpmbuild 目錄,所有編譯之后生成的軟件包者都存在這里。 [root@localhost ~]# ls /root/rpmbuild/ BUILD RPMS SOURCES SPECS SRPMS
BUILD 編譯過程中產(chǎn)生的數(shù)據(jù)保存位置 RPMS編譯成功后,生成的RPM包保存位置 SOURCES從SRPM包中解壓出來的源碼包(*.tar.gz)保存位置 PECS生成的設置文件的安裝位置。 第二種安裝方法就是利用這個文件進行安裝的SRPMS放置SRPM包的位置 編譯好的 RPM 包已經(jīng)生成在 /root/rpmbuild/RPMS/ 目錄下。 [root@localhost ~]#ll /root/rpmbuild/RPMS/i386/ 總用量3620 -rw--r--r-- 1 root root 3039035 11月19 06:30 httpd-2.2.15-5.el6.i386.rpm -rw--r--r-- 1 root root 154371 11月19 06:30 httpd-devel-2.2.15-5.el6.i386.rpm -rw--r--r-- 1 root root 124403 11月19 06:30 httpd-tools-2.2.15-5.el6.i386.rpm -rw--r--r-- 1 root root 383539 11月19 06:30 mod_ssl-2.2.15-5.el6.i386.rpm 其實,rpmbuild 命令就是先把 SRPM 包解開,得到源碼包;然后進行編譯,生成二進制文件;最后把二進制文件重新打包生成 RPM 包。 利用*.spec文件安裝想利用 *.spec 文件安裝,當然需要先把 SRPM 包解開才能獲取??梢岳?rpmbuild 命令解開 SRPM 包,但是這樣不就和上一種方法沖突了嗎?可以使用 rpm-i 命令解開 SRPM 包,命令如下: [root@localhost ~]# rpm -i httpd-2.2.15-5.el6.src.rpm 選項:
這時在當前目錄下也會生成 rpmbuild 目錄,不過只有 SOURCES 和 SPECS 兩個子目錄。其中,SOURCES 目錄中放置的是源碼;SPECS 目錄中放置的是設置文件,我們現(xiàn)在要利用設置文件進行安裝。接下來生成 RPM 包文件,命令如下: [root@localhost ~]# rpmbuild -ba/root/rpmbuild/SPECS/httpd.spec 選項:
命令執(zhí)行完成后,也會在 /root/rpmbuild/ 目錄下生成 BUILD、RPMS、SOURCES、SPECS 和 SRPMS 目錄,RPM 包放在 RPMS 目錄中,SRPM 包生成在 SRPMS 目錄中。這時安裝 RPM 包即可。 rpm包的深入應用查詢軟件包幫助信息 有這樣一個問題:在 Vim 的配置文件中如何注釋?實際上,Vim 的配置文件存放于用戶的宿主目錄下,默認文件名為'.vimrc',可以寫入'set nu'等設置命令,問題是寫入此配置文件中的命令如何注釋使其不生效。 一般來講,Linux 系統(tǒng)或系統(tǒng)軟件的配置文件可以在行首使用'#'符號來注釋,但是當用'#'注釋了 Vim 的配置文件保存退出后,編輯文件時發(fā)生了這樣的情況: [root@localhost ~]# vi /etc/inittab Error detected while processing /root/.vimrc: line 1: E488: Trailing characters: # set nu 系統(tǒng)提示錯誤,所以并不是 Vim 的有效注釋符號。 諸如此類問題,應如何查詢得到結(jié)果?思路:Linux 中安裝的軟件包大多包含應用示例或說明文檔,可以査找到其內(nèi)容,就可以知道此問題的答案了。 1) 査找系統(tǒng)中所有Vim的安裝包。 [root@localhost ~]# rpm -qa|grep vim vim-minimal-7.0.109-3 vim-common-7.0.109-3 vim-enhanced-7.0.109-3 2) 査詢安裝包的內(nèi)容,査找是否有應用示例文件,看英文含義,'minimal'為最小應用軟件包,'common'為通用的基礎軟件包,'enhanced'為増強功能的軟件包。我們在這里先査看'virrvcommon'軟件包安裝到系統(tǒng)中的文件是否有示例文件(如包含關(guān)鍵字'example'或'sample'的文件)。 [root@localhost ~]# rpm -ql vim-common|grep example /usr/share/vim/vim70/gvimrc_example.vim /usr/share/vim/vim70/macros/urm/examples /usr/share/vim/vim70/vimrc_example.vim 根據(jù)査找到的文件名稱,判斷'vimrc_example.vim'應為 Vim 配置文件示例,査看其內(nèi)容。 [root@localhost ~]# head -4 /usr/share/vim/vim70/ vimrc_example.vim 'An example for a vimrc file. ' 'Maintainer: Bram Moolenaar <Bram@vim.org> 'Last change: 2006 Aug 12 當看到此文件中'作者''最后更新日期'等信息前面的雙引號時,我們就清楚了它一定是 Vim 配置文件的注釋符號。 這是一個在應用 Linux 時碰到的問題,很有代表性,像常見的配置網(wǎng)絡服務器(如 DNS、DHCP 等),査找它們的配置文件示例,都可以采用類似方法。解決此類問題要多利用系統(tǒng)軟件本身的幫助信息,使用 RPM 査詢命令。 RPM數(shù)據(jù)庫問題 有時 RPM 數(shù)據(jù)庫也會出現(xiàn)故障,其結(jié)果是當安裝、刪除、査詢軟件包時,請求無法執(zhí)行,此時需要重建數(shù)據(jù)庫。 首先,刪除當前的 RPM 數(shù)據(jù)庫。 [root@localhost ~]# rm -f/var/lib/rpm/_db.* 其次,重建數(shù)據(jù)庫。 [root@localhost -]# rpm -rebuilddb 這一步需要花費一定的時間來完成。 黑客入侵系統(tǒng)后,有時為混淆雛,避免管理員通過 RPM 包校驗功能檢測出問題,會更改 RPM 數(shù)據(jù)庫(從理論上來講,當系統(tǒng)被入侵后,一切都將不再可信),此時我們可按照以下步驟對文件進行檢測。 1) 對于要檢査的文件或命令,找出它屬于哪個軟件包。 [root@localhost ~]# rpm -qf/etc/rc.d/init.d/smb samba-3.0.23c-2 2) 使用 -dump 選項査看每個文件的信息,使用 grep 命令提取對應文件信息。 [root@localhost ~]# rpm -ql -dump samba|grep /etc/rc.d/init.d/smb /etc/rc.d/init.d/smb 2087 1157165946 b1c26e5292157a83cadabe851bf9b2f9 0100755 root root 1 0 0X 其中,'2087'為文件中最初的字符數(shù),'b1c26e5292157a83cadabe851bf9b2f9'為 smb 文件內(nèi)容的 MD5 校驗值,'0755 root root'為文件權(quán)限及所有者、所屬組。 3) 檢査實際的文件,看內(nèi)容是否被更改過。 [root@localhost ~]# ls -l /etc/rc.d/init.d/smb -rwxr-xr-x 1 root root 2087 Sep 2 2006/etc/rc.d/init.d/smb [root@localhost ~]# md5sum /etc/rc.d/init.d/smb b1c26e5292157a83cadabe851bf9b2f9 /etc/rc.d/init.d/smb 檢測文件大小、所有者、所屬組、權(quán)限、MD5 校驗值是否匹配。 4) 在我們的實驗中,系統(tǒng)的 /etc/rc.d/init.d/smb 文件的信息和通過 rpm-ql-dump Samba 命令獲取的信息是一致的,所以我們系統(tǒng)中的文件并沒有被入侵與更改。如果確信 RPM 數(shù)據(jù)庫遭到了修改,就要基于從光盤或者其他值得信賴的來源處獲得的Samba RPM文件進行檢査。 [root@localhost~]# rpm -ql --dump -p /mnt/cdrom/Fedora/RPMS/samba-3.0.23c-2.i386.rpm | grep /etc/rc.d/init.d/smb warning: samba-3.0.23c-2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 412a&62 /etc/rc.d/init.d/smb 2087 1157165946 b1c26e5292157a83cadabe851 bf9b2f9 0100755 root root 1 0 0 X 如果得到的結(jié)果與基于 RPM 數(shù)據(jù)庫運行的命令結(jié)果不同,就可以判斷 RPM 數(shù)據(jù)庫已被更改,需要修正文件錯誤和系統(tǒng)漏洞,重建 RPM 數(shù)據(jù)庫。 |
|
|