1. 程式人生 > >程序包管理與程序編譯安裝(第九章)

程序包管理與程序編譯安裝(第九章)

程序包管理

1. 程序包管理工具

1.1 dpkg包管理工具

dpkg為基於debian發行版中的程序包管理工具,例如Ubuntu、linxu mint。

aptitude:軟件包管理系統,直接輸入此命令可進入包管理的視圖

dpkg -L Package_Name:列出指定軟件包所包含的全部文件

dpkg --search absolute_file_name:查看指定文件屬於哪個包

aptitude search Package_Name:查看所有該名字的軟件包,會自動增加通配符,前面下是i表示已安裝,c表示軟件已被刪除,顯示p表示配置文件也已經被刪除,v表示包可用且未安裝。

aptitude safe-upgrade:安全的更新升級,如果存在依賴關系問題,不會強制升級

aptitude full-upgrade:更新升級,但不檢查依賴關系

aptitude dist-upgrade:更新升級,但不檢查依賴關系

aptitude remove Package_Name:刪除軟件包,但不刪除數據和配置文件

aptitude purge Package_Name:刪除軟件包,同時刪除配置文件和數據

aptitude倉庫

aptitude倉庫配置存放於/etc/apt/sources.list中


1.2 rpm包管理工具

rpm包管理工具普遍用於Redhat系列的操作系統

rpm包命名規則:

name-VERSION-release.arch.rpm

name:包名

Version:版本號

release:發行號,有可能還會顯示支持的操作系統,比如release.el7,表示適用於RHEL7

arch:運行平臺。例如x86、x86_x64、x64,無關平臺的通常會顯示noarch

rpm包依賴關系:

yum是rpm包管理器的前端工具,用於解決包之間的依賴關系

ldd:查看二進制程序所依賴的庫文件

ldconfig:管理與查看本地已裝載的庫文件

-p:顯示本地已經緩存的庫文件和文件路徑的映射關系

配置文件有/etc/ld.so.conf、/etc/ld.so.conf.d/*.conf,緩存文件有/etc/ld.so.cache

rpm包安裝

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

-i:安裝軟件包

rpm -ivh Package_Name:安裝軟件包,顯示安裝過程和安裝進度

--install-options:安裝選項

--test:測試安裝,不真正執行

--nodeps:忽略依賴關系,一般不建議

--repleacepkgs:重新安裝

--nosignature:不檢查包的來源合法性

--nodigest:不檢查包完整性

--noscripts:不執行程序包腳本片段

%pre:安裝前腳本; --nopre

%post:安裝後腳本;--nopost

%preum:卸載後腳本; --nopreun

%postun:卸載後腳本; --nopostun

rpm包升級:

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

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

-U:如果有舊版本則升級,沒有舊版本則安裝

-F:如果有舊版本則升級,沒有舊版本則不執行操作

rpm -Uvh Package_Name

rpm -Fvh Package_Name

--oldpackage:降級

--force:強制升級

對於內核不要執行升級操作,會導致系統故障;

如果程序配置文件已經被修改,升級後配置文件不會被覆蓋,而是將新版命名為filename.rpmnew保存

rpm包查詢

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

-q:查詢

[select-options]

-a:所有包

-f:查看指定文件由那個程序生成

-p /PATH/TO/PACKAGE_FILE:針對於未安裝的包做查詢操作

--whatprovides CAPABILITTY:查詢指定的CAPABILITTY由哪個包所提供

--whatrequires CAPABILITTY:查詢指定的CAPABILITTY被哪個包所依賴

[query-options]

--changelog:查詢rpm包的changelog

-c:查詢程序的配置文件

-d:查看程序的文檔

-i:查看程序的詳細信息

-l:查看指定程序安裝後生成的所有文件

--scripts:程序包自帶的腳本片段

-R:查看程序包依賴的CAPABILITTY

--provides:查看程序包所提供的CAPABILITTY

常用用法:

rpm -qi:查詢程序包的詳細信息

rpm -qf:查詢文件由那個程序包生成

rpm -qc:查看程序包所有的配置文件

rpm -ql:查看程序包所有的文件列表

rpm -qd:查看程序包所包含的文檔

rpm -qpi:查看未安裝的指定程序包的詳細信息

rpm -qpl:查看未安裝的指定程序包的文件列表

rpm -qa | grep package_name:查看指定程序包是否安裝

rpm卸載程序包

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

rpm包校驗

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


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

導入所需要公鑰:

rpm --import /PATH/FROM/GPG-PUBKEY-FILE

rpm 數據庫重建

rpm initdb:初始化,如果事先不存在數據庫則新建,否則不執行任何操作

rpm rebuilddb:重建,無論事先是否存在,都重建數據庫。


1.3 yum倉庫管理

yum服務器:

yum服務器上存儲了諸多軟件包,放置於repodata目錄下

yum客戶端

配置文件:

/etc/yum.list :為數據倉庫提供公共配置

/etc/yum.repo.d/*.repo:提供數據倉庫的配置

數據倉庫配置:

[repositoryID] #ID號

name=repo_name #倉庫名

baseurl=url://path/to/repository/ #repodata的URL

enabled={0|1} #該源是否啟用,0為關閉,1為啟用

gpgcheck={0|1} #是否進行合法性和完整性校驗,0為不校驗,1為校驗

gpgkey=URL #校驗key的URL

enablegroups={0|1} #是否基於組來批量管理程序包

failovermethod={roundrobin|priority}#故障轉移方式,輪詢根據優先級選擇,默認為roundrobin,意思為隨機。

cost= #開銷。默認為1000

yum常見命令用法

顯示倉庫列表:

yum repolist [all|enabled|disabled]:顯示本地yum源[所有的|可用的|不可用的]

顯示程序包:

yum list [all | glob_exp1] [glob_exp2] [...]:默認顯示所有程序包,可使用通配符

yum list {available|installed|updates} [glob_exp1] [...]:可用未安裝的|已安裝的|可升級的

安裝程序包:

yum install Package1 [Package2......]:安裝程序包

yum reinstall Package1 [Package2......]:重新安裝程序包

升級程序包

yum update Package1 [Package2......]:程序包升級。默認升級所有程序包

降級程序包

yum downgrade Package1 [Package2......]:降級程序包

檢查可用更新

yum check-update

卸載程序包

yum remove package1 [package2] [...]:刪除軟件但保留他的數據和配置文件

yum erase package1 [package2] [...]:刪除軟件同時刪除配置和數據文件

上述兩種方法都可以刪除軟件包且同時刪除依賴包

查看指定的特性(可以是某文件)是由哪個程序包所提供

yum provides feature1 [feature2] [...]

yum whatprovides feature1 [feature2] [...]

清理本地緩存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]:包緩存|元數據緩存|過期的緩存|rpmDB|插件|全部緩存

構建緩存:

yum makecache

搜索:

yum search string1 [string2] [...]:已指定的關鍵字搜索程序名及summary信息

查看指定的包所依賴的CAPABILITTY:

yum deplist package1 [package2] [...]

查看事務歷史:

yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安裝和升級本地包:

yum localinstall RPMFILES1......:安裝

yum localupdate RPMFILES1......:升級

包組管理的相關命令:

yum groupinstall group1 [group2] [...]:安裝

yum groupupdate group1 [group2] [...]:升級

yum grouplist [hidden] [groupwildcard]:包組列表,可使用通配符

yum groupremove group1 [group2] [...]:刪除

yum groupinfo group1 [group2] [...]:查詢包組信息

處理損壞的包的依賴關系

1、yum clean all

2、yum update 如果未恢復繼續3

3、yum deplist PACKAGE_NAME:顯示包的依賴關系,如果未成功請繼續4

4、yum update --skip-broken:忽略壞損的包,繼續更新其他包

1.4 yum倉庫創建

使用光盤做yum源

先掛載光盤

#mount -r -t iso9660 /dev/cdrom /media/cdrom

創建配置文件

[CentOS7]

name=

baseurl=file://.......

gpgcheck=

enabled=

yum的命令行選項

--nogpgcheck:禁止進行gpgcheck

-y:自動回答為yes

-q:靜默模式

--disablerepo=repoidglob:臨時禁用此處指定的repo

--enablerepo=repoidglob:臨時啟用此處的repo

--noplugins:禁用所有插件

yum的repo配置文件中的可用變量

$releasever:當前OS的發行版的主版本號

$arch:平臺

$basearch:基礎平臺

$YUM0-$YUM9:這些將會替換為shell環境中相同的值

創建yum倉庫

createrepo [options] <directory>

2、 使用源碼安裝程序

(1)查看INSTALL、README文件中的安裝步驟和註意事項

(2)./configure

此命令的用途:

通過選項傳遞參數,指定啟用特性和安裝路徑等;執行時會參考用戶指定以及Makefile.ini文件生成makfile

檢查依賴的外部環境

命令執行完成後查看執行結果,若有未安裝的外部依賴環境和程序會有提示,安裝即可。

(2)make

此命令用途:

根據makefile文件構建應用程序

(3)make install

安裝程序

./configure的相關參數

--help:查看幫助

--prefix=/PATH/TO/SOMEFILE:指定安裝路徑,默認為/usr/local/

--sysconfdir=/PATH/TO/SOMEFIEL:配置文件安裝位置

--disable-FEATURE:關閉某特性

--enable-FEATURE:開啟某特性

--with-PACKAGE:可選包

--without-PACKAGE:不可選包

安裝後的配置

(1)導出二進制程序至PATH環境變量中

編輯文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

(2)導出庫文件路徑

編輯/etc/ld.so.conf.d/NAME.conf

添加新的庫文件所在目錄至此文件中

使用ldconfig 讓系統重新生成緩存

(3)導出頭文件

基於鏈接的方式實現

ln -sv

(4)導出幫助手冊

編輯/etc/man.config文件,添加一個MANPATH


本文出自 “學海無涯” 博客,謝絕轉載!

程序包管理與程序編譯安裝(第九章)