小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux SRPM包及其應用

 蘇醒的貝殼 2019-01-23

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 命令直接安裝;
  • 利用 *.spec 文件安裝。

rpmbuild命令安裝

如果我們只想安裝 SRPM 包,而不用修改源代碼,那么它的安裝方式還是比較簡單的,命令如下:

[root@localhost ~]# rpmbuild [選項] 包全名

選項:

  • -rebuild:編譯 SRPM 包,不會自動安裝,等待手工安裝;
  • -recompile:編譯 SRPM 包,同時安裝;

需要注意的是,雖然 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

  • rpmbuild 目錄下有幾個子目錄,我們用表格說明其中保存了哪些文件,如表 1 所示

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

選項:

  • -i: 安裝。不過對 *src.rpm 包只會解開后放置到當前目錄下的 rpmbuild 目錄下,而不會安裝

這時在當前目錄下也會生成 rpmbuild 目錄,不過只有 SOURCES 和 SPECS 兩個子目錄。其中,SOURCES 目錄中放置的是源碼;SPECS 目錄中放置的是設置文件,我們現(xiàn)在要利用設置文件進行安裝。接下來生成 RPM 包文件,命令如下:

[root@localhost ~]# rpmbuild -ba/root/rpmbuild/SPECS/httpd.spec

選項:

  • -ba: 編譯,同時生成 RPM 包和 SRPM 包;
  • -bb: 編譯,僅生成 RPM 包;

命令執(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ù)庫。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多