Linux程序包管理
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包成一個人或n個程序文件,從而更賤方便地實現程序包的安裝,升級,卸載和查詢等管理操作。
debian:dpt,dpkg.".deb"
redhat:redhat package manager,rpm,".rpm"
s.u.s.e:rpm,".rpm"
Gentoo:ports
RPM的優點:
由於RPM是通過預先編譯並打包成爲RPM文件格式後,再加以安裝的一種方式,並且還能夠進行數據庫的記載。所以RPM有以下優點:
(1)RPM內涵已經編譯過的程序與配置檔等數據,可以讓使用者免除重新編譯的困擾
(2)RPM在被安裝之前,會先檢查系統的硬盤容量,操作系統版本等,可避免文件被錯誤安裝
(3)RPM文件本身提供軟件版本的資訊,依賴性軟件名稱,軟件用途說明,軟件所含文件等資訊
(4)RPM管理的方式使用數據庫記錄(/var/lib/rpm/)RPM文件的相關參數,便於升級,移除,查詢與驗證
-
獲取程序包的途徑:
1.系統發行版的光盤或者官方的文件服務器(或者鏡像站點)
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2.項目的官方站點
3.第三方組織:
EPEL,搜索引擎:http://pkgs.org,rpm.phone.net..
4.自己動手,豐衣足食
* Centos系統上rpm命令管理程序包:
安裝,升級,卸載,查詢和檢驗,數據庫維護1.rpm命令:rpm [OPTIONS] PACKAGE_FILE 安裝:rpm {-i|--install} [install-options] PACKAGE_FILE ... 升級:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 卸載:rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ... 查詢:rpm {-q|--query} [select-options] [query-options] 檢驗:rpm {-V|--verify} [select-options] [verify-options] 數據庫維護:rpm {--initdb|--rebuilddb}[-v][--dbpath DIRECTORY]
2.安裝:rpm {-i|--install} [install-options] PACKAGE_FILE ...
GENERAL OPTIONS: -v:verbose,詳細信息 -vv:更詳細輸出 [install-options]: -h:hash marks:輸出進度條,每個#表示2%的進度 --test:測試安裝,檢查並報告依賴關係及衝突消息等 --nodeps:忽略依賴關係(不建議使用) --replacepkgs:重新安裝 --nosignature:不檢查來源合法性,不檢查包簽名信息 --nodigest:不檢查完整性 --noscripts:不自帶腳本 注意:rpm可以自帶腳本: (1):preinstall:安裝過程開始之前運行的腳本:%pre (2)postinstall:安裝之後運行的腳本:%post (3)preuninstall:卸載過程真正開始執行之前運行腳本:%preun (4)postuninstall::卸載過程真正開始執行之後運行腳本:%postun 常用組合命令:-ivh,-ivvh
3.升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... -U:升級或安裝 rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -F:升級 組合使用:-Uvh,-Fvh --test:不執行真正的安裝過程,而僅報告依賴關係及衝突信息等 --nodeps:忽略依賴關係,副作用是能安裝成功,但未必能運行成功 --oldpackage:降級到舊版本 --force:強制升級
注意:(1)不要對內核做升級操作,linux允許多內核版本,因此直接安裝新版本內核 (2)如果某原程序包的配置文件安裝後曾被修改過,升級時新版本的程序提供同一個配置文件不會覆蓋原有的版本的配置文件,而是把新版本的配置文件重命名(加後綴.rpmnew)後保存.
4.卸載:
rpm {-e|--erase} [--allmatches] [--nodeps][--test] PACKAGE_NAME ... 簡單用法:rpm -e PACKAGE_NAME ... --nodeps:忽略依賴關係 --test:測試卸載:dry-run模式 --allmatches:如果一個程序包同時安裝多個版本,則此選項一次全部卸載之; 注意:如果程序包的配置文件安裝後曾被修改,卸載時,此文件通常不會被刪除,而是被重命名(加後綴.rpmsave)後留存
5.查詢:rpm {-q|--query} [select-options] [query-options]
[select-options] -q PACKAGE_NAME:查詢某包或某些包是否安裝 -a,--all :查詢已經安裝的所有包; -f ,--file,/PATH/TO/SOMEFILE:查詢某文件是由個包安裝生成 -p,--package PACKAGE_NAME:用於實現對未安裝的程序包執行查詢操作 [query-options] --changelog:查詢rpm包的changelog; -l,--list:程序包安裝生成所有文件列表 -i,--info:程序包相關的信息,版本號,大小,所屬包,組等 -c, --configfiles:查詢指定的程序提供的配置文件 -d, --docfiles:查詢指定的程序提供的文檔 --provides:查詢某包提供的capabilties -R, --requires:查詢指定程序包所依賴關係 --scripts:查詢某包安裝或卸載時執行腳本 常用用法: -qi PACKAGE_NAME:查詢某包的相關信息 -ql PACKAGE_NAME:查詢某包安裝生成的文件列表 -qf PACKAGE_NAME:查詢某文件是由個包安裝生成 -qc PACKAGE_NAME:查詢某包安裝完成後生成的所有配置文件 -qd PACKAGE_NAME:查詢某包安裝完成後生成的所有幫助文件 -q --changelog PACKAGE_NAME:查看某包製作時隨版本變化的changelog信息 -qpi PACKAGE_FILE:查詢尚未安裝的包文件的相關信息,使用-p選項
6.檢驗:rpm {-V|--verify} [select-options] [verify-options]
查詢包安裝之後生成的文件是否發生了改變
常用用法:rpm -V PACKAGE_NAME
當沒有輸出結果時表示軟件包完整Ok
程序包的合法性驗證:
在軟件安裝之前我們最好是要對即將安裝的軟件進行合法性驗證,這樣可以檢查出軟件是否來源合法,內容合法等,在一定程度上避免一些由不安全的因素導致不安全的事件發生
所謂來源合法是指:
由我們信任的製作者提供;依賴於製作者的數字簽名,簽名是作者使用自己的私鑰加密程序包的特性碼進行的
所謂內容合法是指:
包未被二次修改;完整性校驗成功,依賴於製作者提供的程序特徵碼
驗證方式:
安裝者用同樣的特徵碼提取算法提取程序包的特徵碼,並與原作者提供的相比較
驗證其光盤中程序包的來源及完整性:
先導入合法的KEY文件rpm --import /path/to/RPM-GPG-KEY-FILE例如:rpm --import RPM-GPG-KEY-Centos-6 驗證:rpm {-K|--checksig} PACKAGE_FILE --nosignature:不檢查來源合法性 --nodiget:不檢查完整性
7.創建rpm數據庫:
rpm {-initdb|--rebuilddb}[-v][--ddpath DIRECTORY] -initdb:初始化數據庫,即數據庫完全不存時,可新建之 --rebuilddb:無論當前數據存在與否,都會直接重建此庫,構建的數據庫存放在/var/lib/rpm當中。
* Centos系統上yum命令管理程序包:
yum是通過分析RPM的標投數據後,根據各軟件的依賴關係製作有依賴關係時的解決方案,然後可以自動處理軟件的依賴性問題,以解決軟件安裝或移除與升級的問題
1.yum的配置文件:
主配置文件:/etc/yum.conf,爲各倉庫指向提供公共配置文件
各倉庫的定義:/etc/yum.repos.d/*.repo倉庫定義參數:[repositoryid]:對於當前系統的yum來講,此repositoryid用於唯一標識此repository指向,因此,其必唯一; name:此前倉庫描述信息; baseurl:url://path/to/repositroy/ #指明repository的訪問路徑,通常一個文件服務器上的輸出的某repository #url支持的類型: ftp服務:ftp://SERVER/PATH/REPOSITORY http服務:http://SERVER/PATH/TO/REPOSITORY 本地目錄:file:///PATH/TO/REPOSITORY enable={1|0} #此倉庫是否可被使用 gpgcheck={1|0} #是否對程序包做校驗 gpgkey=url://path/to/keyfile #指明gpgkey文件路徑 cost= #指明當前repositrory的訪問開銷,默認爲100
2.yum命令的使用:
yum [options] [command] [package ...] 列出已經配置的所有可用倉庫:yum repolist [all|enabled|disabled]: 顯示程序包:yum list [all|glob_exp1][glob_exp2] yum list {available|updates|installed|extras|obsoletes}[glob-exp1][...] yum grouplist [hidden][groupwildcard][...] 安裝/重新安裝程序包: yum install/reinstall package1 [package2] 升級/降級程序包: yum update/downgrade package1 [package2] 檢查可用升級: yum check-update 程序包卸載: yum remove|erase package1 [package2] 注意:所有依賴於正卸載的程序包的程序包也會被一併卸載 查看程序包信息: info [package] 查看指定程序包特性(可以是某文件)是由哪個程序包所提供: provides|whatprovides /PATH/TO/SOMEFILE 清理本地緩存: yum clean [packages|metadata|expires-cache|rpmdb|plugins|all] 構建緩存: yum makecache 以指定關鍵字搜索程序包以及summary信息: search KEYWORD 查看指定包所依賴的capabilities: deplist package1 [package2] 查看yum各歷史: history [info|list|[package] 包組管理相關命令: 列出所有的包組:yum grouplist 顯示指定包組詳情:yum groupinfo group1 安裝:yum groupinstall group1 卸載:yum groupremove group1 升級:yum groupupdate group1 注意:也可以直接用install,remove或update來管理包組,此時需要在組名前面加@符號,如:yum install @"Server Platform Development" yum命令的可用選項: -y:自動回答爲"yes" --disablerepo=:臨時禁用在配置文件中配置並啓用的某repository; --enablerepo=: 臨時啓用指定的某repo; --nogpgcheck:禁止做包校驗 yum有一些內置變量:用於保存當前平臺的信息,這些常用的變量有: (1)$releaserver:當前OS發行版的主版本號; 例如,對CentOS 6.6 x86_64,主版本號爲6: (2)$arch:平臺 i386,i486 (3)$basearch:基礎平臺,例如i686,i486以及i386的基礎平臺同爲i386 如:在yum的配置文件中定義的baseurl的路徑爲: baseurl=http://repo.xxx.com/centos/$releaserver/$basearch 且當前系統爲Centos 6.6 x86_64,因此實際的baseurl路徑爲: http://repo.xxx.com/centos/x86_64
3.製作本地yum源
第一種:使用發行版光盤作爲yum repository (1) 掛載光盤至指定掛載點: mount -r /dev/cdrom /media/cdrom/ (2)/etc/yum.repos.d下新建以.repo的配置文件: [dvdbase] name=CentOS 7 baseurl=file:///media/cdrom gpgcheck=0 enable=1 第二種:創建本地yum倉庫 (1)在基於發行版安裝createrepo程序包 (2)確定repository輸出方式: (a)本地輸出:提供一個放置rpm包的本地路徑:file的形式 (b)網絡輸出:提供一個文件服務器,配置好ftp服務或者http服務: ftp服務: 安裝程序包:vsftpd 文件存放路徑:/var/ftp/pub 啓動服務:service vsftpd start http服務: 安裝程序包:httpd 文件存放位置:/var/www/html 啓動服務:service httpd start 注意:確保防火牆服務關閉 (3)在準備好的目錄中放置rpm程序包文件 也可以通過cp命令將光盤中的程序包拷貝到以上輸出目錄中 (4)對此目錄運行createrepo命令即可: cd到以上輸出目錄執行createrepo命令即可
* 源代碼編譯安裝程序
1.編譯安裝開發工具(包組)有:
Development tools
Server Platform Development
Desktop Platform Development
Debug Tools
2.被依賴的程序包的開發組件:
(1)編譯安裝被依賴的程序
(2)安裝相關程序的名稱中包含devel子包
3.編譯人員的編譯安裝過程如下:(1)configure腳本: 選項:指定安裝位置、指定啓用的特性 --help: 獲取其支持使用的選項 選項分類: 安裝路徑設定: --prefix=/PATH/TO/SOMEWHERE: 指定默認安裝位置;默認爲/usr/local/ --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置 System types: Optional Features: 可選特性 --disable-FEATURE --enable-FEATURE[=ARG] Optional Packages: 可選包 --with-PACKAGE[=ARG] --without-PACKAGE (2)運行make命令,完成項目構建 (3)運行make install命令,完成安裝 注意:前兩步只需要普通用戶權限,建議使用普通用戶身份進行,最好一步根據安裝路徑的指定,可能會用到管理權限.
4.安裝後的配置: ```
(1) 導出二進制程序目錄至PATH環境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統重新生成緩存:
ldconfig [-v]
(3) 導出頭文件
基於鏈接的方式實現:
ln -sv
(4) 導出幫助手冊
編輯/etc/man.config文件
添加一個MANPATH