1. 程式人生 > >Linux 第16天 程序包管理

Linux 第16天 程序包管理

serve 自動 信息 編譯安裝程序 fresh 連接 efi 產生 的區別

Linux 第16天自習 程序包管理

時間: 20180802


目錄

Linux程序包管理

rpm包管理工具使用

yum在線包管理工具

源碼編譯安裝程序



Linux程序包管理

linux上的大部分軟件是開源的,所以他們的源碼都是公開的,可以自由獲取並安裝至自己的

linux系統上,但是對於大部分用戶而言,配置源碼安裝程序包實屬不易,並還需要安裝編譯

環境,因此發行版的廠商將這些開源的軟件在自己公司內部將其開源的軟件包在各個硬件平臺

上編譯使其形成二進制文件,並打包好此時用戶只需要獲取到此安裝包並一鍵執行安裝即可。


此時又形成了一個新問題,雖然已經解決了安裝,但是如果用戶想要卸載軟件又是個問題,

Linux安裝軟件會形成很多文件,而且其配置文件和安裝目錄可能不在同一個文件夾下,此時

如果用戶對此軟件不了解卸載此軟件也會非常令人頭痛。如果有一個和windows一樣的軟件,

即程序軟件安裝管理組件,這樣用戶卸載或安裝軟件就會方便很多,這便是linux制作出rpm,

dpkg等程序包管理組件的原因,程序包管理軟件其實是在每次安裝或卸載程序時都有一個數據

庫用來記錄程序包安裝的位置和所生成的文件等,以備用戶以後卸載刪除等。


現在包管理方便了,但是linux還有一個問題,linux軟件和window軟件安裝有一個非常大

的區別,便是解決依賴關系。linux軟件安裝時可能會需求其它軟件包安裝後才能安裝此程序。

rpm或dpkg雖然可以解決安裝程序問題,也可以提示出需要依賴其它程序包的安裝,但不會主

動去安裝所依賴的程序包。 因為一般都是安裝本地所下載的程序包,如果此程序依賴其它程序

包,則用戶還需要去網上再下載,操作比較繁瑣。 由此便產生了yum, apt等在線軟件安裝程序

管理工具。此類工具可以提供在線安裝所指定的程序包,並會主動下載和安裝所依賴的包。

rpm包管理工具使用

安裝

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-h 以#來表示安裝進程

-v verbose 顯示安裝過程

-vv

-vvv

--test 不執行真正的安裝過程,僅報告依賴關系及沖突信息等

--nodeps 忽略依賴關系,副作用是能安裝成功,可能無法運行成功

--replacepkgs 覆蓋安裝,重新安裝並覆蓋原有的文件

--force 強制安裝


安裝時常用的組合-ivh -ivvh


升級

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

-U 升級或安裝

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

-F 升級,即當前程序已經在此機器上有並已經安裝過,並還是一個舊版本


組合使用 -Uvh, -Fvh

-h 以#來表示安裝進程

-v verbose 顯示安裝過程

-vv

-vvv

--test 不執行真正的安裝過程,僅報告依賴關系及沖突信息等

--nodeps 忽略依賴關系,副作用是能安裝成功,可能無法運行成功

--oldpackage 降級到舊版本


註意:一定不要對內核執行升級,linux允許多內核共存,所以可以直接安裝多個

不同版本內核

如果程序包的配置文件安裝後曾被修改,升級時新版本的文件不會覆蓋老版本的

配置,而把新版本的文件重命名如加後綴.rpmnew後保存


卸載

rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...

簡單用法rpm -e PKG_name

--nodeps 忽略依賴關系,此程序可能被其它程序依賴,卸載有可能會導致

其它程序無法正常運行

--test 測試卸載

--allmatches 一個程序包同時安裝多個版本,則此選項一次全部卸載


註意:如果程序包的配置文件安裝後曾被修改,卸載時此文件通常不會被刪除,而是

被命名加後綴.rpmsave後留存。


查詢

查詢某包是否已經安裝,檢查安裝的所有包,和包的詳細信息,或查詢某命令由哪個

程序包生成等

rpm {-q|--query} [select-options] [query-options]

[select-options]

-qa 查詢所有已經安裝的程序包

-q 查詢程序包是否安裝

-qf 查詢文件是由哪個包安裝生成

-qpi 查詢尚未安裝的包的相關信息

[query-options]

-qi 查詢某包說明信息

-ql 列出安裝包所生成的文件列表

-qc 列出安裝包所生成的配置文件

-qd 列出安裝包的所生成的幫助文件、

-q --changelog 查看程序包制作時隨版本變化的changelog信息

-q --provides 列出程序包所提供的capabilities

-q --requires 列出程序包所依賴的capabilities

-q --scripts 列出程序包安裝卸載時所執行的腳本

腳本有四類

preinstall 安裝之前執行的腳本

postinstall 安裝之後執行的腳本

preuninstall 卸載之前執行的腳本

postuninstall 卸載之後執行的腳本


校驗

查詢包安裝之後生成的文件是否發生了改變

rpm {-V|--verify} [select-options] [verify-options]

常用用法 rpm -V PKG_name


當沒有輸出結果時表示軟件包完整OK,當有相應的結果輸出表明對應的內容有修改

具體如下:

S file Size differs

M Mode differs (includes permissions and file type)

5 digest (formerly MD5 sum) differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs

P caPabilities differ



yum在線包管理工具

yum [options] [command] [package ...]


yum 倉庫管理

yum repolist 列出已經配置的所有可用倉庫

yum repolist [all|enable|disabled]


yum 緩存管理

yum clean 清理緩存

yum clean [packages|metadata|expire-cache|rpmdb|plugins|all]

yum makecache 緩存創建,自動連接至每一個可用倉庫,下載其元數據,將其創

建為緩存


程序包查看

yum list [all|glob_exp1|glob_exp2][...]

yum list {available|updates|installed|extras|obsoletes} [glob_exp1].

yum grouplist [hidden] [groupwildcard] [...]


程序包安裝

yum install package1 pkg2...

註意: 只需要提供包名

如果某包有在不同的倉庫中有多個不同版本,默認會安裝最新版本

如果要安裝指定版本 install pkag-version


重新安裝(覆蓋安裝)

yum reinstall package1 pkg...


程序包升級

yum update [package1] pkgs...


程序包降級

yum downgrade pkag1...


檢查有哪些升級可用

yum check-update


程序包卸載

yum remov|erase package1 ...

註意: 所有依賴於正卸載的程序包的程序包會被一並卸載


查詢

程序包簡要信息yum info pkge...

搜索程序包 yum search pkge...

查詢指定文件由哪個程序包安裝生成: provides|whatprovides /path/file


安裝或升級本地的程序包文件

yum localinstall rpmfile1 ...

yum localupdate rpmfile1 ...

此種安裝方式可以解決本地的rpm所依賴的程序包無須手動安裝


包組管理

列出所有包組 yum grouplist

安裝包組 yum groupinstall group1 ...

卸載 yum groupremove group1 ...

升級 yum groupupdate group1...

查看組裏的包 yum group info grou1...

也可以使用install, remove或update來管理包組,此時需要在組名前加@符號,

如yum install @"Server Platform Development"


yum命令的可用選項

-y 自動回答yes

--disablerepo= 臨時禁用在配置文件中配置並啟用的某個repository

--enablerepo 臨時啟用指定的某repository

--nogpgcheck 禁止做包校驗


yum的一些內置變量

$releaseever 當前OS發行版的主版本號

如CentOS 6.6 x86_64 主版本號為6

$arch 平臺 i386 i486

$basearch 基礎平臺


制作本地yum源倉庫

需要用到createrepo程序 這裏不再詳述



源碼編譯安裝程序

源碼編譯安裝需要依賴環境支持,即編譯開發工具、以及各個被依賴到的程序包的開發組件

另外還需要通過訂制的編譯參數來進行編譯安裝


1. 安裝編譯開發工具(包組有)

Development tools

Server Platform Development

Desktop Platform Development

Debug Tools

2. 被依賴的程序包的開發組件

1) 編譯安裝被依賴的程序

2) 安裝相關程序的名稱中包含devel的子包


源碼程序中會將程序分開保存在多個文件夾中,文件間或許存在依賴關系,因此編譯

時可能需要按特定次序進行編譯,此時,一般會使用項目管理工具(也稱為GNU make

)對其進行管理: 構建工具會調用合適的編譯器,並根據配置文件makefile中定義的

次序對源代碼文件進行編譯。需要註意的是:

1)每個項目的程序員開發完成某版本之後,會使用autoconf為程序代碼生成一

個腳本文件configure, 其功用: 此腳本會收集當前系統上的開發環境中所依賴

各組件的版本、特性等,並檢查所依賴的環境是否能滿足,最後會根據Makefile

.in 文件生成一個makefile文件

2)每個項目的程序員開發完成某版本之後,會使用automake為程序代碼生成一

個makefile模板文件,即Makefile.in


編譯人員的編譯安裝過程如下

1) 運行configure腳本

configure腳本的選項

--help 查看幫助信息

--prefix 指定默認的安裝路徑

--sysconfdir 指定配置文件安裝路徑

--with-CAPABILITY 依賴的程序包

--without-CAPABILITY

--enable-FEATURE 啟用某個特性

--disable-FEATURE 禁用某個特性

2) 運行make 完成項目構建

3) 運行make install 完成安裝


3. 程序運行的環境

配置環境變量使其執行時不需要輸入很長的路徑去執行該程序

export PATH=extra_path:$PATH 保存於/etc/profile.d/*.sh


配置庫文件使系統可以查找到此程序的庫文件

1) 可以編輯/etc/ld.so.conf.d/*.conf文件, 添加新庫文件搜索路徑至

此文件中,每行一個

2) 執行ldconfig命令,重新生成庫映射緩存 ld.so.conf

ldconfig 命令用於生成/etc/ld.so.cache

-p 打印當前程序ld.so.cache中已經緩存的所有庫文件目錄及

庫文件映射列表

-v 顯示命令執行過程的詳細信息


配置頭文件信息方法

1) 復制所有新生成的頭文件至/usr/include目錄中

2) 創建軟鏈接 (以apache為例)

ln -sv /usr/local/apache/include /usr/include/httpd

ln -sv /usr/local/apache/include/* /usr/include/


配置man手冊文件,使man 可以讀取其配置文件

修改man的配置文件/etc/man.config /etc/man_db.conf

使用MANPATH MANPATH_MAP指令指向路徑,來讓其識別新的幫助信息


註意

如果安裝的程序是服務類程序,服務腳本文件編譯安裝不會有

盡量安裝編譯程序包至一個專用路徑下,卸載時刪除此目錄即可

其它程序語言開發的源碼包,編譯安裝方式可能會有所不同

可以通過查看程序包中自帶的安裝信息如INSTALL, README之類的文件

來獲取安裝幫助信息例如 perl python ruby java


Linux 第16天 程序包管理